0

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

这是我的数据库代码:

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 NOT NULL)时,0x217058上的失败1(AUTOINCREMENT只允许在整数主键上) ;'。

为什么会出现错误?

4

9 回答 9

0

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

于 2012-04-14T17:28:42.007 回答
0

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

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

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

于 2012-04-14T17:29:28.760 回答
0

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

Android表创建失败(“自动增量”附近:语法错误)?.

于 2012-04-14T17:29:35.143 回答
0

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

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

于 2012-04-14T17:30:36.310 回答
0

试试用这个...

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

db.execSQL(sql);
于 2012-04-14T17:31:16.957 回答
0

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

于 2012-04-14T19:03:09.007 回答
0

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

于 2012-04-23T14:51:25.517 回答
0

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

于 2012-04-27T22:59:19.667 回答
0

老兄将 INTEGER PRIMARY KEY AUTOINCREMENT 更改为 INTEGER PRIMARY KEY 这一切都可以正常工作并且还会自动增加

于 2012-05-08T03:49:19.113 回答