2

我有以下数据库ShorthandText

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

2 回答 2

3

问题在这里:

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

resultSet.getString获取列索引作为参数,但您正在传递resultSet.getRow()

如果你想得到 ids 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应该是:

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

这将解决它。

于 2012-07-31T15:54:33.813 回答
1

getRow 返回结果集中的行号

您有一个单列结果集

使用索引为 1的调用 getString 的第一次迭代results.add(resultSet.getString(resultSet.getRow()));(并且将起作用)

使用索引为 2 调用 getString 的第二次迭代results.add(resultSet.getString(resultSet.getRow()));(并且将失败,因为结果集中只有一列)

我认为你应该这样做results.add(resultSet.getString(1));

每次从结果集中读取时,您都希望将第一项从结果集中取出。

于 2012-07-31T15:59:25.850 回答