天天看點

qt連接配接mysql資料庫作業系統_Qt資料庫操作 連接配接SQLite和MySQL資料庫執行個體

http://www.sqlite.org/download.html

得到sqlite3.exe。即可.就可以操作資料庫了。

運作cmd到該指定的目錄下,使用如下指令:如

F:軟體學習軟體資料庫SQlitesqlite-3_6_17>sqlite3.exe test

并有以下提示:Enter SQL statements terminated with a ";"

就可以建立一個名為test的資料庫了.你可以使用.help指令檢視各指令.

.databases   可以得到所有的資料庫。

可以使用如下指令得到一張表,并插入資料。最後.quit退出.

F:軟體學習軟體資料庫SQlitesqlite-3_6_17> create table student(id varchar(10),name varchar(20),age smallint);

F:軟體學習軟體資料庫SQlitesqlite-3_6_17> select * from student;

F:軟體學習軟體資料庫SQlitesqlite-3_6_17> insert into student values('1001' , 'lovesizhao' ,26);

F:軟體學習軟體資料庫SQlitesqlite-3_6_17> select * from student;  1001|lovesizhao|26

F:軟體學習軟體資料庫SQlitesqlite-3_6_17> drop table student;

F:軟體學習軟體資料庫SQlitesqlite-3_6_17> .quit

而drop table student;   可以删除該表格.其實大部操作都屬于SQL的相同沒什麼改變.

也可以将該資料庫備份至output.sql,也稱為重定向

sqlite3.exe test.db3>output.sql

最後可以将資料庫儲存為test.db3即可。

下面講解如何通過Qt來通路剛才建立的資料庫:

QSqlDatabasedbconn=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=newQTableView();

model=newQSqlTableModel(this,dbconn);

model->setTable("test");

model->select();

view->setModel(model);

也可以直接通路記憶體得到:如

QSqlDatabasedb=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.nn"

"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:MySQLlibopt(而且這些目錄中間不能有空格,否則得不到libmysql.a

然後轉到Qt的目錄下(我的為D:Qt4.3.2srcpluginssqldriversmysql).

運作如下指令:

qmake -o Makefile "INCLUDEPATH+=D:MySQLlibinclude" "LIBS+=D:MySQLlibliboptLIBMYSQL.a" mysql.pro

mingw32-make

這樣就在D:Qt4.3.2pluginssqldrivers目錄下生成libqsqlmysql4.a和qsqlmysql4.dll了.

然後就是運作一個連接配接到mysql資料庫,測試是否成功.

QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql資料庫驅動

db.setHostName("localhost");

db.setDatabaseName("test"); // 我們之前建立的資料庫

db.setUserName("root"); // 我們建立的 yunfan 使用者名

db.setPassword("123"); // yunfan 使用者的密碼

boolok=db.open(); // 嘗試連接配接資料庫

if(ok) { // 這裡用yunfan已經成功連上資料庫

QSqlQuery query; // 建立一個查詢的執行個體

if(query.exec("select * from t_customer")){ // 嘗試列出 employee 表的所有記錄

// 本次查詢成功

intnumRows=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());

QStringresult=id;//+ " " + fname + lname + " " + (dob.toString()) + " "+phone;

display.append(result);

}

display.append("============================================");

display.append(QString("totally %1 rows").arg( numRows));

} else { // 如果查詢失敗,用下面的方法得到具體資料庫傳回的原因

QSqlErrorerror=query.lastError();

display.append("From mysql database: " + error.databaseText());

}

} else{ // 打開資料庫失敗,顯示資料庫傳回的失敗描述

display.append("cannot open database.");

display.append("Reason: " + db.lastError().databaseText());

}

這隻是其中一部分核心代碼.

小結:關于Qt資料庫操作 連接配接SQLite和MySQL資料庫執行個體的内容介紹完了,希望本文對你再學習過程中有所幫助!