【问题标题】:SQLite DB error?SQLite 数据库错误?
【发布时间】:2012-04-14 17:21:01
【问题描述】:

我正在编写一个简单的数据库应用程序,但当我加载应用程序时,它显示:“应用程序已意外停止”

这是我的数据库代码:

public class EventsData extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "events.db";
    private static final int DATABASE_VERSION = 1;

    public EventsData(Context ctx) {
        super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                 + TIME + " INTEGER, " + TITLE + " TEXT NOT NULL);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

我的常量:

import android.provider.BaseColumns;;

public interface Constants extends BaseColumns {
    public static final String TABLE_NAME = "events";
    //columns in the events db
    public static final String TIME = "time";
    public static final String TITLE = "title"; 
}

错误是:

04-14 17:08:12.486: E/Database(277): 在准备'CREATE TABLE events(_idINTEGER PRIMARY KEY AUTOINCREMENT, timeINTEGER, title TEXT非空);'。

为什么会出错?

【问题讨论】:

  • 我的错误是:04-14 17:08:12.486: E/Database(277): 准备“CREATE TABLE events( _idINTEGER PRIMARY KEY AUTOINCREMENT, timeINTEGER, title TEXT NOT NULL);'.
  • 你在哪里定义你的字段 TABLE_NAME、_ID、...。你能在你的 logcat 中提供错误吗?
  • @user1248720 检查您粘贴的错误与您得到的错误完全相同

标签: android database sqlite


【解决方案1】:

您应该检查字段名称及其类型之间的空格。错误说:

[...] events(_idINTEGER PRIMARY KEY AUTOINCREMENT, timeINTEGER, title TEXT NOT NULL)

但是,您的代码看起来不错。你确定那是实际的代码吗?

【讨论】:

    【解决方案2】:

    您没有在字段和类型之间放置空格。 _idINTEGER PRIMARY KEY.... _id 和 INTEGER 之间必须有一个空格。

    【讨论】:

      【解决方案3】:

      我认为该问题与 SQLLITE synatx 有关。请检查此链接。

      Android table creation Failure (near "autoincrement": syntax error)?.

      【讨论】:

      【解决方案4】:

      您需要在 sqlite 代码中添加空格。如果你看到错误CREATE TABLE events(_idINTEGER PRIMARY KEY AUTOINCREMENT, timeINTEGER, title TEXT NOT NULL);'

      _idINTEGER 应该是分开的。添加多余的空格

      【讨论】:

        【解决方案5】:

        尝试使用这个...

        String sql =   db.execSQL("create table " + TABLE_NAME + "( " + BaseColumns._ID + " integer primary key autoincrement, "
                     + TIME + " integer, " + TITLE + " text not null);");
        
        db.execSQL(sql);
        

        【讨论】:

          【解决方案6】:

          只需将您的 _ID 重命名为 _id 就可以了。您的其余代码看起来不错。 还有一件事您将 TIME 声明为 String 并将其 Type 设置为 Integer,请也注意这一点。

          【讨论】:

            【解决方案7】:

            使用 Firefox 浏览器检查您的查询。 Firefox 有一个组件(或插件)来创建/编辑表、行 ....

            【讨论】:

              【解决方案8】:

              根据 SQlite 网站 (http://sqlite.org/faq.html#q1),您不必使用自动增量将其添加到列中。我不记得我用来创建数据库的代码,如果我现在不使用平板电脑,我会检查它。

              【讨论】:

                【解决方案9】:

                dude 将 INTEGER PRIMARY KEY AUTOINCREMENT 更改为 INTEGER PRIMARY KEY,这样就可以正常工作并且还会自动递增

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2012-07-18
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多