我正在尝试从我的java代码中获取列的最大数据,但是在结果集中出现错误
我的代码如下所示
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost/testdb123","root","root");
LOGGER.info("connected to the database");
Statement stmt0 = conn.createStatement();
String qr= "INSERT INTO stumarks " + "VALUES ("+null+","+marks+")";
Statement stmt1 = conn.createStatement();
stmt1.executeUpdate(qr);
String countQuery = "select MAX('seqNum') as count1 from stumarks";
ResultSet res = stmt0.executeQuery(countQuery);
LOGGER.info("result set success!!");
int num = res.getInt("count1");``
System.out.println(num);
答案 0 :(得分:3)
在尝试获取值之前
int num = res.getInt("count1");
你需要调用ResultSet#next()(并检查它是否返回true)才能访问结果集的第一行
if (rs.next()) {
// Do what you want
int num = res.getInt("count1");
System.out.println(num);
}
要继续迭代结果集,可以使用while
循环。
答案 1 :(得分:0)
Javadoc中描述的结果集从索引-1开始。
应该调用.next()
一次以获得第一个结果。
最初光标位于第一行之前。
从安全的角度来看,您应该避免将变量附加到您的请求,而是使用参数(SQL注入事项)
另外,请不要忘记close
connection
和statement
以避免Out of memory
并避免占用所有数据库连接位置。即使使用JRE类不需要,也可以关闭结果集(良好实践):
当生成它的Statement对象关闭,重新执行或用于从多个结果序列中检索下一个结果时,ResultSet对象会自动关闭。
答案 2 :(得分:0)
Java ResultSet
是游标;它逻辑上指向某个查询结果中的特定位置。来自Javadocs:
ResultSet
光标最初位于第一行之前;对方法的第一次调用使得第一行成为当前行;第二个调用使第二行成为当前行,依此类推。
您正试图从ResultSet
开始阅读,同时它仍指向列表顶部(位置beforeFirst
)。要使光标前进,请调用res.next()
,它返回一个布尔值,指示是否有更多行。如果要打印多行的结果,请使用while
循环,如下所示:
while(res.next()) {
System.out.println(res.getInt("count1"));
}
答案 3 :(得分:0)
你必须使用:
"INSERT INTO stumarks VALUES("+null+", "+marks+")";
使用prepareStatement()
方法插入,删除和更新的良好做法。
并使用结果集,如:
if(rs.next)
{
int num = res.getInt("count1");
}