我在从ResultSet对象获取数据时遇到问题.这是我的代码:
String sql = "SELECT type FROM node WHERE nid = ?";
PreparedStatement prep = conn.prepareStatement(sql);
int meetNID = Integer.parseInt(node.get(BoutField.field_meet_nid));
prep.setInt(1, meetNID);
ResultSet result = prep.executeQuery();
result.beforeFirst();
String foundType = result.getString(1);
if (! foundType.equals("meet")) {
throw new IllegalArgumentException(String.format("Node %d must be of type 'meet', but was %s", meetNID, foundType));
}
Run Code Online (Sandbox Code Playgroud)
错误跟踪:
Exception in thread "main" java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1072)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:986)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:981)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5656)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5576)
at nth.cumf3.nodeImport.Validator.validate(Validator.java:43)
at …Run Code Online (Sandbox Code Playgroud) 我在SQLite的JDBC驱动程序中遇到问题.
我正在使用SELECT语句执行查询.
如果我得到一个空ResultSet(0行),那么我看到调用时抛出的"Closed ResultSet"异常getString(1).
如果没有先前的JDBC经验,我的理论(我无法通过JavaDocs确认ResultSet)就是这样
getString(1) 不适用于空(零行)结果集(按设计或由于错误)ResultSet'open"标志设置false为零行(再次,设计或错误)我看到了这个错误报告,但不确定它是否相关.
我的问题是:
ResultSet所有JDBC驱动程序中的泛型?对于#4,我的解决方案是在之后使用isFirst()call executeQuery()来检查结果集中是否有任何行.这是最佳做法吗?
(我也可以简单地选择一个计数insetad,因为我不需要一个结果集,只有零非零标志,但我想知道正确的事情,如果我关心选择的结果)
谢谢!