Qt For Androidデータベース操作
Qt For Androidデータベース操作
作者:qyvlik
Qtのデータベース操作は、
Qt Quick Local Storage
このモジュールはw 3 cのWebデータベース規格を実現している.
HTML 5のローカルストレージであるWeb SQLデータベースを参照してください.
Web SQL Database仕様が廃棄されたため、現在のSQL仕様はSQLiteのSQL方言を採用していることが明らかになったが、一つの基準としては受け入れられない.ブラウザごとに独自の実現があるのはまだ毛の生えた基準だ.
もちろん、
インタフェースの説明
データベースを開く
W 3 C規格では、以下のようにデータベースを開くインタフェースについて説明する.
データベース・オブジェクトDatabaseSync
同期データベースオブジェクトのW 3 Cインタフェースの説明は以下の通りです.
したがって、
SQL文オブジェクトSQLTransactionSyncの実行
SQL文を実行して返される結果オブジェクトSQLResultSet
SQLの実行後にエラーを報告
SQL例外
下記は
次に、
QtSql
QSqlDatabase
一般的な操作:
データベース・ファイルの作成
データベースを開き、SQL操作を実行
QSqlQuery
一般的な関数:
検索
この文の実行が完了すると、対応する実行結果が得られます.取得された結果は1つの記録だけではない可能性があるため、結果セットと呼ばれます.
結果セットを巡回するには、次の文を使用します.
その他の詳細なドキュメントは、Qtヘルプドキュメントを参照するか、次の文書を参照してください.
Qtデータベースまとめ
本人githubプロジェクトA-week-to-develop-android-app-planから
作者:qyvlik
Qtのデータベース操作は、
sqlite
データベースドライバが内蔵されているため、一般的なアプリケーションでは、いくつかのニーズに簡単に対応できます.Qt Quick Local Storage
QML
は、QtQuick.LocalStorage
データベースを操作するためのsqlite
モジュールを提供する.非同期はサポートされていません.このモジュールはw 3 cのWebデータベース規格を実現している.
HTML 5のローカルストレージであるWeb SQLデータベースを参照してください.
Web SQL Database仕様が廃棄されたため、現在のSQL仕様はSQLiteのSQL方言を採用していることが明らかになったが、一つの基準としては受け入れられない.ブラウザごとに独自の実現があるのはまだ毛の生えた基準だ.
もちろん、
QML
の世界では心配する必要はありません.Qtは統一的な実現基準を用いて,プラットフォームの無関係性を示した.インタフェースの説明
QtQuick.LocalStorage
モジュールは非同期のWeb SQLデータベースを実現する.データベースを開く
W 3 C規格では、以下のようにデータベースを開くインタフェースについて説明する.
[Supplemental, NoInterfaceObject]
interface WindowDatabase {
Database openDatabase(in DOMString name,
in DOMString version,
in DOMString displayName,
in unsigned long estimatedSize,
in optional DatabaseCallback creationCallback);
};
Window implements WindowDatabase;
[Supplemental, NoInterfaceObject]
interface WorkerUtilsDatabase {
Database openDatabase(in DOMString name,
in DOMString version,
in DOMString displayName,
in unsigned long estimatedSize,
in optional DatabaseCallback creationCallback);
DatabaseSync openDatabaseSync(in DOMString name,
in DOMString version,
in DOMString displayName,
in unsigned long estimatedSize,
in optional DatabaseCallback creationCallback);
};
WorkerUtils implements WorkerUtilsDatabase;
[Callback=FunctionOnly, NoInterfaceObject]
interface DatabaseCallback {
void handleEvent(in Database database);
};
QtQuick.LocalStorage
モジュールは、openDatabaseSync
メソッドを実装し、データベース・オブジェクトのハンドルを返します.object openDatabaseSync(string name,
string version,
string description,
int estimated_size,
jsobject callback(db))
データベース・オブジェクトDatabaseSync
同期データベースオブジェクトのW 3 Cインタフェースの説明は以下の通りです.
interface DatabaseSync {
void transaction(in SQLTransactionSyncCallback callback);
void readTransaction(in SQLTransactionSyncCallback callback);
readonly attribute DOMString version;
void changeVersion(in DOMString oldVersion,
in DOMString newVersion,
in optional SQLTransactionSyncCallback callback);
};
[Callback=FunctionOnly, NoInterfaceObject]
interface SQLTransactionSyncCallback {
void handleEvent(in SQLTransactionSync transaction);
};
したがって、
LocalStorage::openDatabaseSync
が返されるオブジェクトにはtransaction
,readTransaction
,changeVersion
のインタフェースがある.SQL文オブジェクトSQLTransactionSyncの実行
SQL
文を同期して実行するオブジェクトのW 3 Cの説明を以下に示す.// typedef sequence<any> ObjectArray;
interface SQLTransactionSync {
SQLResultSet executeSql(in DOMString sqlStatement, in optional ObjectArray arguments);
};
SQL文を実行して返される結果オブジェクトSQLResultSet
SQL
文オブジェクトの戻り結果を実行するW 3 Cの説明を以下に示す.interface SQLResultSet {
readonly attribute long insertId;
readonly attribute long rowsAffected;
readonly attribute SQLResultSetRowList rows;
};
interface SQLResultSetRowList {
readonly attribute unsigned long length;
getter any item(in unsigned long index);
};
SQLResultSetRowList
は、item
によって対応する下付き文字のデータを取得することができる.SQLの実行後にエラーを報告
SQL
後報エラーオブジェクトのW 3 C記述を実行します.interface SQLError {
const unsigned short UNKNOWN_ERR = 0;
const unsigned short DATABASE_ERR = 1;
const unsigned short VERSION_ERR = 2;
const unsigned short TOO_LARGE_ERR = 3;
const unsigned short QUOTA_ERR = 4;
const unsigned short SYNTAX_ERR = 5;
const unsigned short CONSTRAINT_ERR = 6;
const unsigned short TIMEOUT_ERR = 7;
readonly attribute unsigned short code;
readonly attribute DOMString message;
};
SQL例外
SQL
の例外オブジェクトのW 3 C記述を実行します.exception SQLException {
const unsigned short UNKNOWN_ERR = 0;
const unsigned short DATABASE_ERR = 1;
const unsigned short VERSION_ERR = 2;
const unsigned short TOO_LARGE_ERR = 3;
const unsigned short QUOTA_ERR = 4;
const unsigned short SYNTAX_ERR = 5;
const unsigned short CONSTRAINT_ERR = 6;
const unsigned short TIMEOUT_ERR = 7;
unsigned short code;
DOMString message;
};
下記は
QML
でテストしたコードです.//!
var db = LocalStorage.openDatabaseSync("QQmlExampleDB", "1.0", "The Example QML SQL!", 1000000);
db.transaction(
function(tx) {
//
tx.executeSql('CREATE TABLE IF NOT EXISTS Greeting(salutation TEXT, salutee TEXT)');
//
tx.executeSql('INSERT INTO Greeting VALUES(?, ?)', [ 'hello', 'world' ]);
// Show all added greetings
//! rs is SQLResultSet type
var rs = tx.executeSql('SELECT * FROM Greeting');
var r = ""
for(var i = 0; i < rs.rows.length; i++) {
//! rs.rows is SQLResultSetRowList type
r += rs.rows.item(i).salutation + ", " + rs.rows.item(i).salutee + "
"
}
console.log(r);
});
次に、
LocalStorage::openDatabaseSync
を使用してデータベースを開き、生成されたデータベースファイルのパスはQQmlEngine::offlineStoragePath
で取得できます.qmlscene.exe
を使用して実行される場合、そのデータベースパスはC:\Users\Administrator\AppData\Local\QtProject\QtQmlViewer\QML\OfflineStorage\Databases
です.パソコンによって異なる場合がありますが、ご参考までに.QtSql
QSqlDatabase
一般的な操作:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //
db.setHostName("localhost"); //
db.setDatabaseName("test"); //
db.setUserName("root"); //
db.setPassword("123456"); //
db.open(); //
db.close(); //
データベース・ファイルの作成
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db"); // ,
データベースを開き、SQL操作を実行
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db"); // ,
if(!db.open()) return false;
QSqlQuery query;
//id , ,
query.exec("create table Login(id INTEGER PRIMARY KEY autoincrement, " "goods int, store int, time nvarchar(50), type int, place nvarchar(50),temperature nvarchar(10) )"); query.exec("insert into Login values( 1,NULL , NULL,NULL, NULL,NULL,NULL )"); query.exec("insert into Login values( 2,NULL , NULL,NULL, NULL,NULL,NULL )"); query.exec("insert into Login values( 3,NULL , NULL,NULL, NULL,NULL,NULL )"); query.exec("insert into Login values( 4,NULL , NULL,NULL, NULL,NULL,NULL )"); query.exec("insert into Login values( 5,NULL , NULL,NULL, NULL,NULL,NULL )"); query.exec("insert into Login values( 6,NULL , NULL,NULL, NULL,NULL,NULL )");
QSqlQuery
一般的な関数:
seek(int n); // query n 。
first(); // query 。
last(); // query 。
next(); // query , , 。
previous(); // query , , 。
record(); // 。
value(int n); // 。 , 。
検索
// student student(text name, int age)
query.exec(“select * from student”);
この文の実行が完了すると、対応する実行結果が得られます.取得された結果は1つの記録だけではない可能性があるため、結果セットと呼ばれます.
結果セットを巡回するには、次の文を使用します.
while(query.next()) {
QString name = query.value(0).toString(); // "name" "justin",value(i) i ,0 name,1 age
int id = query.value(1).toInt();
// query.value("age").toInt();
// query.value("name").toString();
}
その他の詳細なドキュメントは、Qtヘルプドキュメントを参照するか、次の文書を参照してください.
Qtデータベースまとめ
本人githubプロジェクトA-week-to-develop-android-app-planから