Come sfuggire il carattere non supportto in SQLite su Android?

qualcuno può dire Come fuggire o sostituire carattere non supportto come citazioni singole in sqlite in android può qualcuno dare esempio

Grazie

  • Il metodo getSystemService (String) non è definito per il tipo Listen
  • Scorrimento orizzontale automatico in TextView
  • Come aggiornare il numero di versione di un'applicazione nativa
  • Rimozione dello strikethrough da TextView
  • Come fornire i file di dati per i test di unità Android
  • Android: come passare ArrayList <object> da un'attività all'altra
  • Come get text e smiley da Edittext in String?
  • Android come creare forma triangular e rettangular a livello di programmazione?
  • Cerca dialogo in Android Mono
  • ViewPager con frammenti che contengono TableLayouts si carica lentamente:
  • Verifica il mio layout: il button inferiore continua a salire sulla tastiera
  • Android - Imposta text a TextView
  • 3 Solutions collect form web for “Come sfuggire il carattere non supportto in SQLite su Android?”

    È ansible utilizzare l'utilità commons-lang oppure è ansible utilizzare un regexp per gestirlo.

    Se stai costruendo SQL dinamico, quello che suggerirei sta cercando di utilizzare una dichiarazione preparata che elimina la necessità di escludere singole citazioni.

    Utilizzando solo un SQL dinamico costruito utilizzando la concatenazione di stringhe:

    String value = "one's self"; StringBuilder query= new StringBuilder(); query.append("insert into tname(foo) values (").append(value).append(")"); ... execute call with query.toString() ... 

    Cambia questo a

     String value = "one's self"; value= DatabaseUtils.sqlEscapeString(value); StringBuilder query= new StringBuilder(); query.append("insert into tname(foo) values (").append(value).append(")"); ... execute call with query.toString() ... 

    Idealmente, utilizzare una dichiarazione preparata

     String value = "one's self"; StringBuilder query= StringBuilder(); query.append("insert into tname(foo) values (?)"); SQLiteStatement stmt= db.compileStatement(query.toString()); stmt.bindString(1, value); long rowId= stmt.executeInsert(); // do logic check for > -1 on success 

    In questo modo non si esegue in "attacchi SQL iniezione".

    Per ulteriori informazioni, fare riferimento a http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html .

    EDIT Ho eseguito un po 'di scavo, è ansible utilizzare DatabaseUtils.sqlEscapeString (String) per escludere il contenuto di una string in modo che sia valido per un'istruzione SQL completa senza prepararsi.

    Non sono questi fatti con un semplice \? Quindi, il tuo singolo preventsvo sarebbe \ '.

    In realtà, il modo più semplice è quello di sostituire singole virgolette (') con virgolette a due singoli (' '). La tua richiesta diventerà quindi:

     insert into tname(foo) values ('one''s self'); 

    Spiegazione : SQLite support l'uso di virgolette singole (') anziché doppie virgolette (") come delimitatori di stringhe, sostenendo che questo è ciò che richiede lo standard SQL (non sono stato in grado di confermare questo). SQLite differisce anche da tutti gli altri database SQL I sapere, in quanto utilizza "'invece di \", ancora una volta, rivendicando gli standard SQL. (Ancora una volta, non ho potuto confermare questa affermazione).

    Personalmente, tendono a non essere d'accordo con questa affermazione, poiché each altro database SQL che conosco utilizza il modo C di fuggire i caratteri, il backslash. Anche se fosse stato scritto per usare '' da qualche parte nello standard SQL di ISO, credo che sia meglio rivedere tale standard per utilizzare il modo C, perché in pratica è già lo standard in each caso.

    Si prega di notare che:

     insert into tname(foo) values ('ones "self"'); 

    è un'istanza sql valida da quella logica e non richiede ulteriore sfuggita.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.