2016-03-21 15 views
0

店舗名を表示するかどうかを定義するために、LocationCodeという列から値を取得しようとしました。しかし、そのような列はないというエラーがあります。綴り間違いはありません。android.database.sqlite.SQLiteException:そのような列がありませんShopName

そして、これはコードです:

public List<String> getQuotes() { 
    List<String> list = new ArrayList<>(); 
    Cursor cursor = database.rawQuery("SELECT ShopName,LocationCode FROM WhereToEat WHERE LocationCode = 'WhiteFarm' ", null); 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
     list.add(cursor.getString(0)); 
     cursor.moveToNext(); 
    } 
    cursor.close(); 
    return list; 
} 

ありがとうございました。

エラーログ

致命的な例外:メイン プロセス:com.projects.randomcreation.wheretoeat、PID:2122 java.lang.RuntimeException:活性 ComponentInfo {com.projects.randomcreationを開始できません。 wheretoeat/com.projects.randomcreation.wheretoeat.databases.DatabaseGrabber} android.database.sqlite.SQLiteException:そのようなカラム:ShopName (コード1)、コンパイル中: FROM ShopName、LocationCodeを選択WhereToEat WHERE LocationCode = 'ホワイトファーム ' でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) android.app.ActivityThread.-wrap11(ActivityThread.java)で でandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) とandroid.os.Handler.dispatchMessage(Handler.java:102) とandroid.os.Looper.loop(Looper.java:148) android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(ネイティブ・ミーcom.android.internal.os.ZygoteInit.mainでTHOD) でcom.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) (ZygoteInit.java:616)によって引き起こさ :アンドロイド.database.sqlite.SQLiteException:そのようなカラム: ShopName(コード1)、コンパイル中:WhereToEat FROM ShopName、LocationCode を選択LocationCode = 'WhiteFarm' でandroid.database.sqlite.SQLiteConnection.nativePrepareStatement(ネイティブ メソッド) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) でandroid.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498) でandroid.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)android.database.sqlite.SQLiteProgramで 。(SQLiteProgram .java:58) android.database.sqlite.SQLiteQueryで(SQLiteQuery.java:37) でandroid.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) android.database.sqliteました。 SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) at android.datab ase.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255) ( )com.projects.randomcreation.wheretoeat.databases.DatabaseAccess.getQuotes(DatabaseAccess。Javaの:65) android.appでandroid.app.Activity.performCreateで com.projects.randomcreation.wheretoeat.databases.DatabaseGrabber.onCreate(DatabaseGrabber.java:27) (Activity.java:6237) で。 Instrumentation.callActivityOnCreate android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)android.appで でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)で(Instrumentation.java:1107) 。 ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage android.os.Looper.loop(Looper.java:148)でandroid.os.Handler.dispatchMessage(Handler.java:102)で(ActivityThread.java:1344) android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :726) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

完全にDatabaseOpenHelper

のコード
public class DatabaseAccess { 
private SQLiteOpenHelper openHelper; 
private SQLiteDatabase database; 
private static DatabaseAccess instance; 

/** 
* Private constructor to aboid object creation from outside classes. 
* 
* @param context 
*/ 
public DatabaseAccess(Context context) { 
    this.openHelper = new DatabaseOpenHelper(context); 
} 

/** 
* Return a singleton instance of DatabaseAccess. 
* 
* @param context the Context 
* @return the instance of DabaseAccess 
*/ 
public static DatabaseAccess getInstance(DatabaseGrabber context) { 
    if (instance == null) { 
     instance = new DatabaseAccess(context); 
    } 
    return instance; 
} 

/** 
* Open the database connection. 
*/ 
public void open() { 
    this.database = openHelper.getWritableDatabase(); 
} 

/** 
* Close the database connection. 
*/ 
public void close() { 
    if (database != null) { 
     this.database.close(); 
    } 
} 

/** 
* Read all quotes from the database. 
* 
* @return a List of quotes 
*/ 
public List<String> getQuotes() { 
    List<String> list = new ArrayList<>(); 
    Cursor cursor = database.rawQuery("SELECT ShopName,LocationCode FROM WhereToEat WHERE LocationCode = '+WhiteFarm+' ", null); 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
     list.add(cursor.getString(0)); 
     cursor.moveToNext(); 
    } 
    cursor.close(); 
    return list; 
} 
} 

更新:

CREATE TABLE "WhereToEat" (
`ShopName` TEXT, 
`Location` TEXT, 
`LocationCode` TEXT, 
`Photo` BLOB); 

私は列が存在すると信じています。

+0

エラーログをしてください行っているものと同様のいくつかのサンプルクエリを見つけることができます。コピー貼り付けの正確なエラー文 – Shreyans

+0

'shopName'は最近追加した列ですか? – Karakuri

+0

データベースは静的で、ShopNameは最初に存在します –

答えて

0

これを試してください。おそらく、あなたは "WhiteFarm"を一重引用符( 'WhiteFarm')で囲む必要があります。それは、これを行うことによって達成することができます。

​​

私は列の型がintであるときにのみ場合には+ WhiteFarm +を使用する必要があり、Harshadに同意します。

あなたはhere

+0

私がSELECT * FROM WhereToEatを使用すると、 –

+0

が動作しますが、SELECT ShopNameをWhereToEatから使用すると、クラッシュするのはなぜですか? –

+1

私はあなたが言っていることを見ます。 1つの説明があります。つまり、列名を一重引用符で囲みます。つまり、 '' "+列名+" '"です。 あなたの例では、 「ShopName」をWhereToEatから選択してください。 は動作します。 –

関連する問題