从java中的结果集中获取数据

时间:2013-09-27 07:50:31

标签: java mysql

我正在尝试从我的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);

4 个答案:

答案 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 connectionstatement以避免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");
}