Italian lista e sqlite

diresc

Member
Licensed User
Longtime User
Ciao a tutti ho popolato una lista da (colonna1) tabella sqlite db
Premetto non so se è giusto con il comando get(n) leggo il valore caricato
con comando set(n) scrivo nella lista .
adesso voglio salvare intera lista composta da 2000 record nella colonna1 del db
come faccio?Grazie in anticipo per tutte le risposte.
 
...un po' di codice non fa mai male, ovvero spiega meglio
 
B4X: Copy
in modulo di codice:

Sub Process_Globals
Dim sql As SQL
Dim cur As Cursor
    
    Public LISTA_DATO As List
    Public LISTA_ATTIVO As List

End Sub

Sub caricadb
    
    Dim DB_NAME As String ="dati.db"
    
    If File.Exists(File.DirInternal,DB_NAME)=False Then
        File.Copy(File.DirAssets,DB_NAME,File.DirInternal,DB_NAME)
    End If
        
    sql.Initialize(File.DirInternal, DB_NAME, True)
    
    cur=sql.ExecQuery("Select * from IMPOSTAZIONI")
    
    LISTA_DATO.Initialize
    LISTA_ATTIVO.Initialize
    lunghezza=cur.RowCount - 1
    For i = 0 To cur.RowCount - 1
        cur.Position = i
    
        LISTA_DATO.Add(cur.GetString("DATO"))
        LISTA_ATTIVO.Add(cur.GetString("ATTIVO"))
    lval=i
        
        
        
    
    Next
    
    cur.Close
    
    
End Sub

Poi nella b4xmainpage:
dim test as string


    test=Servizio.LISTA_DATO.Get(1) 'leggo valore'

    
    tabmenusopra.AddTab(test,xui.LoadBitmap(File.DirAssets,"p1.png"),xui.LoadBitmap(File.DirAssets,"p1.png"))
    
    tabmenusopra.Refresh
    
    Servizio.LISTA_DATO.Set(1,"pippo") 'scrivo nella lista
    
    
    Private Sub tabmenusopra_TabClick (Index As Int)
    'salvare lista aggiornata in db sqlite ???????????'
End Sub
 
forse è l'orario, ma vedo molte incongruenze;
Code: Copy
lunghezza=cur.RowCount - 1
    For i = 0 To cur.RowCount - 1
'meglio : For i = 0 to lunghezza
poi
Code: Copy
test=Servizio.LISTA_DATO.Get(1) 'qui leggi il secondo valore, visto che una "List" è indicizzata da 0 a .... n;
senza conoscere la struttura della table del DB, posso solo pensare di utilizzare un update
Code: Copy
Dim query as String = $"update  IMPOSTAZIONI set DATO = '${NuovoValore}' where ${quale condizione?}"$
'e poi esegui
sql.ExecNonQuery(query)
 
forse è l'orario, ma vedo molte incongruenze;
Code: Copy
lunghezza=cur.RowCount - 1
    For i = 0 To cur.RowCount - 1
'meglio : For i = 0 to lunghezza
poi
Code: Copy
test=Servizio.LISTA_DATO.Get(1) 'qui leggi il secondo valore, visto che una "List" è indicizzata da 0 a .... n;
senza conoscere la struttura della table del DB, posso solo pensare di utilizzare un update
Code: Copy
Dim query as String = $"update  IMPOSTAZIONI set DATO = '${NuovoValore}' where ${quale condizione?}"$
'e poi esegui
sql.ExecNonQuery(query)
Grazie ma io voglio salvare tutta la lista (dopo che carico il dati nella lista ,modifico alcuni index della lista es.(0) il (20) ecc ..con nuovi valori e poi riscrivo l'intera lista del db
 
ok, visto che modifichi la lista "LISTA_DATO", potresti procedere in questo modo:
Code: Copy
For i = 0 to LISTA_DATO.Size-1
  Dim query as String = $"update  IMPOSTAZIONI set DATO = '${LISTA_DATO.Get(i)}' where ATTIVO = '${LISTA_ATTIVO.Get(i)}' "$
  sql.ExecNonQuery(query)
Next

considera l'utilizzo di una "MAP" al posto delle due "LIST"
quindi nella tua select
Code: Copy
miaMap.Put(cur.GetString("ATTIVO"), cur.GetString("DATO"))
la MAP è una lista dove ogni elemento (si parte sempre da 0) è costituito da una Chiave UNIVOCA e il relativo valore;
puoi verificare l'esistenza o meno di una Chiave ed estrarre il valore
Code: Copy
If miaMap.ContainsKey("chiave_da_cercare") Then
    valore = miaMap.Getdefault("chiave_da_cercare", "Ops, c'è qualcosa che non va")
End if
qui il classico esempio
Code: Copy
For Each Key As String In miaMap.Keys
 Dim Value As Object = miaMap.Get(Key)
 log("Chiave = " & key)
log("Valore = " & value)
Next
 
ok, visto che modifichi la lista "LISTA_DATO", potresti procedere in questo modo:
Code: Copy
For i = 0 to LISTA_DATO.Size-1
  Dim query as String = $"update  IMPOSTAZIONI set DATO = '${LISTA_DATO.Get(i)}' where ATTIVO = '${LISTA_ATTIVO.Get(i)}' "$
  sql.ExecNonQuery(query)
Next

considera l'utilizzo di una "MAP" al posto delle due "LIST"
quindi nella tua select
Code: Copy
miaMap.Put(cur.GetString("ATTIVO"), cur.GetString("DATO"))
la MAP è una lista dove ogni elemento (si parte sempre da 0) è costituito da una Chiave UNIVOCA e il relativo valore;
puoi verificare l'esistenza o meno di una Chiave ed estrarre il valore
Code: Copy
If miaMap.ContainsKey("chiave_da_cercare") Then
    valore = miaMap.Getdefault("chiave_da_cercare", "Ops, c'è qualcosa che non va")
End if
qui il classico esempio
Code: Copy
For Each Key As String In miaMap.Keys
 Dim Value As Object = miaMap.Get(Key)
 log("Chiave = " & key)
log("Valore = " & value)
Next
Grazie lavorerò sulle mappe Grazie mille Gianni
 
Back
Top