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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:43:36