0

次のコードを使用して、sqlite からデータを取得しようとしています。

String sql = "select * from "+Table +" where "+C_LoginName+"=" +user; 
Log.d("CREATE DATABASE", "SQL: " + sql);   
Cursor c = db.rawQuery(sql, null);  
c.moveToFirst();  
Log.d("Password is", c.getString(c.getColumnIndex(C_Password)));  

しかし、このエラーが表示されました(「そのような列はありません....」)すべての文字列に単一の引用符( ')側を使用しても違いはありません.しかし、 select * from table を使用すると loginName があります。どうすればそれを解決できますか?tnx

4

2 に答える 2

0

sqlite android javaにはそのような列はありません

通常、この種のエラーがスローされます。

  • 列の値を一重引用符で囲むのを忘れた場合 (パラメーター化されたステートメントを使用していない場合)
  • 指定した列名が正しくありません (データベース スキーマを確認してください)

おすすめ:

私はあなたのアプローチが好きではありません。それは汚れていて、人間が読めるものではなく、非常に安全ではありません。各プレースホルダーが指定された配列の値に置き換えられるプレースホルダーを使用して、パラメーター化されたステートメントを使用することをお勧めします。

例:

String query = "select * from tablename where name = ?";
db.rawQuery(query, new String[] {name}); // ? will be replaced with name value

ノート:

通常、データベースを扱っている場合、列名を最終的な静的変数として保持する Const などのクラスを作成することは、非常に優れた便利な方法です。

これにより、データベースをより効率的かつクリーンに処理できるようになり、タイプミスの問題 (見つけるのが難しすぎる) を回避できます。

于 2013-08-03T15:59:36.743 に答える