【发布时间】:2019-06-07 17:47:44
【问题描述】:
我的 SQLiteOpenHelper 的 onCreate 方法包含以下代码:
Log.d("mytag", "oncreate is called");
db.execSQL("CREATE TABLE TrainingSession (id INTEGER PRIMARY KEY, session_date TEXT, session_status TEXT)");
Log.d("mytag", "tables were created");
Logcat 输出仅包含第一个 Log.d:
oncreate is called
然后应用程序崩溃。我的 create table 语句有什么问题?
编辑:
Logcat 实际上表示TrainingSession 表已经存在。但是,我的 onUpgrade 方法如下所示:
Log.d("mytag", "onupgrade is called");
db.execSQL("DROP TABLE IF EXISTS TrainingSet; DROP TABLE IF EXISTS TrainingSession;");
onCreate(db);
并且该方法的 Logcat 输出与预期的一样,该方法确实被调用:
onupgrade is called
如果调用了 onUpgrade 并删除了表,那么为什么 onCreate 说 TrainingSession 已经存在?
【问题讨论】:
-
"然后应用程序崩溃" -- 使用 Logcat 检查与您的崩溃相关的 Java 堆栈跟踪:stackoverflow.com/q/23353173/115145
-
您的
CREATE TABLE声明 AFAIK 没有任何问题。您可以尝试直接针对 SQLite 运行它以说服自己它是正确的。您的代码中一定还有其他问题。 -
我实际上已经在我的 firefox SQLite 扩展中测试了 create 语句。它工作正常。但是为什么没有生成第二个输出?我不知道“使用 logcat 来检查 java 堆栈跟踪”是什么意思,我得用谷歌搜索一下。
-
好吧,这很快:它说培训课程已经存在。我将编辑我的问题以放大正在运行的代码的图片。
标签: java android sqlite android-sqlite create-table