2013-09-27 90 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"); 
}