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_SIMULATORpath = "sqlite"
#endifQSqlDatabase 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_SIMULATORdeclarativeView->engine()->setOfflineStoragePath("sqlite");
#elseQString privatePathQt(QApplication::applicationDirPath());
QString pathOfflineStorage(privatePathQt);
pathOfflineStorage.append(QDir::separator()).append("sqlite");
pathOfflineStorage = QDir::toNativeSeparators(pathOfflineStorage);
declarativeView->engine()->setOfflineStoragePath(pathOfflineStorage);
#endifdeclarativeView->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;
}

