【问题标题】:java - ResultSet displaying as Stringjava - 结果集显示为字符串
【发布时间】:2018-05-11 19:37:49
【问题描述】:

我正在使用 ucanaccess 工具与我的 access 数据库进行交互,但我不知道如何将结果集显示或存储为字符串。

编辑:我试过 =System.out.println(resultSetId.getString(1)); 但这只会返回错误。 ResultSet resultSetId; String msAccDB = "D://Computer Science//passManager//src//Manager.accdb"; String dbURL = "jdbc:ucanaccess://" + msAccDB; connection = DriverManager.getConnection(dbURL); statement = connection.createStatement(); resultSetId = statement.executeQuery("SELECT ID FROM Passwords WHERE ID = \""+identifier+"\";"); System.out.println(resultSetId.getString(1));

给出错误Exception in thread "main" net.ucanaccess.jdbc.Ucanaccessenter code hereSQLException: invalid cursor state: identifier cursor not positioned on row in UPDATE, DELETE, SET, or GET statement: ; ResultSet is positioned before first row

编辑:添加 .next() 修复它,谢谢!

【问题讨论】:

  • 你试过什么?什么地方出了错?结果集中有什么?
  • 您遇到什么错误?
  • 发布您在堆栈跟踪中遇到错误的代码。

标签: java sql ms-access ucanaccess


【解决方案1】:

ResultSet 位于第一行之前

executeQuery 返回ResultSet 时,它并没有指向一行数据。您需要调用resultSetId.next() 以检索每一行。这通常在 while 循环的上下文中完成,此时 ResultSet 预计会返回多行,例如,

while (resultSetId.next()) {
    System.out.println(resultSetId.getString(1));  // print value from each row
}

但是如果你只期望一行,你可以简单地调用一次,例如,

if (resultSetId.next()) {
    System.out.println(resultSetId.getString(1));
} else {
    System.out.println("The ResultSet contained no rows.");
}

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2015-09-21
    • 2016-05-07
    • 2011-05-08
    相关资源
    最近更新 更多