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

  • IntelliJ MyClass.class (nessun file o directory) quando si esegue l'applicazione
  • View.onDraw () - quando viene chiamato?
  • c'è un esempio di demo twitter per pubblicare foto su twitter con l'utilizzo di OAuth in twitter?
  • L'emulatore Android support OpenGL ES 2.0?
  • Variabile 'runnable' deve essere inizializzata
  • Animazione tipo GIF per indicatore nella mappa google ANDROID api
  • Diversi comportmenti di override deboli function nella libreria condivisa tra OS X e Android
  • ANDROID: se il WiFi è triggersto e attivo, lanci un'intenzione
  • Utilizza constructor URI in Android o crea URL con variables
  • Combina image e text a disegnare
  • Come implementare RecyclerView con righe CardView in un frammento con TabLayout
  • OpenCV in Android Studio
  • 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.