Autore Topic: inserimento record in db previa condizione di non esistenza del record  (Letto 837 volte)

Offline Soldo

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu10.04
0
Salve,
lavoro con un classico database con chiave primaria = id autoincrementante e alcuni campi, tra cui il campo nome che effettivamente sarebbe la chiave primaria che utilizzerei.
Ho un dubbio e un problema:

dubbio: è un caso che in tutti gli esempi che ho visto (su libri e quant'altro) venga sempre usato un id autoincrementante come chiave primaria? da teoria si cerca sempree di evitare una pk di questo tipo...è forse più comoda praticamente?

problema: a questo punto, avrei la necessità di controllare se, durante l'inseriemento di un nuovo record R, non ci sia già un record in tabella con lo stesso nome di R. Ho pensato di usare una select tipo: SELECT FROM tabella WHERE nome = 'R.nome' ma questo è il risultato...

ERROR/AndroidRuntime(1186): Caused by: android.database.sqlite.SQLiteException: no such column: Variabile2: , while compiling: SELECT * FROM VARIABLES WHERE (name = Variabile2)

quindi la mia pensata non va perché dl poco che posso capire va in bomba se cerc un record con nome e tale record non è presente. devo forse utilizzare if exists? in che modo?

Grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:inserimento record in db previa condizione di non esistenza del record
« Risposta #1 il: 08 Settembre 2010, 18:17:22 CEST »
+1
Citazione
dubbio: è un caso che in tutti gli esempi che ho visto (su libri e quant'altro) venga sempre usato un id autoincrementante come chiave primaria? da teoria si cerca sempree di evitare una pk di questo tipo...è forse più comoda praticamente?

Sei obbligato ad usarlo... probabilmente per non so quali motivi interni di sqlite, ma è così :)

Citazione
problema: a questo punto, avrei la necessità di controllare se, durante l'inseriemento di un nuovo record R, non ci sia già un record in tabella con lo stesso nome di R. Ho pensato di usare una select tipo: SELECT FROM tabella WHERE nome = 'R.nome' ma questo è il risultato...


In sqlite si usano i doppi apici per le stringhe.
Comunque, non è sufficiente che dichiari il tuo campo come UNIQUE?

Offline Soldo

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu10.04
Re:inserimento record in db previa condizione di non esistenza del record
« Risposta #2 il: 09 Settembre 2010, 09:57:32 CEST »
0
Ricontrollando il codice mi sono accorto che quella eccezione saltava fuori perché mancava un apice...  :'( però a mio avviso l'eccezione non è proprio esplicativa...

Ho provato anche lo UNIQUE ed effettivamente, cercando di inserire un record con name già presente ho come valore di ritorno un long = -1 e nessun effettivo inserimento...

Grazie Ricky` !

Offline ilcapitano4

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC WildFire
  • Sistema operativo:
    Ubuntu 11.10
Re:inserimento record in db previa condizione di non esistenza del record
« Risposta #3 il: 28 Aprile 2012, 18:54:25 CEST »
0
Per fare un controllo del tipo, mia_stringa = stringa_nel_DB,  bisogna usare la seguente sintassi:

Esempio: Selezione dell'ID di un dipendente, dalla tabella dei dipenditi di una società, dove il nome del dipendente = stringa.

Codice: [Seleziona]
final String querySQL = "SELECT " + Dipendenti.ID
                                       + " FROM "     + Dipendenti.TABLE
                                       + " WHERE "  + Dipendenti.NAME + " LIKE ' " + stringa + " ' ";

Cursor cur = dataBase.rawQuery(querySQL, null);

l'oggetto dataBase è naturalmente un oggetto SQLiteDatabase.

Spero sia ancora utile a qualcuno, visto che il topic è vecchiotto.  :-)