我正在尝试实现一个数据库来存储有关 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: 线程以未捕获的异常退出 (group=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(Native Method)
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): at dalvik.system.NativeStart.main(Native Method)
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(Native Method)
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 (code 1): , 编译时: SELECT id_name, id_password FROM reg_users_table WHERE KEY_PASSWORD = ? 和 KEY_NAME = ?
02-25 21:20:56.775: E/AndroidRuntime(2257): 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
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): at 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 更多