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

    QString privatePathQt(QApplication::applicationDirPath());
    QString path(privatePathQt);
    path.append(QDir::separator()).append("sqlite");
    path = QDir::toNativeSeparators(path);
 
#ifdef Q_WS_SIMULATOR
    path = "sqlite"
#endif
 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    qDebug() << path;
    db.setDatabaseName(path); 
    bool ok = db.open();
    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

    QDeclarativeView *declarativeView = new QDeclarativeView(this);
 
#ifdef Q_WS_SIMULATOR
    declarativeView->engine()->setOfflineStoragePath("sqlite");
#else
    QString privatePathQt(QApplication::applicationDirPath());
    QString pathOfflineStorage(privatePathQt);
    pathOfflineStorage.append(QDir::separator()).append("sqlite");
    pathOfflineStorage = QDir::toNativeSeparators(pathOfflineStorage);
    declarativeView->engine()->setOfflineStoragePath(pathOfflineStorage);
#endif
    declarativeView->setSource(QUrl::fromLocalFile("qml/Starter.qml"));
    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:

function apriDatabase()
{
    var db = openDatabaseSync("db_release", "1.0", "The Example QML SQL!", 1000000);
    return db;
}
 
function caricaListaRecord
{
    var db = apriDatabase();
    var arrOut = new Array();
 
    db.transaction(
        function(tx) {
            var strSql = "SELECT * FROM tabella";
            var rs = tx.executeSql(strSql);
            console.log(strSql)
 
            for(var i = 0; i < rs.rows.length; i++) {
                arrOut.push(rs.rows.item(i))
            }
 
        }
    )
    return arrOut;
}