2012-07-31 44 views
2

我有以下的數據庫ShorthandTextSQLite的:結果集返回的SQLException

textid | text 
-------------------------- 
1  | just a test 
2  | just another test 

我使用下面的代碼嘗試在text

public List<String> executeSQLWithMulipleReturns(String sql) throws SQLException{ 
    List<String> results = null; 
    connection = ConnectDb(); 
    stat = connection.createStatement(); 
    resultSet = stat.executeQuery(sql); // sql = "SELECT text FROM ShorthandText;" 
    while(resultSet.next()){ 
     results.add(resultSet.getString(resultSet.getRow())); 
     System.out.println(resultSet.toString()); 
    } 

    closeAll(); // closes all connections   
    return results; 
} 

返回兩個字符串,但是我得到以下錯誤

java.sql.SQLException: column 2 out of bounds [1,1] 
at org.sqlite.RS.checkCol(RS.java:64) 
at org.sqlite.RS.markCol(RS.java:71) 
at org.sqlite.RS.getString(RS.java:245) 
at Java.ConnectToDatabase.executeSQLWithMulipleReturns(ConnectToDatabase.java:46) 
at GUI.ShorthandText.jButton1ActionPerformed(ShorthandText.java:123) 
at GUI.ShorthandText.access$000(ShorthandText.java:18) 
at GUI.ShorthandText$2.actionPerformed(ShorthandText.java:82) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
...... 

發生在這條線上:results.add(resultSet.getString(resultSet.getRow()));

任何人都可以請解釋爲什麼我收到這個錯誤?

編輯:空指針異常

代碼

while(resultSet.next()){ 
     results.add(resultSet.getString("text")); 
     System.out.println(resultSet.toString()); 
    } 

while(resultSet.next()){ 
     results.add(resultSet.getString(1)); 
     System.out.println(resultSet.toString()); 
    } 

既給這個例外

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at Java.ConnectToDatabase.executeSQLWithMulipleReturns(ConnectToDatabase.java:46) 
at GUI.ShorthandText.jButton1ActionPerformed(ShorthandText.java:123) 
at GUI.ShorthandText.access$000(ShorthandText.java:18) 
at GUI.ShorthandText$2.actionPerformed(ShorthandText.java:82) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
....... 

回答

3

的問題是在這裏:

results.add(resultSet.getString(resultSet.getRow())); 

resultSet.getString得到的參數列索引,而是要傳遞resultSet.getRow()

,如果你想獲得ID添加到results,你應該使用:

results.add(resultSet.getString("textid")); 

results.add(resultSet.getString(0)); 

,如果你想得到文本翻譯成results,你應該使用:

results.add(resultSet.getString("text")); 

results.add(resultSet.getString(1)); 

更新

噢,我的,這就是這麼簡單!你實際上有兩個問題。我們已經解決了第一個問題。這是你的第二個問題:

List<String> results = null; 

List<String> results尚未初始化,因此,NullPointerException .'This行應該是:

List<String> results = new ArrayList<String>(); 

這將照顧它。

+0

但如果我嘗試類似'results.add(resultSet.getString(1));''即使數據庫中有數據,我也會得到一個空指針異常? – 2012-07-31 15:56:52

+0

請看看我更新的答案。 – 2012-07-31 15:58:30

+0

我也試過這也,但它也給了我一個空指針異常...我會將此添加到我的回答編輯 – 2012-07-31 15:59:36

1

的getRow返回結果中的行數

你有一列結果集

results.add(resultSet.getString(resultSet.getRow()));第一次迭代與調用的getString與1(將工作)的指數

第二次迭代results.add(resultSet.getString(resultSet.getRow()));,調用getString,索引爲2(因爲結果集中只有一列,所以會失敗)

我認爲你應該在做results.add(resultSet.getString(1));

您希望每次讀取結果集時將第一項輸出。