Autore Topic: SQLite e apici '  (Letto 895 volte)

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
SQLite e apici '
« il: 21 Maggio 2011, 21:34:39 CEST »
0
Ciao a tutti,

Ho un problema in una select, praticamente faccio una select di un nome dove il nome variabile e' uguale a qualcosa.

Pero' ho un problema quando il nome della variabile e' formato da un nome con un apice tipo

myVar = "un'antilope"

Come risolvo la cosa?

Tks.

r

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:SQLite e apici (quotes)
« Risposta #1 il: 21 Maggio 2011, 22:05:10 CEST »
0
Risolto mettendo "= \""+ myVar +"\""

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:SQLite e apici '
« Risposta #2 il: 23 Maggio 2011, 10:59:21 CEST »
0
dovresti utilizzare gli statement, così non devi preoccuparti di nulla.

Codice (Java): [Seleziona]
...
SQLiteStatement stmt = db.compileStatement("SELECT * FROM Animali WHERE myVar = ?");
stmt.bindString(1, "un'antilope");
...
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:SQLite e apici '
« Risposta #3 il: 23 Maggio 2011, 11:02:04 CEST »
0
E' che inserisco i dati tramite uno switch

Un Ciclo Switch puo' esaurire la memoria? - Android Developers Italia

Ma la cosa e' interessante la considero.

Offline Khali

  • Utente junior
  • **
  • Post: 70
  • Respect: +7
    • u.felloni
    • Mostra profilo
  • Play Store ID:
    weetme software
  • Sistema operativo:
    windows 7
Re:SQLite e apici '
« Risposta #4 il: 23 Maggio 2011, 11:10:15 CEST »
0
Visto che ci ho sbattuto la testa per un po'...Come ha detto 7h38ugg3r, anch'io di consiglio di utilizzare la "bind" per passare i valori. Se non la usi rischi che altri caratteri come gli apici te causino errori. Un esempio sono i doppi apici.
Ciao

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:SQLite e apici '
« Risposta #5 il: 23 Maggio 2011, 11:16:10 CEST »
0
utilizzare switch, for, while o quello che vuoi, non cambia la cosa.
basta che tieni conto di quali variabili stai inserendo nello statement e successivamente setti solo quelli utili.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:SQLite e apici '
« Risposta #6 il: 23 Maggio 2011, 11:19:44 CEST »
0
Ottimo grazie,

Ora provo anche a studiarmi questo

[facile] Creare Database da file csv - Android Developers Italia

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:SQLite e apici '
« Risposta #7 il: 23 Maggio 2011, 15:40:58 CEST »
0
A proposito della bind,

Quando costruisco il db i dati li leggo da un file csv e uso questo: (invece di una virgola uso # come delimiter)

Codice: [Seleziona]
public static ContentValues getContentValues(String value) {
                ContentValues result = new ContentValues();
                StringTokenizer stringTokenizer = new StringTokenizer(value, "#");
       
                result.put(KEY_NAME, stringTokenizer.nextToken());
                result.put(KEY_DESC, stringTokenizer.nextToken());
               
                return result;
        }

Quando leggo i dati ho appunto problemi con gli accenti e visualizzo un punto interrogativo.

Come posso utilizzare la bind con il seguente caso?

Codice: [Seleziona]
public Cursor fetchAll() {

        return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
                KEY_DESC,}, null, null, null, null, null);
    }
« Ultima modifica: 23 Maggio 2011, 16:22:12 CEST da racoonlab »

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:SQLite e apici '
« Risposta #8 il: 23 Maggio 2011, 17:54:18 CEST »
0
mmm l'errore non e' nell'esempio riportato sopra.

line (vedi codice sotto) contiene gia' punti interrogativi in corrispondenza di apici

Codice: [Seleziona]
void load(InputStreamReader in) {
                BufferedReader reader = new BufferedReader(in);
                try {
                        String line = null;
                        while ( (line = reader.readLine()) != null ) {
                                Log.v(LOG_TAG, "line: "+line);
                                mDb.insert(DATABASE_TABLE, null, getContentValues(line));
                        }
                        reader.close();
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if (in != null) {
                                try {
                                        in.close();
                                } catch (IOException e) {
                                }
                        }
                }
        }

Qualche idea su come evitare questi strani caratteri?

r

PS = Devo aprire un altro post?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:SQLite e apici '
« Risposta #9 il: 23 Maggio 2011, 17:56:32 CEST »
0
Sicuro che il file da cui vai a leggere sia formattato in UTF8?

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:SQLite e apici '
« Risposta #10 il: 23 Maggio 2011, 17:58:13 CEST »
0
Assolutamente no,

e' un puro csv file fatto in notepad. Qualche consiglio a riguardo?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:SQLite e apici '
« Risposta #11 il: 23 Maggio 2011, 18:00:06 CEST »
0
Scarica notepad++ (o un programma equivalente) e cambia il formato in utf8 :)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:SQLite e apici '
« Risposta #12 il: 23 Maggio 2011, 18:01:11 CEST »
0
Quando leggo i dati ho appunto problemi con gli accenti e visualizzo un punto interrogativo

Ti accade perchèil file ascii da cui prelevi i dati non è codificato in UTF-8, ma nella codifica standard del tuo sistema. Dove convertirlo in UTF-8 e salvarlo.

Se il file è nel progetto Eclipse ti rendi conto della codifica dalle proprietà del file.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline racoonlab

  • Utente junior
  • **
  • Post: 98
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
Re:SQLite e apici '
« Risposta #13 il: 23 Maggio 2011, 18:02:33 CEST »
0
uso Ultraedit ma di solito, uso il semplice e pure notepad,

Mo paciugo con la codifica.

Grazie.