Android中SQLite的protein_summary表未在onCreate创建的问题排查
SQL语法错误:检查
CREATE TABLE protein_summary (...)语句是否存在拼写错误,比如字段名写错、数据类型不合法(比如把SQLite的TEXT写成STRING)、逗号遗漏、括号不匹配,或者使用了SQLite关键字(如DATE、GROUP)却未加反引号包裹。对比已成功创建的calories_summary表语句,逐行排查差异。onCreate未触发:SQLiteOpenHelper的
onCreate仅在数据库首次创建时执行。如果之前已经生成过数据库文件,修改onCreate后不会自动重新运行。解决方式:卸载应用清除现有数据库,或手动提升DATABASE_VERSION常量,触发onUpgrade方法重建表结构。代码执行中断:若
onCreate中先执行了其他表的创建语句,前面的execSQL抛出异常会导致后续代码(包括protein_summary的创建)终止。可以给execSQL添加try-catch块捕获异常,或使用事务包裹所有表创建操作:db.beginTransaction(); try { db.execSQL(CREATE_BREAKFAST_TABLE); db.execSQL(CREATE_CALORIES_SUMMARY_TABLE); db.execSQL(CREATE_PROTEIN_SUMMARY_TABLE); db.setTransactionSuccessful(); } finally { db.endTransaction(); }表存在但未被正确识别:SQLite表名默认大小写不敏感,若后续代码中引用表名时大小写与创建语句不一致,可能误以为表未创建。用SQLiteStudio、Device File Explorer等工具打开数据库文件,直接查看是否存在
protein_summary表。存储权限问题(罕见):若数据库存储在外部SD卡,未申请
WRITE_EXTERNAL_STORAGE权限会导致创建失败。但默认内部存储无需额外权限,可优先排除其他原因后再检查权限配置。
内容的提问来源于stack exchange,提问作者Ramil Gabibov

