Обсуждение: ResultSet problem in JDBC
Hi all,
I am writing a Java program using postgres. When I run my program, I got the following error message:
Can't a result set be used in another query? How do I correct it?
I am writing a Java program using postgres. When I run my program, I got the following error message:
Exception in thread "main" org.postgresql.util.PSQLException: Can't infer the SQL type to use for
an instance of org.postgresql.jdbc4.Jdbc4ResultSet. Use setObject() with an explicit Types value to specify the type to use.
at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1772)
at org.postgresql.jdbc3g.AbstractJdbc3gStatement.setObject(AbstractJdbc3gStatement.java:37)
at org.postgresql.jdbc4.AbstractJdbc4Statement.setObject(AbstractJdbc4Statement.java:46)
at Cracking.testMethod(Cracking.java:619)
at GetConnection.main(GetConnection.java:97)
My code that caused this problem is: an instance of org.postgresql.jdbc4.Jdbc4ResultSet. Use setObject() with an explicit Types value to specify the type to use.
at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1772)
at org.postgresql.jdbc3g.AbstractJdbc3gStatement.setObject(AbstractJdbc3gStatement.java:37)
at org.postgresql.jdbc4.AbstractJdbc4Statement.setObject(AbstractJdbc4Statement.java:46)
at Cracking.testMethod(Cracking.java:619)
at GetConnection.main(GetConnection.java:97)
Statement st = c.createStatement();
ResultSet r = st.executeQuery("select unnest(col0) from relation2_col1 where keyValue<500");
PreparedStatement sql = c.prepareStatement( "SELECT col1 FROM relation2 WHERE col0 IN ?");
sql.setObject(1, r);
ResultSet result = sql.executeQuery();
I am using Eclipse, and there is no warning for this code. ResultSet r = st.executeQuery("select unnest(col0) from relation2_col1 where keyValue<500");
PreparedStatement sql = c.prepareStatement( "SELECT col1 FROM relation2 WHERE col0 IN ?");
sql.setObject(1, r);
ResultSet result = sql.executeQuery();
Can't a result set be used in another query? How do I correct it?
On 02/12/10 13:14, Zhipan Wang wrote: > Statement st = c.createStatement(); > ResultSet r = st.executeQuery("select unnest(col0) from relation2_col1 > where keyValue<500"); > PreparedStatement sql = c.prepareStatement( "SELECT col1 FROM relation2 > WHERE col0 IN ?"); > sql.setObject(1, r); > ResultSet result = sql.executeQuery(); You appear to be trying to implement a subquery client-side. Why not just use: PreparedStatement sql = c.prepareStatement( "SELECT col1 FROM relation2 WHERE col0 IN "+ "(SELECT unnest(col0) from relation2_col1 where keyValue<500" ); ? It's hard to know whether the above is correct because you've failed to provide your schema, but something along those lines seems to fit your intent from the code above. > I am using Eclipse, and there is no warning for this code. No, Eclipse can't know the details of how every JDBC driver works. > Can't a result set be used in another query? How do I correct it? Either build an array with the contents of the resultset and pass that, or avoid the weirdness by using a subquery directly. -- System & Network Administrator POST Newspapers