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

Android APP中SQLite查询产品表报no such column错误求助

解决Android SQLite报错:no such column: list

嘿,我来帮你搞定这个SQLite的报错问题!从错误日志和你的代码来看,主要有两个核心问题需要修复:

1. SQL语句中的表名拼写错误

错误信息里的SQL语句是SELECT * FROM prducts WHERE LIST_NAME = list——这里的prducts明显少了一个字母o,应该是products。你得先检查定义DB_TABLE常量的地方,确认它的值是正确的产品表名称(比如"products"),而不是拼写错误的"prducts"。

2. 字符串查询条件直接拼接导致语法错误

你当前的代码直接把list_name拼接到SQL语句里,比如当list_name是"list 1"时,生成的SQL会变成:

SELECT * FROM products WHERE LIST_NAME = list 1

SQLite会把list当成一个列名,而不是字符串值,这就触发了no such column: list的报错。而且这种直接拼接字符串的写法还存在SQL注入的风险,非常不安全。

修复方案:改用参数化查询

把你的getAllProducts方法改成参数化查询的写法,让SQLite自动处理字符串的引号和转义逻辑,代码如下:

public Cursor getAllProducts(String list_name) {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = null;
    if (db != null) {
        // 使用?作为占位符,避免直接拼接字符串
        String productsQuery = "SELECT * FROM " + DB_TABLE + " WHERE " + LIST_NAME_COLUMN + " = ?";
        // 把list_name作为参数传入,SQLite会自动处理引号和特殊字符转义
        cursor = db.rawQuery(productsQuery, new String[]{list_name});
    }
    return cursor;
}

额外检查点

  • 确认在ProductsActivity中,通过bundle.getString("list_name")获取到的列表名称是正确的,没有为空或者出现乱码的情况;
  • 验证products表的结构是否正确,LIST_NAME列确实存在且类型为TEXT文本类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:04:50