SQLITE Query强制关闭应用程序

时间:2011-02-15 19:30:12

标签: android sqlite

我已经检查了所有内容,并且当我尝试向其添加数据时强制应用程序关闭时,数据库的创建很好。我不明白为什么。

    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);");

5 个答案:

答案 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_NAMESAMPLE_TABLE_NAME2的相应值是多少?它们是否有可能是这样的:

private static final String SAMPLE_TABLE_NAME = "general";
private static final String SAMPLE_TABLE_NAME2 = "general";