gpt4 book ai didi

java - 在 Java JDBC 中将行插入到 ResultSet 中而不使用 update 方法

转载 作者:行者123 更新时间:2023-12-02 10:41:57 25 4
gpt4 key购买 nike

Q1:我有一个循环,其中有一个 select 语句。现在我想将 select 语句中的所有这些行累积到 ResultSet 中,然后将其用于循环外的其他目的。我怎样才能实现这一目标?

while(rs.next()){
//some code..
String sql2 = "select cast(multiset(select * from table(sys.dbms_debug_vc2coll("+ar.toString().replace("[","").replace("]","")+"))) as UDT),"+rn+" as test from dual"; //returns a user defined datatype which is defined in my db schema
PreparedStatement ps2=conn.prepareStatement(sql2,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs2 = ps2.executeQuery(); //I need to use rs2 with all selected rows, outside the loop
rs2.moveToInsertRow();
rs2.updateObject(1, "update"); //why?
rs2.insertRow();
}

rs,这里是另一个ResultSet。 UDT 是我的数据库模式中用户定义的数据类型,ar 是在//some code 部分中定义和填充的 ArrayList

此外,原始选择语句类似于:

select cast(multiset(select *  from table(sys.dbms_debug_vc2coll(1, 2, 33, 342))) as s9t_cells) from dual; //example

Q2:这对我来说毫无意义,为什么我应该更新 ResultSet 对象。我只想从 select 语句中获取行并将它们放入 ResultSet 中。但在过程中(根据 https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/java/src/tpc/imjcc_t0052611.html )指出我应该添加 UpdateXXX 方法。如果未添加,我将收到以下错误:

java.sql.SQLException: Undefined column value on the insert row

最佳答案

How to get the UDT type values from a ResultSet (as a result of a database query) and populate into a collection, and the data from the collection is to be used in another procedure - outside the loop.

用户定义类型是一个 Java 类,其实例(对象)存储在数据库表列中。 UDT 定义为表列数据类型,UDT 实例存储为列值。 UDT 可以在 Oracle、Apache Derby 等数据库中创建和使用。

UDT 是使用 CREATE TYPE 数据库命令定义的。 UDT 值通过插入/更新 DML 存储在数据库中,并使用 SQL Select 进行查询。与其他数据库数据类型一样,UDT 可以使用 JDBC API 进行操作,也可以使用 SQL 进行交互操作。

假设UDT类型是Java类MyType.java,使用JDBC插入/更新UDT值,代码可以是这样的:

    MyType myType = new MyType(); // an instance of the UDT type's Java class MyType
preparedStatement.setObject(1, myType);
preparedStatement.executeUpdate();

从数据库检索并填充到集合中:

List<MyType> myTypesList = new ArrayList<>();
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
MyType myType = (MyType) rs.getObject(1);
// ... other columns
myTypesList.add(myType);
}
...

// Call a method that uses the myTypesList
processMyTypesFromDb(myTypesList);
...

关于java - 在 Java JDBC 中将行插入到 ResultSet 中而不使用 update 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52867439/

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