gpt4 book ai didi

java - 在java中获取无效的游标状态异常

转载 作者:行者123 更新时间:2023-11-30 08:53:36 25 4
gpt4 key购买 nike

我运行了 select 命令并使用下面的代码在 system.out 中打印了结果。正在获得无效游标错误的预期结果。你能告诉任何人,为什么在打印预期结果后会发生此错误以及如何解决它吗?代码:

try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + "path";
conn = DriverManager.getConnection(url);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
String select="SELECT DISTINCT col1,col2 FROM Tablename";
ResultSet rs = stmt.executeQuery(select);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
String columnValue;
while (rs.next())
{
for (int i = 1; i <= columnsNumber; i++) {
columnValue= rs.getString(i);
System.out.print(columnValue+" ");
}
}
}
catch(SQLException exc){
exc.printStackTrace();
}

output:

test1 result1
test2 result2
test3 result3
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3914)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5697)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:353)

最佳答案

我能够重现您的问题。在使用 SELECT DISTINCT ... 时,这似乎是 JDBC-ODBC 桥和 Access ODBC 驱动程序的“不幸行为”查询和ResultSet.TYPE_SCROLL_SENSITIVE .

以下 kluge 似乎可以解决我的问题:

String select="SELECT * FROM (SELECT DISTINCT FirstName,LastName FROM Clients)";

ResultSet.TYPE_SCROLL_SENSITIVE 切换至 ResultSet.TYPE_FORWARD_ONLY似乎也避免了这个问题。

但是,由于 JDBC-ODBC 桥已过时并已从 Java 8 中删除,您可能会考虑使用 UCanAccess JDBC 驱动程序代替。更多详情见

Manipulating an Access database from Java without ODBC

关于java - 在java中获取无效的游标状态异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29730766/

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