前沿

QT中,已经内置了一个专门为数据库操作的库,并且QSqlQuery提供了执行SQL语句并返回结果。并提供了抽象层的QSqlTableModel和QSqlRelationalTableModel。

层次 描述
驱动层 数据库与SQL接口底层桥接,如QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin、QSqlResult
SQL接口层 QSqlDatabase类提供了数据库访问类、数据库连接操作,QSqlQuery类提供了与数据库的交互操作,还有QSqlError、QSqlField、QSqlTableModel、QSqlRecord
用户接口层 提供从数据库数据到用于数据表示的窗体映射,包括QSqlQueryModel、QSqlTableModel、QSqlRelationalTabl

SQLite

基于C语言,已经广泛应用各行业。可以直接读写硬盘数据,也可存在内存中,无须服务器进程或引擎。开源,代码量少,注释多。占用内存极少。支持视图、触发器和事务,支持嵌套SQL。提供虚拟机处理SQL语句。不配置、不安装。编程接口易用。

基本使用,插入,更新,删除,查找

pro文件上 QT += sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
QSqlDatabase db;
if (QSqlDatabase::contains("qt_sql_default_connection")) //默认库名,如果存在 不需要再设置
{
db = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
db = QSqlDatabase::addDatabase("QSQLITE");//第二个参数可以填一个char *类型,方便下次使用,下次可以用上面的方法直接取到该数据库,而且一个程序中,不需要多次打开库。
db.setHostName("localhost");
db.setDatabaseName("database.db");
db.setUserName("root");
db.setPassword("123456");
}
if (!db.open())
{
qDebug() << "open false:" << db.lastError();
}
QSqlQuery sqlQuery;
qDebug()<<sqlQuery.exec("drop table girlfriend");
qDebug()<<sqlQuery.exec("create table girlfriend (id int primary key,name varchar(50),money double)");//建表

qDebug()<<sqlQuery.exec("insert into girlfriend values(1,'ming',6.66)");
qDebug()<<sqlQuery.exec("insert into girlfriend values(2,'ning',8.88)");
qDebug()<<sqlQuery.prepare("insert into girlfriend values(?,?,?)");
sqlQuery.bindValue(0,3);
sqlQuery.bindValue(1,"ling");
sqlQuery.bindValue(2,9.99);
sqlQuery.exec();

sqlQuery.exec(QString("update girlfriend set money=%1 where name = 'ling'").arg(99.99));

sqlQuery.exec("delete from girlfriend where id = 1");

qDebug()<<sqlQuery.exec("select * from girlfriend");
while(sqlQuery.next()){
qDebug()<<sqlQuery.value(0)<<sqlQuery.value(1)<<sqlQuery.value(2);
}

当前支持数据库

驱动 数据库管理系统
QDB2 IBM DB2及以上
QIBASE Borland InterBase
QMYSQL MySQL
QOCI Oracle call Interface Driver
QODBC ODBC包括微软SQL Server和其它兼容ODBC
QPSQL PostgreSQL 6和7
QSQLITE 3及以上
QSQLITE2 2
QTDS Sybase Adaptive Server