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

SQLite数据库表未创建:弹出dataNotInserted提示,附报错及代码

解决SQLite "no such table: PETROL.DB" 报错问题

兄弟,你的问题根源一眼就能看出来——你把数据库文件名和表名搞混了!

先看报错里的SQL语句:INSERT INTO PETROL.DB(AMOUNT) VALUES (?),这里的PETROL.DB其实是你的数据库文件名,而不是表名。SQLite在你的数据库里找不到名为PETROL.DB的表,自然就抛出了no such table的异常。

下面是一步步的修复方案:

1. 检查并修正DatabaseHelper的建表语句

打开你的DatabaseHelper类,找到onCreate()方法,确保你创建的表名是正确的(不带.DB后缀)。比如正确的建表语句应该是这样的:

@Override
public void onCreate(SQLiteDatabase db) {
    // 这里表名是PETROL,不是PETROL.DB
    db.execSQL("CREATE TABLE PETROL (AMOUNT INTEGER)");
}

2. 修正Activity2中的插入语句

把插入操作里的表名改成你实际创建的表名(比如上面的PETROL)。举个例子:

// 假设你用ContentValues插入数据
ContentValues values = new ContentValues();
values.put("AMOUNT", Integer.parseInt(ET1.getText().toString()));
// 这里第二个参数是表名PETROL,不是PETROL.DB
long result = myDb.getWritableDatabase().insert("PETROL", null, values);

// 如果是用execSQL的方式,应该写成:
// myDb.getWritableDatabase().execSQL("INSERT INTO PETROL(AMOUNT) VALUES (?)", new Object[]{yourAmountValue});

3. 卸载重装APP(关键步骤)

因为之前错误的操作可能已经在设备上生成了有问题的数据库文件,DatabaseHelper的onCreate()方法只有在数据库第一次创建时才会执行。所以你需要卸载当前APP,然后重新安装,让系统重新创建正确的数据库和表。

额外注意点

  • 你的DatabaseHelper构造函数里的数据库名可以是PETROL.DB,这没问题(比如super(context, "PETROL.DB", null, 1);),但表名是数据库内部的结构,和文件名是两回事,别搞混了。
  • 如果之后修改了表结构,记得更新数据库版本号(构造函数里的第四个参数),并实现onUpgrade()方法来处理表的更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:37:27