SQLite

SQLite

SQLite è una libreria che permette di creare una base di dati (comprese tabelle, query…) inoltre può essere incorporato all’interno di un altro programma. Un breve elenco delle caratteristiche ma anche alcune limitazioni di SQLite.

  • è in grado di interpretare buona parte delle stringhe SQL;
  • è multipiattaforma;
  • supporta database che possono essere anche molto grandi; attualmente il limite è 2TB;
  • un database consiste di un unico file, il cui formato interno è indipendente dalla piattaforma e dal relativo ordine dei byte;
  • esistono binding con diversi tipi di linguaggi;

SQLite presenta dei limiti una serie di limiti da prendere seriamente in considerazione prima di iniziarlo ad utilizzare:

  • non prevede le stored procedure;
  • non prevede la gestione dei permessi d’accesso. Tutto demandato al software che lo utilizza;
  • non ha una cache per le query. Tutto demandato al software che lo utilizza;
  • non consente di modificare, cancellare o rinominare le colonne di una tabella;
  • non ha una gestione della concorrenza;
  • per garantire la coerenza del file del database sono usati i lock del file system;

Per maggiori dettagli sulle limitazioni e caratteristiche : https://www.sqlite.org/docs.html

Per la creazione del database e le sue tabelle è stato utilizzato il client scaricato da http://sqlitebrowser.org/

Di seguito una breve integrazione di SQLite con C# .net:

using System.Data.SQLite;
//|DataDirectory| indentifica il path in App_Data
var strconn="Data Source=|DataDirectory|ProjectDB.db; Version=3; FailIfMissing=True; Foreign Keys=True;"
using (SQLiteConnection conn = new SQLiteConnection(strconn,true))
{
      conn.Open();
      using (SQLiteCommand cmd = new SQLiteCommand(conn))
      {
            string sql =  "SELECT * FROM Users WHERE firstName = @strFirstName ";
            cmd.CommandText = sql;
            cmd.Prepare();
            cmd.Parameters.AddWithValue("@strFirstName ", "Luca");
            using (SQLiteDataReader reader = cmd.ExecuteReader())
            {
           while (reader.Read())
           {
         userId = reader["userId"].ToString();
         .......
         .......
          	}
            }
      }
      conn.Close();
}

SQLite dalle sue ultime versioni consente di gestire anche i campi di tipo json. Di seguito alcuni esempi di creazione record e lettura:

--inserimento record con campo json
insert into users (nome, telefono) values("Luca", json('{"cell":"+3922222333222", "casa":"+393453524324234"}'));

--select di un campo json 
select users.telefonofrom users where users.nome=='Luca'
risultato: {"cell":"+3922222333222","casa":"+393453524324234"}

--select di una property specifica all'interno di un campo json
select json_extract(users.telefono, '$.cell') from users;
risultato: +3922222333222

--where su una property del campo json
SELECT users.* from users, json_each(users.telefono) 
WHERE json_extract(value, '$.casa') = "+393453524324234"