SQLite DB错误?

时间:2012-04-14 17:21:02

标签: android database sqlite

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

以下是我的数据库代码:

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事件时,在0x217058上失败1(仅允许在INTEGER PRIMARY KEY上使用AUTOINCREMENT)(_IDINTEGER PRIMARY KEY AUTOINCREMENT,timeINTEGER,title TEXT NOT NULL);'。

为什么会出错?

9 个答案:

答案 0 :(得分:0)

您的字段和类型之间没有留空格。 _idINTEGER PRIMARY KEY ....必须在_id和INTEGER之间留空。

答案 1 :(得分:0)

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

  

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

但是,您的代码看起来很好。你确定这是实际的代码吗?

答案 2 :(得分:0)

我认为这个问题与SQLITE语法有关。请检查此链接。

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

答案 3 :(得分:0)

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

_id INTEGER应该是分开的。添加额外的空格

答案 4 :(得分:0)

尝试使用此...

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

db.execSQL(sql);

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

dude将INTEGER PRIMARY KEY AUTOINCREMENT更改为INTEGER PRIMARY KEY,它可以正常工作并自动增量