B4A en español - Juan Antonio Villalpando
(BASIC4Android)
-- Tutorial de B4A --
Volver al índice del tutorial
____________________________
57- SQLite.
Mediante SQLite podemos crear una base de datos en nuestro mismo móvil con Android.
En nuestro caso vamos a crear un listado telefónico.Lo primero que vamos hacer es bajar este programa para crear la base de datos en nuestro ordenador que luego copiaremos en el programa que vamos a realizar.Bajar sqlitebrowser_200_b1_win.zip (su sitio)
Una vez que lo tengamos creamos una base de datos que se llame basedatos.sql con una tabla llamada usuarios, en la tabla tres campos: Id, nombres, telefonos.
Con el programa Sqlite Browser, creamos una nueva DatabaseEn ella creamos una Tabla llamada: usuariosDentro de la Tabla, tres campos:Id (TEXT)nombre (TEXT)telefono (TEXT)Guardamos la base como basedatos.sqlEsta base la pondremos en la carpeta Files de nuestro proyecto.
NOTA: respeta las mayúsculas y minúsculas. No le pongas acento al campo telefono. |
|
1.- Código y Layout
Ahora mediante el Designer creamos un Layout, lo llamaremos "Layout" y contendrá:
Label1 ...... Nombre
Label2....... Tel.:
EditText1
EditText2
ListView1
Button1..... Añadir
Button2 .... Borrar
Button3 .... Editar
|
|
Copia y pega este código en un nuevo proyecto |
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' febrero 2013
End Sub
Sub Globals
Dim SQL1 As SQL
Dim registro As Cursor
Dim EditText1, EditText2 As EditText
Dim nombre, telefono As String
Dim ListView1 As ListView
Dim Id As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
If File.Exists(File.DirInternal,"basedatos.sql") = False Then
' Ponemos una base inicial de datos en la carpeta Files.
' Luego la copiamos en la memoria interna
File.Copy(File.DirAssets,"basedatos.sql",File.DirInternal,"basedatos.sql")
End If
If SQL1.IsInitialized = False Then
SQL1.Initialize(File.DirInternal, "basedatos.sql", False)
End If
' Llama a la Subrutina para cargar la base de datos en el ListView1
Carga_BD_en_ListView
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Carga_BD_en_ListView
' Limpia el ListView1
ListView1.Clear
' Carga la tabla usuarios de la basedatos.sql
registro = SQL1.ExecQuery("SELECT * FROM usuarios")
For n = 0 To registro.RowCount - 1
registro.Position = n
ListView1.AddSingleLine(registro.GetString("Id") & "|" & registro.GetString("nombre")& " - " & registro.GetString("telefono"))
ListView1.SingleLineLayout.ItemHeight = 40
ListView1.SingleLineLayout.Label.TextSize = 20
ListView1.SingleLineLayout.Label.TextColor = Colors.Black
ListView1.SingleLineLayout.Label.Color = Colors.White
Next
End Sub
Sub Button1_Click
' Añadir Registro
nombre = EditText1.Text
telefono = EditText2.Text
If nombre = "" OR telefono = "" Then
Msgbox("Debes escribir el nombre y el teléfono.","Faltan datos.")
Else
' Busca el último Registro
registro = SQL1.ExecQuery("SELECT Id FROM usuarios")
If registro.RowCount > 0 Then
For n = 0 To registro.RowCount - 1
registro.Position = n
Dim otraId As Int
otraId = registro.GetInt("Id")
Next
End If
' Crea un nuevo Registro
otraId = otraId + 1
SQL1.ExecNonQuery("INSERT INTO usuarios VALUES('" & otraId & "','" & nombre & "','" & telefono & "')")
' Llama a la Subrutina para cargar la base de datos en el ListView1
Carga_BD_en_ListView
EditText1.Text = ""
EditText2.Text = ""
EditText1.RequestFocus
End If
End Sub
Sub Button2_Click
' Borrar Registro
SQL1.ExecNonQuery("DELETE FROM usuarios where Id = '" & Id & "' ")
' Llama a la Subrutina para cargar la base de datos en el ListView1
Carga_BD_en_ListView
EditText1.Text = ""
EditText2.Text = ""
End Sub
Sub Button3_Click
' Editar Registro
nombre = EditText1.Text
telefono = EditText2.Text
If nombre = "" OR telefono = "" Then
Msgbox("Debes rellenar los dos campos con datos.","Campos vacíos.")
Else
SQL1.ExecNonQuery("UPDATE usuarios set nombre ='"& nombre &"',telefono ='"& telefono &"' WHERE Id = " & Id)
' Llama a la Subrutina para cargar la base de datos en el ListView1
Carga_BD_en_ListView
End If
End Sub
Sub ListView1_ItemClick (Position As Int, Value As Object)
' Pulsa sobre un Registro
Dim pulsado As String
Dim lugar As Int
pulsado = Value
lugar = pulsado.IndexOf("|")
pulsado = pulsado.SubString2(0, lugar)
Id = pulsado
registro = SQL1.ExecQuery("SELECT * FROM usuarios where Id = '" & Id & "' ")
For n = 0 To registro.RowCount - 1
registro.Position = n
EditText1.text=registro.getString("nombre")
EditText2.text=registro.getString("telefono")
Next
End Sub
|
En la última parte del código anterior cambiar...
' For n = 0 To registro.RowCount - 1
registro.Position = 0
EditText1.text=registro.getString("nombre")
EditText2.text=registro.getString("telefono")
' Next
___________________________________________________________
2.- Otro código, en este caso no existe ListView, se ha sustituido por dos Botones (Button4 y Button5), para ver el registro siguiente o el anterior respectivamente.
Copia y pega este código en un nuevo proyecto |
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' febrero 2013
End Sub
Sub Globals
Dim SQL1 As SQL
Dim registro As Cursor
Dim EditText1, EditText2 As EditText
Dim nombre, telefono, nombre_actual As String
Dim Id As String
Dim k As Int
k = 0
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
If File.Exists(File.DirInternal,"basedatos.sql") = False Then
' Ponemos una base inicial de datos en la carpeta Files.
' Luego la copiamos en la memoria interna.
File.Copy(File.DirAssets,"basedatos.sql",File.DirInternal,"basedatos.sql")
End If
If SQL1.IsInitialized = False Then
SQL1.Initialize(File.DirInternal, "basedatos.sql", False)
End If
' Carga en registro toda la tabla usuarios
registro = SQL1.ExecQuery("SELECT * FROM usuarios")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Button1_Click
' Añadir Registro
nombre = EditText1.Text
telefono = EditText2.Text
If nombre = "" OR telefono = "" Then
Msgbox("Debes escribir el nombre y el teléfono.","Faltan datos.")
Else
' Busca el último Registro
registro = SQL1.ExecQuery("SELECT Id FROM usuarios")
If registro.RowCount > 0 Then
For n = 0 To registro.RowCount - 1
registro.Position = n
Dim otraId As Int
otraId = registro.GetInt("Id")
Next
End If
' Crea un nuevo Registro
otraId = otraId + 1
SQL1.ExecNonQuery("INSERT INTO usuarios VALUES('" & otraId & "','" & nombre & "','" & telefono & "')")
' Carga en registro toda la tabla usuarios
registro = SQL1.ExecQuery("SELECT * FROM usuarios")
EditText1.Text = ""
EditText2.Text = ""
EditText1.RequestFocus
End If
End Sub
Sub Button2_Click
' Borrar Registro
nombre = EditText1.Text
telefono = EditText2.Text
If nombre = "" OR telefono = "" Then
Msgbox("No hay nombre de usuario.","Faltan datos.")
Else
SQL1.ExecNonQuery("DELETE FROM usuarios where nombre = '" & nombre & "' ")
' Carga en registro toda la tabla usuarios
registro = SQL1.ExecQuery("SELECT * FROM usuarios")
EditText1.Text = ""
EditText2.Text = ""
End If
End Sub
Sub Button3_Click
' Editar Registro
nombre = EditText1.Text
telefono = EditText2.Text
If nombre = "" OR telefono = "" Then
Msgbox("Debes rellenar los dos campos con datos.","Campos vacíos.")
Else
SQL1.ExecNonQuery("UPDATE usuarios set nombre ='"& nombre &"',telefono ='"& telefono &"' WHERE nombre = '" & nombre_actual & "'")
' Carga en registro toda la tabla usuarios
registro = SQL1.ExecQuery("SELECT * FROM usuarios")
End If
End Sub
Sub Button4_Click
' Atrás
k = k - 1
If k < 0 Then k = 0
' registro = SQL1.ExecQuery("SELECT * FROM usuarios where Id = '" & k & "' ")
registro.Position = k
EditText1.Text = registro.GetString("nombre")
EditText2.Text = registro.GetString("telefono")
nombre_actual = EditText1.Text
End Sub
Sub Button5_Click
' Adelante
k = k + 1
If k > registro.RowCount - 1 Then k = registro.RowCount - 1
' registro = SQL1.ExecQuery("SELECT * FROM usuarios where Id = '" & k & "' ")
registro.Position = k
EditText1.Text = registro.GetString("nombre")
EditText2.Text = registro.GetString("telefono")
nombre_actual = EditText1.Text
End Sub
|
________________________________________________
3.- Imágenes en una base de datos SQLite.
En este caso se ha creado una base de datos que contiene imágenes, esta base de datos está en el directorio Files y es de SQLite.
Baja el código Blob1.zip de esta página. También aquí: Blob.zip
________________________________________________
4.- SQLite en un List y en un Spinner.
Ahora mediante el Designer creamos un Layout, lo llamaremos "Layout" y contendrá:
un Spinner1 y un Label1.
En la carpeta Files del proyecto copiamos la misma basedatos.sql de los ejemplos anteriores.
Con el Spinner podemos elegir el nombre de un usuario y saldrá su teléfono en el Label1.
|
|
Copia y pega este código en un nuevo proyecto |
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' junio 2013
End Sub
Sub Globals
Dim SQL1 As SQL
Dim registro As Cursor
Dim Spinner1 As Spinner
Dim Label1 As Label
Dim List1 As List
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
If File.Exists(File.DirInternal,"basedatos.sql") = False Then
' Ponemos una base inicial de datos en la carpeta Files.
' Luego la copiamos a la SD Card
File.Copy(File.DirAssets,"basedatos.sql",File.DirInternal,"basedatos.sql")
End If
If SQL1.IsInitialized = False Then
SQL1.Initialize(File.DirInternal, "basedatos.sql", False)
End If
' Llama a la Subrutina para cargar la base de datos en el List1
List1.Initialize
Carga_BD_en_List
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Carga_BD_en_List
' Limpia el List1
List1.Clear
' Carga la tabla usuarios de la basedatos.sql
registro = SQL1.ExecQuery("SELECT * FROM usuarios")
For n = 0 To registro.RowCount - 1
registro.Position = n
List1.Add(registro.GetString("telefono"))
Spinner1.Add(registro.GetString("nombre"))
Next
End Sub
Sub Spinner1_ItemClick (Position As Int , Value As Object )
Label1.Text = "Teléfono = " & List1.Get(Position)
End Sub |
________________________________________________
5.- Pasar los datos de una SQLite a un archivo de Excel de tipo CSV.
Esto consiste en que tenemos una base de datos SQLite, en nuestro ejemplo será la "basedatos.sql" y queremos pasarla a un archivo de tipo CSV, concretamente a "basedatos.csv",ya que este tipo de archivos los puede leer el Excel.
En los archivos de tipo CSV el separador de campos es el ";"
Para ello en el ejemplo anterior 4.- SQLite en un List y en un Spinner, agregamos un Button, le ponemos de texto "Pasar a CSV" y agregamos esté código al anterior...
Copia y pega este código al final del proyecto 4.- |
Sub Button1_Click()
Dim List2 As List
' Inicia el List2
List2.Initialize
' Carga la tabla usuarios de la basedatos.sql
registro = SQL1.ExecQuery("SELECT * FROM usuarios")
For n = 0 To registro.RowCount - 1
registro.Position = n
List2.Add(registro.GetString("Id") & ";" & registro.GetString("telefono") & ";" & registro.GetString("nombre"))
Next
File.WriteList(File.DirRootExternal, "basedatos.csv", List2)
End Sub |
Creamos un List2 y en él vamos agregando cada registro. Separamos los campos mediante ";"
Cuando ya ha recorrido todos los registros, guarda el List2 en el archivo "basedatos.csv" de la SdCard (DirRootExternal).
Para ver directamente el archivo obtenido basedatos.csv desde el terminal, tendríamos que conocer el tutorial de Linux en Android.
Abrimos un Terminal mediante el comando "cmd". Nos posicionamos en la carpeta donde esté el adb, probablemente...
C:\Android\android-sdk\platform-tools
cd C:\Android\android-sdk\platform-tools
C:\Android\android-sdk\platform-tools> adb shell
# cd /mnt/sdcard
# ls
basedatos.csv
# cat basedatos.csv
|
Para pasar el archivo basedatos.csv desde la SdCard a un archivo de Windows, abrimos otro terminal mediante el "cmd".
cd C:\Android\android-sdk\platform-tools
C:\Android\android-sdk\platform-tools> adb -e pull "/mnt/sdcard/basedatos.csv" "C:/Android/basedatos.csv"
|
________________________________________________
6.- Otro ejemplo de SQLite en los foros.
Hay un interesante ejemplo de SQLite sencillo en este foro.
Concretamente el ejemplo SQLiteLight1.zip
__________________
- Aplicación de SQLite.
Nota: en los tutoriales de B4A puedes bajar una aplicación (SQLiteViewer) que carga base de datos SQLite.
Presionamos el botón Menú del móvil y nos saldrá un explorador para elegir la base de datos con la que queremos trabajar.
Si no tienes ninguna, puedes crearte una con el programa que he puesto más arriba.
La base de datos la podemos poner en el tarjeta SDCard (Menu Internal Files Manager) es el Directorio: DirRootExternal
Ver tutorial.
________________________________
|