You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite JDBC问题:调用ResultSet.getString()始终返回NULL

问题排查与解决

可能的原因及对应解法

1. 列名拼写/大小写不匹配

SQLite虽默认大小写不敏感,但如果创建表时用引号强制区分大小写,就会导致列名匹配失败。可以先尝试用列索引获取值:

System.out.println(rs.getString(1));

如果能正常输出内容,说明"title"这个列名拼写或大小写有问题,核对数据库表的实际列名即可。

2. 结果集遍历不完整

你只调用了一次rs.next(),如果第一行数据本身为null,或者需要查看所有行数据,应该用循环遍历结果集:

while (rs.next()) {
    System.out.println(rs.getString("title"));
}

这样能确认所有行的title字段值,避免仅查看单行导致的误判。

3. 数据库或表的指向错误

确认你连接的test.db确实是包含Movies表的目标数据库文件:

  • 用SQLite可视化工具打开该文件,执行SELECT * FROM Movies手动验证数据是否存在,列名是否为title。
  • 检查数据库文件路径是否正确,避免连接到了空的或其他版本的test.db。

4. SELECT *带来的隐式问题

替换SELECT *为明确指定列名的查询,避免列顺序或别名导致的取值异常:

ResultSet rs = stmt.executeQuery("SELECT title FROM Movies");

5. 资源管理优化

改用try-with-resources自动管理数据库资源,避免资源泄漏影响结果:

import java.sql.*;

public class Driver {
    public Driver() {
        try (Connection c = DriverManager.getConnection("jdbc:sqlite:test.db");
             Statement stmt = c.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT title FROM Movies")) {
            
            while (rs.next()) {
                System.out.println(rs.getString("title"));
            }
            
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

验证步骤

  1. 执行PRAGMA table_info(Movies);查看Movies表的结构,确认列名、数据类型是否符合预期。
  2. 手动执行SELECT * FROM Movies;,确认title列存在非null数据。
  3. 替换rs.getString("title")为rs.getString(1)测试,判断是否是列名匹配问题。

内容的提问来源于stack exchange,提问作者anathrax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:05:19