Mangiare Senza Glutine disponibile su App Store

Per altre informazioni scrivi a fabriziocaldarelli@negusweb.it

Database SQLite in Qt Symbian e QML

Da Programmazione Software.

L'accesso a database SQLite in Qt può essere fatto in 2 modi.

1) Tramite Qt puro. In questo caso, nel file .pro va specificata innanzitutto la posizione del file .sqlite e cioè:

sqlite_folder.source = sqlite
DEPLOYMENTFOLDERS += sqlite_folder

la cartella "sqlite" è la cartella dove andremo a salvare il file nome_db.sqlite.

Inoltre, sempre nel file .pro ricordatevi di aggiungere

QT += sql 

per collegare le librerie SQL al progetto.

Dopodichè per usare il database

  1.     QString privatePathQt(QApplication::applicationDirPath());
  2.     QString path(privatePathQt);
  3.     path.append(QDir::separator()).append("sqlite");
  4.     path = QDir::toNativeSeparators(path);
  5.  
  6. #ifdef Q_WS_SIMULATOR
  7.     path = "sqlite"
  8. #endif
  9.  
  10.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  11.     qDebug() << path;
  12.     db.setDatabaseName(path); 
  13.     bool ok = db.open();
  14.     qDebug() << db.tables();

da notare la condizione di compilazione in cui non si va a specificare il percorso assoluto nel caso in cui si usi il simulatore


2) Tramite QML puro. Nel file .pro va sempre specificata la posizione del file .sqlite e cioè:

sqlite_folder.source = sqlite
DEPLOYMENTFOLDERS += sqlite_folder

la cartella "sqlite" dovrà avere NECESSARIAMENTE al suo interno la sottocartella "Databases", dove andremo a salvare il file nome_db.sqlite.

Inoltre, a differenza del metodo 1), qui i files dovranno essere 2 ed impostati in questo modo:

md5(nome_db).sqlite
md5(nome_db).ini

e cioè il nome del db (che richiameremo nel file QML) dovrà essere salvato con il relativo md5.

Cioè, se ad esempio il nome del file è pippo.sqlite, il nome del file da salvare in "sqlite\Databases" sarà

0c88028bf3aa6a6a143ed846f2be1ea4.sqlite

In file .ini, con lo stesso nome del precedente, dovrà contenere al suo interno 6 righe:

[General]
Name=<nome_db>
Version=1.0
Description=<descrizione a piacimento>
EstimatedSize=1000000
Driver=QSQLITE

Inoltre, sempre nel file .pro ricordatevi di aggiungere

QT += sql 

per collegare le librerie SQL al progetto.

Dopodichè per usare il database

  1.     QDeclarativeView *declarativeView = new QDeclarativeView(this);
  2.  
  3. #ifdef Q_WS_SIMULATOR
  4.     declarativeView->engine()->setOfflineStoragePath("sqlite");
  5. #else
  6.     QString privatePathQt(QApplication::applicationDirPath());
  7.     QString pathOfflineStorage(privatePathQt);
  8.     pathOfflineStorage.append(QDir::separator()).append("sqlite");
  9.     pathOfflineStorage = QDir::toNativeSeparators(pathOfflineStorage);
  10.     declarativeView->engine()->setOfflineStoragePath(pathOfflineStorage);
  11. #endif
  12.     declarativeView->setSource(QUrl::fromLocalFile("qml/Starter.qml"));
  13.     declarativeView->showFullScreen();

da notare la condizione di compilazione in cui non si va a specificare il percorso assoluto nel caso in cui si usi il simulatore

Nel file QML avremo:

  1. function apriDatabase()
  2. {
  3.     var db = openDatabaseSync("db_release", "1.0", "The Example QML SQL!", 1000000);
  4.     return db;
  5. }
  6.  
  7. function caricaListaRecord
  8. {
  9.     var db = apriDatabase();
  10.     var arrOut = new Array();
  11.  
  12.     db.transaction(
  13.         function(tx) {
  14.             var strSql = "SELECT * FROM tabella";
  15.             var rs = tx.executeSql(strSql);
  16.             console.log(strSql)
  17.  
  18.             for(var i = 0; i < rs.rows.length; i++) {
  19.                 arrOut.push(rs.rows.item(i))
  20.             }
  21.  
  22.         }
  23.     )
  24.     return arrOut;
  25. }
Strumenti personali
hobby
approfondimenti