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
相关产品推荐
相关产品推荐

