0

Android アプリのユーザーに関する情報を格納するデータベースを実装しようとしています。

ここに文字列があります:

private static final String DATABASE_CREATE = 

                 "CREATE TABLE "

                  + DATABASE_TABLE_USERS 
                  + "(" + KEY_ROW_ID 
                  + " INTEGER PRIMARY KEY AUTOINCREMENT," 
                  + KEY_NAME

                  + " TEXT NOT NULL," 
                  + KEY_PASSWORD 
                  + " TEXT NOT NULL," 
                  + KEY_LOGIN_ATTEMPTS 
                  + " INTEGER NOT NULL," 
                  + KEY_ZIP + " TEXT," 
                  + KEY_STREET + " TEXT," + KEY_EMAIL + " TEXT NOT NULL);";

この文字列を使用して、OnCreate メソッドで db.execSQL(DATABASE_CREATE) を呼び出します。

これがエラーが発生している場所だと思います:

            public boolean findPerson(String uid, String password) {
                String [] columns = new String [] {DB_Helper.KEY_NAME, DB_Helper.KEY_PASSWORD};
                Cursor c = database.query(DB_Helper.DATABASE_TABLE_USERS, columns,"KEY_PASSWORD = ? AND KEY_NAME = ?",
                new String[] { password, uid },
                null,
                null,
                null);


                 if(!c.moveToFirst()){
                c.close();
               return false;
                  }
                 else c.close();

    return true;
}

列 KEY_PASSWORD が見つからないという例外がすぐに発生します。

ログファイルは次のとおりです。

02-25 21:20:56.426: D/MainActivity(2257): 保存ボタンがクリックされました

02-25 21:20:56.695: E/SQLiteLog(2257): (1) そのような列はありません: KEY_PASSWORD

02-25 21:20:56.695: D/AndroidRuntime(2257): VM をシャットダウンしています

02-25 21:20:56.705: W/dalvikvm(2257): threadid=1: キャッチされない例外で終了するスレッド (グループ = 0x40a70930)

02-25 21:20:56.775: E/AndroidRuntime(2257): 致命的な例外: メイン

02-25 21:20:56.775: E/AndroidRuntime(2257): java.lang.IllegalStateException: アクティビティのメソッドを実行できませんでした

02-25 21:20:56.775: E/AndroidRuntime(2257): android.view.View$1.onClick(View.java:3597)

02-25 21:20:56.775: E/AndroidRuntime (2257): android.view.View.performClick (View.java:4202) で

02-25 21:20:56.775: E/AndroidRuntime(2257): android.view.View$PerformClick.run(View.java:17340) で

02-25 21:20:56.775: E/AndroidRuntime(2257): android.os.Handler.handleCallback(Handler.java:725) で

02-25 21:20:56.775: E/AndroidRuntime(2257): android.os.Handler.dispatchMessage(Handler.java:92) で

02-25 21:20:56.775: E/AndroidRuntime(2257): android.os.Looper.loop(Looper.java:137)

02-25 21:20:56.775: E/AndroidRuntime(2257): android.app.ActivityThread.main(ActivityThread.java:5039)

02-25 21:20:56.775: E/AndroidRuntime(2257): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で

02-25 21:20:56.775: E/AndroidRuntime(2257): java.lang.reflect.Method.invoke(Method.java:511) で

02-25 21:20:56.775: E/AndroidRuntime(2257): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) で

02-25 21:20:56.775: E/AndroidRuntime (2257): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) で

02-25 21:20:56.775: E/AndroidRuntime(2257): dalvik.system.NativeStart.main(ネイティブ メソッド) で

02-25 21:20:56.775: E/AndroidRuntime(2257): 原因: java.lang.reflect.InvocationTargetException

02-25 21:20:56.775: E/AndroidRuntime(2257): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で

02-25 21:20:56.775: E/AndroidRuntime(2257): java.lang.reflect.Method.invoke(Method.java:511) で

02-25 21:20:56.775: E/AndroidRuntime(2257): android.view.View$1.onClick(View.java:3592)

02-25 21:20:56.775: E/AndroidRuntime(2257): ... 11 詳細

02-25 21:20:56.775: E/AndroidRuntime(2257): 原因: android.database.sqlite.SQLiteException: そのような列はありません: KEY_PASSWORD (コード 1): 、コンパイル中: SELECT id_name, id_password FROM reg_users_table WHERE KEY_PASSWORD = ? AND KEY_NAME = ?

02-25 21:20:56.775: E/AndroidRuntime(2257): android.database.sqlite.SQLiteConnection.nativePrepareStatement(ネイティブ メソッド) で

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:882) で

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection.java:493) で

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) で

02-25 21:20:56.775: E/AndroidRuntime(2257): android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)

02-25 21:20:56.775: E/AndroidRuntime(2257): android.database.sqlite.SQLiteQuery で。(SQLiteQuery.java:37)

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:44) で

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1314) で

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteDatabase.queryWithFactory (SQLiteDatabase.java:1161) で

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1032) で

02-25 21:20:56.775: E/AndroidRuntime (2257): android.database.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1200) で

02-25 21:20:56.775: E/AndroidRuntime(2257): com.example.wheresmystuff.Model.DB.findPerson(DB.java:57) で

02-25 21:20:56.775: E/AndroidRuntime (2257): com.example.wheresmystuff.Presenter.Login_Presenter.validate (Login_Presenter.java:26) で

02-25 21:20:56.775: E/AndroidRuntime (2257): com.example.wheresmystuff.View.MainActivity.save (MainActivity.java:48) で

02-25 21:20:56.775: E/AndroidRuntime(2257): ... 14 詳細

4

3 に答える 3

2

KEY_PASSWORDはJava変数名であり、必ずしも実際のSQL列名ではありません。実際のSQL名を再確認してください

于 2013-02-25T21:41:21.887 に答える
1

エラーは非常に自明です。選択したものは、テーブルに存在しない列(KEY_NAMEおよび)を探しています。KEY_PASSWORDエラーはコンパイルされたSQLを提供するので、間違いを確認できます。

SELECT id_name, id_password FROM reg_users_table WHERE KEY_PASSWORD = ? AND KEY_NAME = ?

選択を次のように変更しますKEY_PASSWORD + " = ? AND " + KEY_NAME + " = ?"

于 2013-02-25T21:46:31.970 に答える