Android Studio中SQLite插入数据时提示“No such column”错误求助
Android SQLite插入报错:tableMon has no column named notes
问题根源
从错误日志INSERT INTO tableMon (notes) VALUES ( notes=hello )能明确看到两个核心问题:
- 你传入的
values变量内容是notes=hello,这完全不符合SQL插入语法——VALUES子句里应该直接放值,而非列名=值的格式,这会让SQLite解析出错,误以为你要插入的是非法表达式。 - 另一种可能是旧表未更新:如果之前已经创建过
tableMon表,修改CREATE TABLE语句后,旧表不会自动重建,新的列不会生效。
解决步骤
1. 修正INSERT语句的语法
强烈推荐用安全规范的方式插入数据,避免字符串拼接的语法错误和SQL注入风险:
- 方法一:使用ContentValues(官方推荐)
ContentValues contentValues = new ContentValues(); contentValues.put("notes", "hello"); // 替换为你的实际变量值 db.insert("tableMon", null, contentValues); - 方法二:参数化execSQL查询
若坚持用字符串拼接,需确保值被单引号包裹(注意特殊字符转义):String insertSql = "INSERT INTO tableMon (notes) VALUES (?)"; db.execSQL(insertSql, new String[]{"hello"}); // 数组元素对应占位符?的位置String targetValue = "hello"; String insertSql = "INSERT INTO tableMon (notes) VALUES ('" + targetValue + "')"; db.execSQL(insertSql);
2. 确保表结构生效
如果之前运行过旧版本代码,需清除应用数据或卸载重装,让新的建表语句生效。也可以给建表语句加上IF NOT EXISTS,避免重复创建报错:
String createTableSql = "CREATE TABLE IF NOT EXISTS tableMon (notes TEXT)"; db.execSQL(createTableSql);
内容的提问来源于stack exchange,提问作者Dhwani Patel
相关产品推荐
相关产品推荐

