0

「Washing Machine」を検索文字列として使用して特定のエントリをデータベースで検索し、「Washing Machine」のデータベース エントリを見つけようとすると、次のようなエラーが表示されます。

04-16 21:43:28.951: E/AndroidRuntime(545): FATAL EXCEPTION: main
04-16 21:43:28.951: E/AndroidRuntime(545): java.lang.RuntimeException: Unable to start   activity  ComponentInfo{com.lukeorpin.theappliancekeeper/com.lukeorpin.theappliancekeeper.EntryStatis tics}: android.database.sqlite.SQLiteException: near "Machine": syntax error: , while compiling: SELECT _id, appliance_name, appliance_wattage, energy_rates FROM ApplianceDetails WHERE appliance_name=Washing Machine

より具体的には:

at com.lukeorpin.theappliancekeeper.Database.getWattage(Database.java:122)
04-16 21:43:28.951: E/AndroidRuntime(545):  at com.lukeorpin.theappliancekeeper.EntryStatistics.onCreate(EntryStatistics.java:47)

データベースの検索クエリのコードは次のとおりです。

public String getWattage(String spinnerChoice) {
    // TODO Auto-generated method stub
    String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_WATTAGE, KEY_ENERGY};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "=" + spinnerChoice, null, null, null, null);
    if (c != null){
        c.moveToFirst();
        String wattage = c.getString(2);
        return wattage;
    }
    return null;
}

public String getEnergyRate(String spinnerChoice) {
    // TODO Auto-generated method stub
    String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_WATTAGE, KEY_ENERGY};
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "=" + spinnerChoice, null, null, null, null);
    if (c != null){
        c.moveToFirst();
        String energyRate = c.getString(3);
        return energyRate;
    }
    return null;
}

これは、メソッドが作成された元のクラスです。

final String spinnerChoice = getIntent().getStringExtra("Name");
    if(spinnerChoice==null){ 
        return;
    } 

Database data = new Database(this);
    data.open();
    String returnedWattage = data.getWattage(spinnerChoice); 
    String returnedEnergyRate = data.getEnergyRate(spinnerChoice);
    data.close();

このエラーメッセージが表示される理由は誰にもわかりますか? ありがとう

編集:これは、エラーが指しているコード行です(122行目):

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "=" + spinnerChoice, null, null, null, null);
4

2 に答える 2

1

appliance_nameエラー メッセージを考えると、値比較用の文字列を示す引用符がないようです。そのはず

WHERE appliance_name = 'Washing Machine'

私はAPIに精通していませんが、122行目を次のように変更してみてください

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + "='" + spinnerChoice + "'", null, null, null, null);
于 2012-04-16T21:56:45.273 に答える
1

検索文字列を一重引用符で囲む必要があります (SQL クエリ内)。

于 2012-04-16T21:56:58.597 に答える