我已经检查了所有内容,并且当我尝试向其添加数据时强制应用程序关闭时,数据库的创建很好。我不明白为什么。
db.execSQL("CREATE TABLE IF NOT EXISTS " +
SAMPLE_TABLE_NAME2
+ " (GenID INT, "
+ " Nxtq INT);");
db.execSQL("INSERT INTO " +
SAMPLE_TABLE_NAME2 +
" Values (1,1);");
我输出的错误是
在预备'INSERT INTO一般值(1,1)
时,失败1(表格一般有4列,但提供了2个值)
在这两个查询之前有一些东西在这里是完整的。
db = this.openOrCreateDatabase(SAMPLE_DB_NAME, MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS " +
SAMPLE_TABLE_NAME +
" (ID INT(3), Questions VARCHAR, Answer1 VARCHAR," +
" Answer2 VARCHAR, Answer3 VARCHAR," +
" Answer4 VARCHAR, CorrectAnswer INT(1), Reason VARCHAR);");
db.execSQL("CREATE TABLE IF NOT EXISTS " +
SAMPLE_TABLE_NAME2
+ " (GenID INT, "
+ " Nxtq INT);");
db.execSQL("INSERT INTO " +
SAMPLE_TABLE_NAME2 +
" Values (1,1);");
答案 0 :(得分:2)
尝试将“general”的名称更改为“general_new”之类的其他内容,并查看脚本是否有效,如上所述,一般情况下该表可能已存在(即使您认为自己不是自己创建的)。
答案 1 :(得分:0)
在Eclipse中使用adb logcat
,DDMS或DDMS透视图来检查LogCat并查看与您的异常关联的堆栈跟踪。在发布此处之前执行此操作,如果您不理解它们,请包含LogCat输出的相关位。
在这种情况下,我怀疑您会发现INT(3)
不是a valid SQLite datatype,但这只是猜测。
答案 2 :(得分:0)
@Max 对于插入尝试使用db.insert(........);
答案 3 :(得分:0)
有问题的表 - 名为general
- 在执行上述代码之前已经存在。此先前存在的表有四列,因此具有两列的INSERT INTO
失败。 CREATE TABLE
无效,因为IF NOT EXISTS
为假。
您提到数据库已正确创建 - 您的应用程序是以空数据库开头,还是可以重用现有数据库?或者,也许有一些先前调用的代码创建了一个名为general
的表,其中包含一个4列方案。这与上述情况发生冲突。
答案 4 :(得分:0)
SAMPLE_TABLE_NAME
和SAMPLE_TABLE_NAME2
的相应值是多少?它们是否有可能是这样的:
private static final String SAMPLE_TABLE_NAME = "general";
private static final String SAMPLE_TABLE_NAME2 = "general";