2

次のデータベースがありますShorthandText

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

text次のコードを使用して、列に2つの文字列を返そうとしています

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)
.......
4

2 に答える 2

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));

アップデート

ああ、それはとても簡単です!実際には 2 つの問題がありました。最初の問題はすでに解決しました。2番目の問題は次のとおりです。

List<String> results = null;

List<String> results初期化されていないため、. NullPointerException'この行は次のようになります。

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

これで対処します。

于 2012-07-31T15:54:33.813 に答える
1

getRow は、結果セット内の行数を返します

1列の結果セットがあります

results.add(resultSet.getString(resultSet.getRow()));インデックス 1 で getString を呼び出すとの最初の反復(動作します)

インデックス 2 で getString を呼び出すの 2 回目の反復results.add(resultSet.getString(resultSet.getRow()));(結果セットに列が 1 つしかないため、失敗します)

やるべきだと思いますresults.add(resultSet.getString(1));

結果セットから読み取るたびに、結果セットから最初の項目が必要です。

于 2012-07-31T15:59:25.850 に答える