2013-09-27 116 views
0

我试图获取从我的java代码列的最大数据集,但我得到从结果中获取数据在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

作为大将风范的意见,这是更好的使用参数化查询比连接字符串进行查询(更快,更清晰,不易出错),和常量,如' count1'通常应该移入常量变量('public static final'),而不是嵌入到代码中。 – chrylis

回答

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循环。

0

Javadoc中描述的结果集从索引-1开始。 .next()应该被调用一次才能得到第一个结果。

最初光标位于第一行之前。

从安全角度考虑,应避免附加变量对您的请求,而是使用参数(SQL注入物)

而且不要忘了你的closeconnectionstatement避免Out of memory和避免占用所有数据库连接插槽。您可以关闭的结果集(好习惯),即使它不使用JRE类要求:

ResultSet对象将自动关闭,当生成它已关闭,重新执行,或用于检索Statement对象下一个结果来自多个结果序列。

0

The Java ResultSet is a cursor;它在逻辑上指向某个查询结果中的特定位置。来自Javadocs:

A ResultSet光标最初位于第一行之前;下一个方法的第一个调用使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。

你试图从ResultSet读取,同时它还是上面的列表(位置beforeFirst)的顶部指向。要前进游标,请调用res.next(),它返回一个布尔值,指示是否有更多行。如果你想打印从几行的效果,请使用while循环是这样的:

while(res.next()) { 
    System.out.println(res.getInt("count1")); 
} 
0

您必须使用,如:

"INSERT INTO stumarks VALUES("+null+", "+marks+")"; 

很好的做法,使用prepareStatement()方法插入,删除和更新。

,并使用ResultSet,如:

if(rs.next) 
{ 
    int num = res.getInt("count1"); 
}