gpt4 book ai didi

java - 使用 ResultSet 检索整行

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:49 25 4
gpt4 key购买 nike

是否可以在不为每一列调用 getInt(..) getString(..) 的情况下检索整行?

我有多个线程,每个线程都需要将结果写入某个线程安全集合。
我希望能够将行直接写入此集合,然后解析此集合的成员并根据列类型检索值。

最佳答案

您可以构建一个像这样的类,它将 sql 数据类型映射到 java 数据类型:

class Row
{
public Map <Object,Class> row;
public static Map <String, Class> TYPE;

static
{
TYPE = new HashMap<String, Class>();

TYPE.put("INTEGER", Integer.class);
TYPE.put("TINYINT", Byte.class);
TYPE.put("SMALLINT", Short.class);
TYPE.put("BIGINT", Long.class);
TYPE.put("REAL", Float.class);
TYPE.put("FLOAT", Double.class);
TYPE.put("DOUBLE", Double.class);
TYPE.put("DECIMAL", BigDecimal.class);
TYPE.put("NUMERIC", BigDecimal.class);
TYPE.put("BOOLEAN", Boolean.class);
TYPE.put("CHAR", String.class);
TYPE.put("VARCHAR", String.class);
TYPE.put("LONGVARCHAR", String.class);
TYPE.put("DATE", Date.class);
TYPE.put("TIME", Time.class);
TYPE.put("TIMESTAMP", Timestamp.class);
// ...
}

public Row ()
{
row = new HashMap<Object,Class>();
}

public <T> void add (T data)
{
row.put(data, data.getClass());
}

public void add (Object data, String sqlType)
{
add((Row.TYPE.get(sqlType)) data);
}

public static void formTable (ResultSet rs, ArrayList<Row> table)
{
if (rs == null) return;

ResultSetMetaData rsmd = rs.getMetaData();

int NumOfCol = rsmd.getColumnCount();

while (rs.next())
{
row = new Row ();

for(int i = 1; i <= NumOfCol; i++)
{
row.add(rs.getObject(i), rsmd.getColumnTypeName(i));
}

table.add(row);
}
}
}

你可以这样使用它:

List<Row> table = new ArrayList<Row>();

Row row = null;

ResultSet rs = st.executeQuery("SELECT * FROM table_name");

Row.formTable(rs, table);

然后您可以检索字段并将它们转换为各自的数据类型:

for (Row row : table)
{

for (Object data : row.row.getKeySet())
{
System.out.print(" > " + ((row.row.get(data) data));
}

System.out.println();

}

关于java - 使用 ResultSet 检索整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16882971/

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