2016-07-25 19 views
0

私は完全に動作するこのパラメトリッククエリを作成しました。文字列が頂点に渡されたときに今、私はTHIAndroid SQLite SELECT構文エラーapex

SQLiteException: near "'%'": 

このエラーを取得することは、このタイプstringa'の文字列であるparametro場合、クエリ

String sql = "SELECT titolo, icona, colore, tipo, identificativo, dato_campo FROM table " + 
      "WHERE titolo LIKE '%" + parametro + "%' " + 
      "OR dato_campo LIKE '%" + parametro + "%' GROUP BY identificativo"; 

ですが、私はエラーを取得します。

どうすれば修正できますか?

+0

あなたの完全クラッシュログを追加してください – USKMobility

答えて

2

問題は、文字列にSQLクエリ文字列を分割する一重引用符文字があることです。 parametro == test01シミュレーション

- あなたが見ることができるようにNOK

"SELECT titolo, icona, colore, tipo, identificativo, dato_campo FROM table WHERE titolo LIKE '%stringa'%' OR dato_campo LIKE '%stringa'%' GROUP BY identificativo"; 

parametro == stringa'をシミュレートOK

"SELECT titolo, icona, colore, tipo, identificativo, dato_campo FROM table WHERE titolo LIKE '%test01%' OR dato_campo LIKE '%test01%' GROUP BY identificativo"; 

を、あなたの文字列は、SQLクエリの無効である'%stringa'%'を生産しています。

'という文字は、クエリ中に%stringa''%'にエスケープする必要があります。次のように

だから、あなたはあなたのクエリ文字列を作成する前に何かを追加することができます。これは、あなたが今直面している問題についてのサポートは...ゲイブSechanは他の回答で述べたように、生で

parametro = parametro.replaceAll("\'","''"); 
String sql = "SELECT titolo, icona, colore, tipo, identificativo, dato_campo FROM table " + 
     "WHERE titolo LIKE '%" + parametro + "%' " + 
     "OR dato_campo LIKE '%" + parametro + "%' GROUP BY identificativo"; 

クエリは推奨されません。

UPDATEクエリを実行するための

安全な方法は次のとおりです。

String paramentro = "stringa'"; 
Cursor cursor = db.query("tablename", new String [] {"titolo", "icona", "colore", "tipo", "identificativo", "dato_campo"}, "titolo LIKE ? OR dato_campo LIKE ?", new String[]{"%"+paramentro+"%", "%"+paramentro+"%"}, "identificativo", null, null, null); 
1

連結を使用して、このようなSQLクエリを記述しないでください。それは、SQLインジェクション攻撃に対してあなたを広げてくれます。代わりに、バインドされたパラメータを使用します。これによりクエリがより効率的になるだけでなく、SQLインジェクションが防止されます。

関連する問題