1
Cursor cursor = db.query(UserTable, null, 
                "UserName=?", new String[] {username}, 
                null, null, AccessedDate);

アクティビティを開こうとすると、列が見つからないという例外が発生します。エラーは上記を指していますquery line

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.text.sample/com.text.sample.usercontext.RecentsActivity}: android.database.sqlite.SQLiteException: no such column: UserName (code 1): 、コンパイル中: SELECT * FROM 患者 WHERE ユーザー名=? ORDER BY AccessedDate で android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) で android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) で android.app.ActivityThread.access$600(ActivityThread.java:141) でandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) android.os.Handler.dispatchMessage(Handler.java:99) android.os.Looper.loop(Looper.java:137) android.app .ActivityThread.main(ActivityThread.java:5041) java.lang.reflect.Method で。java.lang.reflect.Method.invoke(Method.java:511) の invokeNative(ネイティブ メソッド) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) の com.android.internal. os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) 原因: android.database.sqlite.SQLiteException: no such column: UserName (code 1): 、コンパイル中: SELECT * FROM 患者 WHERE ユーザー名=? android.database.sqlite.SQLiteConnection.nativePrepareStatement(ネイティブ メソッド) の ORDER BY AccessedDate android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) の android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) ) android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) で android.database.

4

2 に答える 2

1

「列が存在することは確かです」が「そのような列はありません」が返される原因として考えられるのは、データベースに以前に別の形式がインストールされていて、データベースのバージョンを上げずに更新し、onUpgrade を使用して更新したことです。あなたのデータベース。

これがあなたのケースに一致する場合は、この投稿をご覧ください。onUpgrade を正しく実行する方法を教えてくれます: https://stackoverflow.com/a/14579351/1131470

于 2013-05-02T02:48:37.850 に答える
0

列に定数として名前を付けると役立つと思います..これは最も一般的な間違いの1つであるため、各列の名前を覚える代わりに、定数クラスまたは列クラスに静的な最終メンバーとして配置してからアクセスしてください。

次のようなものになります。

Cursor cursor = db.query(UserTable, null, 
            UserColumn.USER_NAME + "=?", new String[] {username}, 
            null, null, UserColumn.ACCESSED_DATE);

これにより、より多くの制御が可能になり、ばかげた間違いを取り除くことができます。

于 2016-06-15T09:59:01.787 に答える