SQLite插入语句执行失败:contacts表无uuid列错误排查求助
解决SQLite插入时"table contacts has no column named uuid"异常
问题根源
从报错信息 table contacts has no column named uuid (code 1): , while compiling: INSERT INTO contacts(id,uuid,name,phone... 可以直接定位问题:你创建的contacts表中没有uuid这个字段,但插入语句却试图往这个不存在的列里写数据,自然会触发异常。
解决方案
1. 修正表结构,确保包含uuid列
首先检查你的表创建SQL,必须明确添加uuid字段(UUID是字符串类型,推荐用TEXT存储)。示例创建语句如下:
CREATE TABLE contacts ( id INTEGER PRIMARY KEY, uuid TEXT, -- 必须添加这一行定义uuid列 name TEXT, phone TEXT, email TEXT, street TEXT, city TEXT, state TEXT, zip TEXT );
- 如果是开发阶段,最简单的方式是卸载App后重新运行(SQLite数据库会重新创建);
- 如果是已上线的App,需要执行
ALTER TABLE语句添加列:ALTER TABLE contacts ADD COLUMN uuid TEXT;
2. 优化插入代码,避免字符串拼接问题和SQL注入
你当前用字符串拼接生成SQL的方式,不仅容易出现引号错误,还存在SQL注入风险。推荐两种更安全的写法:
方式一:使用ContentValues(Android推荐写法)
UUID uuid = UUID.randomUUID(); ContentValues values = new ContentValues(); values.put("id", 3); values.put("uuid", uuid.toString()); values.put("name", "Patrice Beregeron"); values.put("phone", "978-555-1212"); values.put("email", "pBeregero@BostonBruins.com"); values.put("street", "1 causeway street"); values.put("city", "Boston"); values.put("state", "Mass"); values.put("zip", "01236"); // 执行插入 db.insert("contacts", null, values);
方式二:使用带占位符的execSQL
UUID uuid = UUID.randomUUID(); String insertSql = "INSERT INTO contacts(id,uuid,name,phone,email,street,city,state,zip) VALUES(?,?,?,?,?,?,?,?,?)"; // 用占位符替代直接字符串拼接,参数按顺序传入数组 db.execSQL(insertSql, new Object[]{ 3, uuid.toString(), "Patrice Beregeron", "978-555-1212", "pBeregero@BostonBruins.com", "1 causeway street", "Boston", "Mass", "01236" });
内容的提问来源于stack exchange,提问作者amanuel
相关产品推荐
相关产品推荐

