0

現在、私は SQLiteDatabase を Android アプリケーションに実装しています。したがって、TABLE_LOGIN というテーブルを作成し、ログイン ユーザーのすべてのデータを保存したかったのですが、列の 1 つが存在しないというエラーが発生しました。私はチェックし、テーブルが作成されたときに列を配置しました 以下は私のコードです:

// Login Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_CNAME = "cname";
private static final String KEY_EMAIL = "email";
private static final String KEY_UID = "uid";
private static final String KEY_CREATED_AT = "created_at";

public void onCreate(SQLiteDatabase db) {
    String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
            + KEY_ID + " INTEGER PRIMARY KEY," 
            + KEY_NAME + " TEXT,"
            + KEY_CNAME + " TEXT,"
            + KEY_EMAIL + " TEXT UNIQUE,"
            + KEY_UID + " TEXT,"
            + KEY_CREATED_AT + " TEXT" + ")";
    db.execSQL(CREATE_LOGIN_TABLE);
}

これは私のlogcatです:

08-27 01:29:57.336: E/JSON(531): {"tag":"login","success":1,"error":0,"uid":"5033b1eeedde88.60881196","user":{"name":"a","cname":"a","email":"a@gmail.com","created_at":"2012-08-22 00:06:06","updated_at":null}}
08-27 01:29:57.486: E/Database(531): Error inserting uid=5033b1eeedde88.60881196 created_at=2012-08-22 00:06:06 email=a@gmail.com cname=a name=a
08-27 01:29:57.486: E/Database(531): android.database.sqlite.SQLiteException: table login has no column named cname: , while compiling: INSERT INTO login(uid, created_at, email, cname, name) VALUES(?, ?, ?, ?, ?);
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:36)
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1145)
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1536)
08-27 01:29:57.486: E/Database(531):    at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)
08-27 01:29:57.486: E/Database(531):    at com.stts.sparetimetradingsystem.library.DatabaseHandlerEmployer.addUser(DatabaseHandlerEmployer.java:72)
08-27 01:29:57.486: E/Database(531):    at com.stts.sparetimetradingsystem.employer.LoginEmployerActivity$LoginEmployer$1.run(LoginEmployerActivity.java:129)
08-27 01:29:57.486: E/Database(531):    at android.os.Handler.handleCallback(Handler.java:587)
08-27 01:29:57.486: E/Database(531):    at android.os.Handler.dispatchMessage(Handler.java:92)
08-27 01:29:57.486: E/Database(531):    at android.os.Looper.loop(Looper.java:123)
08-27 01:29:57.486: E/Database(531):    at android.app.ActivityThread.main(ActivityThread.java:4627)
08-27 01:29:57.486: E/Database(531):    at java.lang.reflect.Method.invokeNative(Native Method)
08-27 01:29:57.486: E/Database(531):    at java.lang.reflect.Method.invoke(Method.java:521)
08-27 01:29:57.486: E/Database(531):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-27 01:29:57.486: E/Database(531):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-27 01:29:57.486: E/Database(531):    at dalvik.system.NativeStart.main(Native Method)
08-27 01:29:58.736: E/AndroidRuntime(531): FATAL EXCEPTION: main
08-27 01:29:58.736: E/AndroidRuntime(531): java.lang.RuntimeException: Unable to destroy activity {com.stts.sparetimetradingsystem/com.stts.sparetimetradingsystem.employer.HomepageEmployerActivity}: java.lang.NullPointerException
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3655)
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673)
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.app.ActivityThread.access$2900(ActivityThread.java:125)
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.os.Looper.loop(Looper.java:123)
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.app.ActivityThread.main(ActivityThread.java:4627)
08-27 01:29:58.736: E/AndroidRuntime(531):  at java.lang.reflect.Method.invokeNative(Native Method)
-27 01:29:58.736: E/AndroidRuntime(531):    at java.lang.reflect.Method.invoke(Method.java:521)
08-27 01:29:58.736: E/AndroidRuntime(531):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-27 01:29:58.736: E/AndroidRuntime(531):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-27 01:29:58.736: E/AndroidRuntime(531):  at dalvik.system.NativeStart.main(Native Method)
08-27 01:29:58.736: E/AndroidRuntime(531): Caused by: java.lang.NullPointerException
08-27 01:29:58.736: E/AndroidRuntime(531):  at com.stts.sparetimetradingsystem.employer.HomepageEmployerActivity.onDestroy(HomepageEmployerActivity.java:315)
08-27 01:29:58.736: E/AndroidRuntime(531):  at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642)
08-27 01:29:58.736: E/AndroidRuntime(531):  ... 11 more

ユーザーデータコードを挿入:

public void addUser(String name, String cname, String email, String uid, String created_at) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, name); // Name
        values.put(KEY_CNAME, cname); // CName
        values.put(KEY_EMAIL, email); // Email
        values.put(KEY_UID, uid); // UID
        values.put(KEY_CREATED_AT, created_at); // Created At

        // Inserting Row
        db.insert(TABLE_LOGIN, null, values);
        db.close(); // Closing database connection
    }
4

2 に答える 2

0

Settings -> Manage Applications -> Your Application -> Clear all application dataに移動します。

この列をテーブルに追加する前に、電話に保存されている古いテーブルを使用している可能性があります。

編集:使用している文字列連結にわずかな問題があると思います。

String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
      + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_NAME+" TEXT, "+KEY_CNAME+" TEXT, "+KEY_EMAIL+" TEXT UNIQUE, "+KEY_UID+" TEXT, "+KEY_CREATED_AT+" TEXT)";
于 2012-08-26T17:53:30.117 に答える
0

携帯電話のブラウザでスクロールできないため、ログの猫全体を読むことはできませんが、問題は列IDにあると思います。主キーに設定されている列は、自動的に非 null に設定されていると思いますか? 挿入コマンドでこの列に値を指定しているように見えません。

この提案が正しければ、列を autoincrememt に設定すると役立ちます。リストビューでテーブルを使用する場合は、名前を _id に変更します。

于 2012-08-26T19:25:23.533 に答える