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
相关产品推荐
相关产品推荐

