java - 对象的 ResultSet 和 ArrayList 不起作用

标签 java sql sqlite arraylist

我基本上是在尝试将我存储在数据库中的内容检索到 ArrayList 中。我遍历了 ResultSet 但我得到了一个 NullPointerException

ResultSet rs = null;
ArrayList<People> peoList=null;

try {
    rs = stat.executeQuery("SELECT * from people WHERE surname='"+surname+"'");
} 
catch (SQLException ex) {
    Logger.getLogger(myClass.class.getName()).log(Level.SEVERE, null, ex);
}
String name, surname;
try {
    while (rs.next()) {
        name = rs.getString("name");
        surname = rs.getString("surname");

        People peo = new People(name,surname);
        peoList.add(peo);
    }
} 
catch (SQLException ex) {
    Logger.getLogger(myClass.class.getName()).log(Level.SEVERE, null, ex);
} 
return peoList;

当我调用此函数时,会出现一个 NullPinterException 以及大量其他消息。我真的不明白这个。看来问题出在我放置 peoList.add(peo); 的位置。例如,如果删除它并放置一个计数器,则迭代次数就可以了。

最佳答案

while(rs.next())
{
    name = records.getString("name");
    surname = records.getString("surname");

    People peo= new People(name,surname);
    peoList.add(peo);

}

记录从何而来?这不是您的 ResultSet 的变量名称,而是您将其命名为 rs

我想你的意思是:

while(rs.next())
{
    name = rs.getString("name");
    surname = rs.getString("surname");

    People peo= new People(name,surname);
    peoList.add(peo);

}

在您的原始代码中抛出了异常,因为 namesurname 都是 null,records 也是,因为它不存在。

更新:

如评论所述,您似乎还没有初始化 peoList

由于混合风格等原因,你的代码看起来有点难看。

我重写了其中的一些,但这是要点(包括正确初始化的 peoList:

final static Logger LOG = Logger.getLogger(myClass.class.getName());

ResultSet rs = null;

try {
    rs = stat.executeQuery("SELECT * from people WHERE surname='"+surname+"'");
} catch (SQLException ex) {
    LOG.severe("", ex);
}

String name, surname;
List<People> peoList = new ArrayList<People>();

try {
    while(rs.next()) {
        name = rs.getString("name");
        surname = rs.getString("surname");

        People peo= new People(name,surname);
        peoList.add(peo);

    }
} catch (SQLException ex) {
    LOG.severe("", ex);
} 

return peoList;

关于java - 对象的 ResultSet 和 ArrayList 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789515/

相关文章:

java - 在 Windows 10 上的 WSL2 上使用 JDK 的正确方法是什么?

java - 如何使用java修改xslt样式表?

sql - 避免全表扫描

带有整理 nocase 字段的 SQLite 区分大小写的搜索

java - 在 jTable 中移动一行

java - 写这个 IP 阀的正确方法是什么?

javascript - 谷歌地图、SQL、XML、Ajax 天哪!

mysql - 查询从具有公共(public)列数据的多行中检索最后一条记录

SQLite 将所有 unicode 字符转换为 ANSI

android - 获取错误 : Caused by: android. database.sqlite.SQLiteException:接近 "TABLENAME"语法错误(代码 1)编译 SELECT 查询