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

如何为SQLite数据库表添加自增ID?应用崩溃问题求助

解决SQLite添加自增ID后的崩溃问题

首先,咱们得先把表的结构调整正确,包含自增ID字段。SQLite里的自增主键需要用INTEGER PRIMARY KEY AUTOINCREMENT来定义,这是让自增功能正常工作的核心。

1. 正确创建带自增ID的表

先把你的表初始化语句改成这样(假设原表名为student,新增id作为自增主键):

CREATE TABLE IF NOT EXISTS student (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cost TEXT,
    make TEXT,
    model TEXT,
    fname TEXT,
    lname TEXT
);

这里把id放在第一个字段位置,作为自增主键,SQLite会自动帮你生成唯一的递增ID值。

2. 修复第56行的INSERT语句(解决崩溃)

原来的崩溃原因很明确:你新增了id字段后,INSERT语句里的值数量和表的列数不匹配了。有两种靠谱的修复方式,推荐第一种(更安全,能避免字段顺序变动带来的问题):

方式一:指定要插入的列名(推荐)

明确写出要插入的列(跳过id,因为SQLite会自动生成它的值):

db.execSQL("INSERT INTO student (cost, make, model, fname, lname) VALUES('"+cost.getText()+"','"+make.getText()+"','"+model.getText()+"','"+fname.getText()+ "','"+lname.getText()+"');");

方式二:给id传NULL值

如果不想指定列名,可以给id字段传NULL,SQLite会自动填充自增ID:

db.execSQL("INSERT INTO student VALUES(NULL,'"+cost.getText()+"','"+make.getText()+"','"+model.getText()+"','"+fname.getText()+ "','"+lname.getText()+"');");

⚠️ 额外建议:直接把用户输入拼接进SQL语句有SQL注入风险,最好用ContentValues来替代,写法更安全也更简洁:

ContentValues values = new ContentValues();
values.put("cost", cost.getText().toString());
values.put("make", make.getText().toString());
values.put("model", model.getText().toString());
values.put("fname", fname.getText().toString());
values.put("lname", lname.getText().toString());
db.insert("student", null, values);

3. 在View All时展示自增ID

当你查询所有数据时,要把id字段一起查出来,比如查询语句:

SELECT id, cost, make, model, fname, lname FROM student;

然后在遍历Cursor的时候,获取并展示id的值:

int idIndex = cursor.getColumnIndex("id");
long studentId = cursor.getLong(idIndex);
// 把studentId展示到UI上,比如TextView或者列表项里

这样修改后,自增ID就能正常工作,INSERT语句不会再崩溃,同时View All功能也能正确展示ID了。

内容的提问来源于stack exchange,提问作者Tanner Tattini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:50:12