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来访问刚才建立的数据库:

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.\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数据库,测试是否成功.

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数据库实例的内容介绍完了,希望本文对你再学习过程中有所帮助!