0

以下のコードを使用して、Android アプリで sqlite レコードを取得しています。このコードは数値をフェッチしますが、英数字の値はフェッチしません。

例: tempno が 2 の場合はレコードを取得しますが、tempno が 2A の場合はレコードを取得しません。

私が使用した変数はすべて「文字列」データ型です。

public Map<String, Object> getDetails(String tempno) throws SQLException{
    Map<String, Object> map = new HashMap<String, Object>();
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "=" + tempno, null, null, null, null, null);

別のクラスから以下のコードを呼び出しています。

どこが間違っているのか教えてください。

Map<String, Object> temp = dbAdapt.getDetails(tempno);

以下はLogcatのエラーです

  09-26 18:42:52.108: E/AndroidRuntime(2363): android.database.sqlite.SQLiteException: unrecognized token: "2A": , while compiling: SELECT DISTINCT source, destination, routelength, note FROM route WHERE routeno=2A
4

2 に答える 2

2

これを次のように変更します。

public Map<String, Object> getDetails(String tempno) throws SQLException{       
  Map<String, Object> map = new HashMap<String, Object>();     
  Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "='" + tempno+"'", null, null, null, null, null); 


//ROUTENO + "='" + tempno+"'", 

これは簡単で汚い解決策ですが、機能します。これは、SQL 文字列に値を入れる一般的な方法ではありません。

于 2012-09-26T14:26:53.943 に答える
0

query独自のパラメータ置換の代わりに'sパラメータ置換を使用します。

public Map<String, Object> getDetails(String tempno) throws SQLException{
    Map<String, Object> map = new HashMap<String, Object>();
    Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {SOURCE, DESTINATION, ROUTELENGTH, NOTE}, ROUTENO + "= ?", new String[] { tempno }, null, null, null, null);
于 2012-09-26T14:48:46.070 に答える