2016-09-20 23 views
1

這讓我很生氣,因爲我無法理解它。我正在執行以下代碼:Java SQL查詢無法返回有效的ResultSet

nameString = jcbClientList.getItemAt(jcbClientList.getSelectedIndex()); 
System.out.println(" Name String = " + nameString); 
sql = "SELECT * FROM clients WHERE Name = \'" + nameString + "\'"; 
System.out.println(sql); 

try { 
    Statement st = con.createStatement(); 
    ResultSet rs = st.executeQuery(sql); 
    while(rs.next()) { 
     clientID = rs.getInt(1); 
    } 
} 
catch(SQLException se) { 
    msg = "Problem getting client ID from DB \n" + se.getLocalizedMessage(); 
    System.out.println(msg); 
    JOptionPane.showMessageDialog(null, msg); 
} 

要構建的SQL字符串是正確的。我已經檢查了該字符串的System.out.println(sql)輸出並將其粘貼到其他代碼中,並且它完美地工作。然而,在這種情況下,我收到一個例外:

遊標狀態無效 - 沒有當前行。

即使我將sql更改爲'SELECT * FROM clients',它應該返回20行並在應用程序的其他位置執行,但它仍會給出相同的錯誤。被解決的數據庫是一個嵌入式Derby DB。

+0

可能的[Java SQL Exception Exception Invalid Cursor State - no current row]重複(http://stackoverflow.com/questions/16576331/java-sql-exception-invalid-cursor-state-no-current-row) – DimaSan

+3

你確定你發佈的代碼給出了這個錯誤嗎?哪一行恰恰是產生錯誤的行?也許你看錯了地方。 – sstan

+0

你確定要連接到正確的數據庫嗎? – Dave

回答

0

我似乎記得遇到了特定的JDBC驅動程序,它沒有正確實現「ResultSet遊標最初位於第一行之前」部分。我首先做了第一個()(或beforeFirst())調用,然後纔開始調用next()。

+0

我曾經遇到過這種情況,並且調用了帶有可滾動結果集的類型集的語句,然後實現beforeFirst()。它沒有任何區別。事情是在另一個位置的同一段代碼沒有問題。 – NigelGordon

相關問題