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

Android Studio中SQLite建表仅生成1张而非预期2张是什么原因?

问题根因与解决方案

你的代码中分开两次调用execSQL()执行建表语句的写法本身符合规范,execSQL()不支持单条语句内执行多段SQL的说法是正确的,你没有合并语句的写法完全没有问题,问题出在SQLiteOpenHelper的运行机制和你写的onUpgrade逻辑缺陷上。

最常见触发原因

SQLiteOpenHelper的onCreate回调仅会在数据库文件第一次被创建时执行一次:

  • 如果你之前运行过APP,已经生成了仅包含users表的旧版Login.db文件,后续只要数据库版本号没有修改,系统会认为数据库已经初始化完成,不会再触发onCreate方法执行,新增的weightTable建表语句永远不会被执行。
  • 你当前写的onUpgrade方法仅执行了删表逻辑,没有调用onCreate重建表,就算升级版本号也不会自动生成新表。

修复步骤

  1. 先将模拟器/测试机上已安装的APP完全卸载,删除本地残留的旧数据库文件
  2. 修改DBHelper构造方法中传入的数据库版本号,将原来的1改为更高的整数(例如2)
  3. 补充onUpgrade的逻辑,删除旧表后主动调用onCreate重建所有表,修改后的代码如下:
@Override
public void onUpgrade(SQLiteDatabase myDB, int oldVersion, int newVersion) {
    myDB.execSQL("drop Table if exists users");
    myDB.execSQL("drop Table if exists weightTable");
    // 新增这行,删表后重新执行建表逻辑
    onCreate(myDB);
}
  1. 重新编译运行APP即可看到两张表都被正常创建。

排查验证方法

如果执行以上操作后问题依旧存在,可以在onCreate的两段建表语句前后加日志打印,确认代码是否执行到了weightTable的建表逻辑,同时捕获SQLException排查是否存在SQL语法拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:36:03