0

単純な DB アプリケーションをコーディングしていますが、アプリケーションをロードすると、「アプリケーションが予期せず停止しました」と表示されます。

データベースのコードは次のとおりです。

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 イベント (_idINTEGER PRIMARY KEY AUTOINCREMENT, timeINTEGER, title TEXT NOT NULL) の準備時に 0x217058 で失敗 1 (AUTOINCREMENT は INTEGER PRIMARY KEY でのみ許可されます) ;'.

エラーが発生するのはなぜですか?

4

9 に答える 9

0

SQlite Web サイト (http://sqlite.org/faq.html#q1) によると、自動インクリメントを使用して列に追加する必要はありません。データベースを作成するために使用したコードを覚えていません。今タブレットを使用していなければ、チェックしていたでしょう。

于 2012-04-27T22:59:19.667 に答える
0

Firefox ブラウザを使用してクエリを確認してください。Firefox には、テーブル、行を作成/編集するためのコンポーネント (またはプラグイン) があります。

于 2012-04-23T14:51:25.517 に答える
0

おい変更 INTEGER PRIMARY KEY AUTOINCREMENT を INTEGER PRIMARY KEY に変更するだけで問題なく動作し、自動インクリメントも行います

于 2012-05-08T03:49:19.113 に答える
0

フィールドとタイプの間に空白を入れていません。_idINTEGER PRIMARY KEY.... _id と INTEGER の間に空白が必要です。

于 2012-04-14T17:28:42.007 に答える
0

フィールド名とその型の間のスペースを確認する必要があります。エラーは言う:

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

ただし、コードは正常に見えます。それが実際のコードであると確信していますか?

于 2012-04-14T17:29:28.760 に答える
0

問題は SQLLITE synatx に関連していると思います。このリンクを確認してください。

Android テーブルの作成に失敗しました (「autoincrement」付近: 構文エラー)? .

于 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 に変更するだけで、確実に機能します。コードの残りの部分は正常に見えます。もう 1 つ、TIME を String として宣言し、その Type を Integer に設定しています。これも見てください。

于 2012-04-14T19:03:09.007 に答える