gpt4 book ai didi

Java ResultSet 复制到通用对象或列表

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

我知道使用 ResultSet 的问题,并且已经看到有关将数据提取到对象(或列表)中的示例,但是,我想以通用方式执行此操作,即不必知道类.

有没有一种方法可以使结果成为一个对象或列表,然后我可以使用反射对其进行迭代?

我检查过的解决方案要么似乎不起作用,要么需要目标类的类意识,包括:

我也试过 ResultSetMapper ( http://resultsetmapper.sourceforge.net/ ),它似乎也需要这个类。我真的只想要一个我可以操作的对象或列表。

最佳答案

这是非常通用的:

Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM Clients WHERE ID <= 2");

// collect column names
List<String> columnNames = new ArrayList<>();
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
columnNames.add(rsmd.getColumnLabel(i));
}

int rowIndex = 0;
while (rs.next()) {
rowIndex++;
// collect row data as objects in a List
List<Object> rowData = new ArrayList<>();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
rowData.add(rs.getObject(i));
}
// for test purposes, dump contents to check our results
// (the real code would pass the "rowData" List to some other routine)
System.out.printf("Row %d%n", rowIndex);
for (int colIndex = 0; colIndex < rsmd.getColumnCount(); colIndex++) {
String objType = "null";
String objString = "";
Object columnObject = rowData.get(colIndex);
if (columnObject != null) {
objString = columnObject.toString() + " ";
objType = columnObject.getClass().getName();
}
System.out.printf(" %s: %s(%s)%n",
columnNames.get(colIndex), objString, objType);
}
}

对于我的测试数据(在 SQL Server 中),它将以下内容打印到控制台:

Row 1
ID: 1 (java.lang.Integer)
LastName: Thompson (java.lang.String)
FirstName: Gord (java.lang.String)
DOB: (null)
Row 2
ID: 2 (java.lang.Integer)
LastName: Loblaw (java.lang.String)
FirstName: Bob (java.lang.String)
DOB: 1966-09-12 16:03:00.0 (java.sql.Timestamp)

关于Java ResultSet 复制到通用对象或列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23840410/

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