gpt4 book ai didi

java - 将数据库表的结果解析为通用集合

转载 作者:行者123 更新时间:2023-12-01 12:47:11 25 4
gpt4 key购买 nike

我有一个 Java 方法,可以解析数据库中的一些数据

ArrayList<Object> nodeList = new ArrayList<Object>();

public void parseResults() throws SQLException, ListEmptyException, NoRecognisableCharacterException{
// parses records from a query. ONLY ONE COLUMN
while(getResultSet().next()){
for(int i = 1; i <= getNumberOfColumns(); i++){
switch(getColumnType()){
//According to the datatype, I call the proper method get[DataType] of resultSet
case 0:throw new ListEmptyException();
case 4:nodeList.add(getResultSet().getInt(i));break;
case 12:nodeList.add(getResultSet().getString(i).trim());break;
default:throw new NoRecognisableCharacterException();
}
}
}
}

我被告知不要使用 ArrayList<Object>来存储不同类型的数据。我必须创建一个解析适当数据类型的实体。我不想为每个数据类型(有很多)重载该方法,也不想创建仅更改单个 get[DataType] 的单独类。方法,也没有 switch内部循环for循环,也没有根据数据类型的 nodeList 的多个实例。有没有办法让该方法适用于每种数据类型?在这种情况下应该使用泛型吗?预先感谢您。

最佳答案

您可以将结果集对象包装在如下类中:

public class ObjectWrapper implements Wrapper {
private Object wrappedObject;

public ObjectWrapper(Object wrappedObject) {
this.wrappedObject = wrappedObject;
}

@SuppressWarnings("unchecked")
public <T> T unwrap(Class<T> paramClass) {
return (T) wrappedObject;
}

public boolean isWrapperFor(Class<?> paramClass) {
return paramClass.isInstance(wrappedObject);
}

public static Wrapper wrap(ResultSet rs, int column, int columnType) throws SQLException {
if (columnType == 0) {
return new EmptyListExceptionWrapper();
} else {
return new ObjectWrapper(rs.getObject(column));
}
}
}

以及一个管理异常的类:

public class EmptyListExceptionWrapper implements Wrapper {
@Override
public <T> T unwrap(Class<T> paramClass) throws SQLException {
return null;
}

@Override
public boolean isWrapperFor(Class<?> paramClass) throws SQLException {
return false;
}
}

那么你就有了

ArrayList<Wrapper> wrapper = new ArrayList<Wrapper>;

您的代码将是:

while(getResultSet().next()){    
for(int i = 1; i <= getNumberOfColumns(); i++){
wrappers.add(ObjectWrapper.wrap(getResultSet(), i, getColumnType()));
}
}

关于java - 将数据库表的结果解析为通用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com