Qt數據庫操作 連接SQLite和MySQL數據庫實例
Qt數據庫操作 連接SQLite和MySQL數據庫實例是本文要介紹的內容,本來對于數據庫的操作,本人也是有點感冒,那么我們一起來看這篇文章。
下載SQLite數據庫
首先到SQLite官方網站下載:
http://www.sqlite.org/download.html
得到sqlite3.exe。即可.就可以操作數據庫了。
運行cmd到該指定的目錄下,使用如下命令:如
F:\軟件\學習軟件\數據庫\SQlite\sqlite-3_6_17>sqlite3.exe test
并有以下提示:Enter SQL statements terminated with a ";"
就可以創建一個名為test的數據庫了.你可以使用.help命令查看各命令.
.databases 可以得到所有的數據庫。
可以使用如下命令得到一張表,并插入數據。***.quit退出.
F:\軟件\學習軟件\數據庫\SQlite\sqlite-3_6_17> create table student(id varchar(10),name varchar(20),age smallint);
F:\軟件\學習軟件\數據庫\SQlite\sqlite-3_6_17> select * from student;
F:\軟件\學習軟件\數據庫\SQlite\sqlite-3_6_17> insert into student values('1001' , 'lovesizhao' ,26);
F:\軟件\學習軟件\數據庫\SQlite\sqlite-3_6_17> select * from student; 1001|lovesizhao|26
F:\軟件\學習軟件\數據庫\SQlite\sqlite-3_6_17> drop table student;
F:\軟件\學習軟件\數據庫\SQlite\sqlite-3_6_17> .quit
而drop table student; 可以刪除該表格.其實大部操作都屬于SQL的相同沒什么改變.
也可以將該數據庫備份至output.sql,也稱為重定向
- sqlite3.exe test.db3 >output.sql
***可以將數據庫保存為test.db3即可。
下面講解如何通過Qt來訪問剛才建立的數據庫:
- QSqlDatabase dbconn = QSqlDatabase::addDatabase("QSQLITE", "testSQLite");
- dbconn.setDatabaseName("test.db3"); //當前目錄下的test.db3數據庫文件
- //SQLite數據庫文件可用SQLite的命令行工具(c:\sqlite3.exe 數據庫名)或用SQLite GUI工具創建,SQLiteSpy
- if(!dbconn.open())
- {
- return;
- }
- QTableView *view;
- QSqlTableModel *model;
- view = new QTableView();
- model = new QSqlTableModel(this,dbconn);
- model->setTable("test");
- model->select();
- view->setModel(model);
- 也可以直接訪問內存得到:如
- QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- db.setDatabaseName(":memory:");
- if (!db.open()) {
- QMessageBox::critical(0, qApp->tr("Cannot open database"),
- qApp->tr("Unable to establish a database connection.\n"
- "This example needs SQLite support. Please read "
- "the Qt SQL driver documentation for information how "
- "to build it.\n\n"
- "Click Cancel to exit."), QMessageBox::Cancel);
- return false;
- }
- QSqlQuery query;
- query.exec("create table person (id int primary key, "
- "firstname varchar(20), lastname varchar(20))");
- query.exec("insert into person values(101, 'Danny', 'Young')");
- query.exec("insert into person values(102, 'Christine', 'Holand')");
- query.exec("create table images (locationid int, file varchar(20))");
- query.exec("insert into images values(0, 'images/oslo.png')");
- query.exec("insert into images values(1, 'images/brisbane.png')");
以下的操作只是往數據庫中添加數據的插入操作.如果想進一步學習,請查找相當資料。
在這里我還提拱和種可以訪問mysql的方法.
首先要在Qt安裝好mysql的插件.
去網上下載:mingw-utils-0.3
然后將解包后在其bin目錄下找到reimp.exe,拷貝到mingw的bin目錄下。而且要將mingw的bin目錄加到classpath下.
則可以在cmd下使用如下命令:
- t> reimp -d libmysql.lib
- t>dlltool -k -d libmysql.def -l libmysql.a
注意:t的目錄是mysql安裝目錄下。我的目錄為D:\MySQL\lib\opt(而且這些目錄中間不能有空格,否則得不到libmysql.a
然后轉到Qt的目錄下(我的為D:\Qt\4.3.2\src\plugins\sqldrivers\mysql).
運行如下命令:
- qmake -o Makefile "INCLUDEPATH+=D:\MySQL\lib\include" "LIBS+=D:\MySQL\lib\lib\opt\LIBMYSQL.a" mysql.pro
- mingw32-make
這樣就在D:\Qt\4.3.2\plugins\sqldrivers目錄下生成libqsqlmysql4.a和qsqlmysql4.dll了.
然后就是運行一個連接到mysql數據庫,測試是否成功.
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql數據庫驅動
- db.setHostName("localhost");
- db.setDatabaseName("test"); // 我們之前建立的數據庫
- db.setUserName("root"); // 我們創建的 yunfan 用戶名
- db.setPassword("123"); // yunfan 用戶的密碼
- bool ok = db.open(); // 嘗試連接數據庫
- if(ok) { // 這里用yunfan已經成功連上數據庫
- QSqlQuery query; // 新建一個查詢的實例
- if(query.exec("select * from t_customer")){ // 嘗試列出 employee 表的所有記錄
- // 本次查詢成功
- int numRows = 0; // 詢問數據庫驅動,是否驅動含有某種特性
- if(db.driver()->hasFeature(QSqlDriver::QuerySize)){
- numRows = query.size(); // 如果支持結果影響的行數,那么直接記錄下來
- } else {
- query.last(); //否則定位到結果***,qt 文檔說,這個方法非常慢
- numRows = query.at() + 1;
- }
- QString id, lname, fname, phone;
- QDateTime dob;
- display.append("===========================================");
- display.append(QString::fromLocal8Bit(" account | password | cname | cbalance"));
- display.append("--------------------------------------");
- while(query.next()) { // 定位結果到下一條記錄
- id = query.value(0).toString();
- //lname = QString::fromLocal8Bit(query.value(1).toByteArray());
- //fname = QString::fromLocal8Bit(query.value(2).toByteArray());
- //dob = query.value(3).toDateTime();
- //phone = QString::fromLocal8Bit(query.value(4).toByteArray());
- QString result = id ;//+ " " + fname + lname + " " + (dob.toString()) + " "+phone;
- display.append(result);
- }
- display.append("============================================");
- display.append(QString("totally %1 rows").arg( numRows));
- } else { // 如果查詢失敗,用下面的方法得到具體數據庫返回的原因
- QSqlError error = query.lastError();
- display.append("From mysql database: " + error.databaseText());
- }
- } else{ // 打開數據庫失敗,顯示數據庫返回的失敗描述
- display.append("cannot open database.");
- display.append("Reason: " + db.lastError().databaseText());
- }
這只是其中一部分核心代碼.
小結:關于Qt數據庫操作 連接SQLite和MySQL數據庫實例的內容介紹完了,希望本文對你再學習過程中有所幫助!