Spanish ¿ Como creo una DB SQLite por codigo desde la propia APP ?

Discussion in 'Spanish Forum' started by Sergio Castellari, Jul 14, 2019 at 12:44 AM.

  1. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola gente,

    Necesito saber como puedo crear una DB SQLite desde la APP. De tal manera que al iniciar la APP, verifique la existencia de la DB, y si la misma no existe, la cree y que incluso pueda agregar informacion predeterminada.
    He estado buscando informacion sobre SQLite, pero todo lo que encuentro da por sentado que la DB ya existe.
    Quiero saber como agregar Tablas e indices, ademas de agregar, borrar y modificar registros. En principio la idea es para poder 'configurar' la APP con distintos parametros.

    Saludos,
    Sergio
     
  2. Enrique Gonzalez R

    Enrique Gonzalez R Well-Known Member Licensed User

    Sqlite es una base de tipo archivo por lo que tu puedes:

    Crearla con sql.initialize (pasa el tercer parametro como true)

    Verificar que existe con file.exists

    Crear las tablas mandado a llamar simples CREATE TABLE
     
    Sergio Castellari likes this.
  3. roberto64

    roberto64 Active Member Licensed User

    Tal vez estabas buscando esto
    Code:
    'check if the database already exists
            If File.Exists(File.DirInternal, "persons.db") = False Then
                
    'if not, initialize it 
                SQL1.Initialize(File.DirInternal, "persons.db"True)
                
    'and create it
                CreateDataBase
            
    Else
                
    'if yes, initialize it
                SQL1.Initialize(File.DirInternal, "persons.db"True)
            
    End If
    Private sub CreateDatabase()
    Private Query As String
        
        
    'create the database with 3 columns
        Query = "CREATE TABLE persons (FirstName TEXT, LastName TEXT, City TEXT)"
        SQL1.ExecNonQuery(Query)

        
    'Fill a few entries
        Query = "INSERT INTO persons VALUES (?, ?, ?)"
        SQL1.ExecNonQuery2(Query, 
    Array As Object("John""KENNEDY""New York"))
        SQL1.ExecNonQuery2(Query, 
    Array As Object("Peter""FALK""Los Angeles"))
        SQL1.ExecNonQuery2(Query, 
    Array As Object("Jack""LONDON""Seattle"))
        SQL1.ExecNonQuery2(Query, 
    Array As Object("Ronald""REGAN""Los Angeles"))
    End Sub
    Saludos,
    Roberto
    Sergio
     
    Sergio Castellari likes this.
  4. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola @Enrique Gonzalez R y @roberto64 !!!

    ¡ Exactamente esto es lo que queria implementar !
    He visto por ahi, que se debe hacer desde [starter] ¿Es lo correcto?
    ¿La carpeta ideal para que tenga persistencia en el tiempo es File.DirInternal ? ¿Y el tema permisos de Android es necesario?

    Arme este codigo y funciona!!!

    Code:
    Sub Process_Globals
       
    'These global variables will be declared once when the application starts.
       'These variables can be accessed from all modules.
      Dim DB         As SQL
      
    Dim DBFileDir  As String = File.DirInternal
      
    Dim DBFileName As String = "APP.db"
    End Sub

    Sub Service_Create
       
    'This is the program entry point.
       'This is a good place to load resources that are not specific to a single activity.
      If File.Exists(DBFileDir, DBFileName) Then
        
    'ReadData
           Log("DB existente...")
      
    Else
        CreateDB
      
    End If

    End Sub

    Sub CreateDB
       
    Try
        DB.Initialize(DBFileDir, DBFileName, 
    True)
        DB.ExecNonQuery(
    "Create Table PARAMETROS (APPNOMBRE Text, VERSION Integer)"'refer section 2.1.3 of SQL Booklet regarding INTEGER Primary Key
        DB.ExecNonQuery("Insert Into PARAMETROS (APPNOMBRE,VERSION) Values ('TomaEstado','1')")
           
    Log("DB creada correctamente !!!")
       
    Catch
           LogColor(
    "[Starter] CreateDB: " & LastException.Message, Colors.Red)
       
    End Try
    End Sub
    ¿Esta bien lo que codifique o le falta algun control o verificación?

    Saludos y muchas gracias!!!
    Sergio
     
  5. Enrique Gonzalez R

    Enrique Gonzalez R Well-Known Member Licensed User

    Que tal @Sergio Castellari, si dirinternal es el correcto, de la misma forma tu código para crear la base está bien.
     
  6. rscheel

    rscheel Well-Known Member Licensed User

    Hola, espero te sirva esto

    Code:
    Dim s As SQL
    ruta = 
    File.DirInternal
    s.Initialize(ruta, 
    "datosavl.db3"True)
    CreaTablas

    Sub CreaTablas
        
    'Crea Tablas Base de datos si no existen
                
        s.ExecNonQuery(
    $"CREATE TABLE IF NOT EXISTS tareas (
                          id_tarea INTEGER PRIMARY KEY AUTOINCREMENT,
                          nombre_tarea TEXT,
                          id_em INTEGER,
                          nombre_em TEXT,
                          fecha DATETIME);"$
    )

    End Sub
     
    Sergio Castellari likes this.
  7. Sergio Castellari

    Sergio Castellari Member Licensed User

    Hola @rscheel !!!

    Muchas gracias, veo que hay varias formas de crear Tablas. Aqui tu la creas usando un Query desde otra forma. ¿Que significa que le coloques el signo $ antes y al final ?. Ademas veo que le colocas el ;. ESA FORMA yo la utilizo (de forma similar) cuando lo utilizo en MySQL desde un utilitario.

    Saludos,
    Sergio
     
  8. rscheel

    rscheel Well-Known Member Licensed User

    El signo peso es para string literal, te permite crear varias lineas sin necesidad de concatenar, el ";" es para terminar el query, básicamente SQLite es similar a MySql, por decir "CREATE TABLE" es la sentencia para crear la tabla a través de query directamente, yo uso esa forma, siempre me ha funcionado bien.

    Ademas esta forma te permite ir agregando las tablas a medida de que avanza tu proyecto, incluso podrías colocar versiones de base de datos, donde puedas agregar campos a una tabla etc.

    Espero te sirva, lo mejor es siempre usar el método que mas te acomode, en este caso hay varias formas distintas de hacer lo mismo.
     
    Sergio Castellari likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice