我有以下数据库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)
.......
答案 0 :(得分: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
。'此行应为:
List<String> results = new ArrayList<String>();
这将照顾它。
答案 1 :(得分:1)
getRow返回结果集中行的编号
您有一列结果集
results.add(resultSet.getString(resultSet.getRow()));
的第一次迭代,调用getString,索引为1(并且可以工作)
results.add(resultSet.getString(resultSet.getRow()));
的第二次迭代,调用getString,索引为2(由于结果集中只有一列,因此会失败)
我认为你应该做results.add(resultSet.getString(1));
每次从中读取结果集时,您都希望得到第一项。