- 查询系统所支持的驱动
- 创建空的Qt项目:新建文件-其他项目-Empty qmake Project
- 要在pro文件中加上
QT+=sql widgets
- 创建一个cpp文件,代码如下
#include <QApplication>
#include <QSqlDatabase>
#include <Qdebug>
#include <QStringList>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach (QString driver, drivers) {
qDebug() << driver;
}
return a.exec();
}
可以在输出中查看系统所支持的驱动;
数据库链接使用连接名来定义,而不是使用数据库名,可以向相同的数据库创建多个链接。
如果链接的时候并没有指定连接名,则使用默认链接。如果应用程序只需要有一个数据库链接,那么使用默认链接还是很方便的。
QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL", "first");//first连接名
QSqlDatabase secondDb = QSqlDatabase::addDatabase("QMYSQL", "second");//second连接名
QSqlDatabase defaultDB = QSqlDatabase::database();//返回默认的链接
QSqlDatabase firstDBB = QSqlDatabase::database("first");//返回first连接名的数据库
QSqlDatabase secondDBB = QSqlDatabase::database("second");//返回second连接名的数据库
QSqlDatabase::close()用来关闭数据库,关闭之后用QSqlDatabase::removeDatabase()来移除链接。
- 创建表格并连接
- 先创建空项目.项目名称为connection.h
- pro添加
QT+=sql widgets
表名引用sql模块
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//创建SQLITE数据库的默认链接
db.setDatabaseName(":memory:");//设置数据库名称时使用了":memory:"表示是建立在内容中的数据库。(SQlite支持内存中的临时数据库)
if(! db.open()){
QMessageBox::critical(0, "Cannot open database", "Unable to establish a database"
"connection", QMessageBox::Cancel);
return false;
}
QSqlQuery query;
query.exec("create table student (id int primary key,"
"name varchar(20))");//创建一个student表,并插入了id和name 2个字段,其中id字段是Int类型 primary key表示该字段为主键,不能为空且不能有重复值,name字段为varchar类型,并且限定不能大于20个字符
query.exec("insert into student values(0, 'LiMing')");//插入内容
query.exec("insert into student values(1, 'LiuTao')");//插入内容
query.exec("insert into student values(2, 'WangHong')");//插入内容
return true;
}
#endif // CONNECTION_H
3.创建cpp文件
#include <QApplication>
#include <QDebug>
#include <QStringList>
#include "connection.h"
#include <QVariant>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//创建连接
if(! createConnection()) return 1;
QSqlQuery query;
query.exec("select * from student");
//搜索全表
while(query.next())
{
qDebug() << query.value(0).toInt() << query.value(1).toString();
}
return a.exec();
}
然后观看输出,会把插入的3个内容全部打印输出出来。
- 更改connection.h的内容
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
static bool createConnection()
{
//创建一个数据库链接,使用"connection1"作为连接名
QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE", "connection1");
db1.setDatabaseName("my1.db");
if(! db1.open()){
QMessageBox::critical(0, "Cannot open database", "Unable to establish a database"
"connection", QMessageBox::Cancel);
return false;
}
//打开数据之后,用QSqlQuery连接,QSqlQuery类提供了一种执行和操作SQL语句的方法
QSqlQuery query(db1);//这里要使用数据库对象。
query.exec("create table student (id int primary key,"
"name varchar(20))");//创建一个student表,并插入了id和name 2个字段,其中id字段是Int类型 primary key表示该字段为主键,不能为空且不能有重复值,name字段为varchar类型,并且限定不能大于20个字符
query.exec("insert into student values(0, 'LiMing')");//插入内容
query.exec("insert into student values(1, 'LiuTao')");//插入内容
query.exec("insert into student values(2, 'WangHong')");//插入内容
//创建另一个数据库连接,要使用不同的连接名
QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE", "connection2");
db2.setDatabaseName("my2.db");
if(! db2.open()){
QMessageBox::critical(0, "Cannot open database", "Unable to establish a database"
"connection", QMessageBox::Cancel);
return false;
}
QSqlQuery query2(db2);
query2.exec("create table student (id int primary key,"
"name varchar(20))");
query2.exec("insert into student values(10, 'LiQiang')");
query2.exec("insert into student values(11, 'MaLiang')");
query2.exec("insert into student values(12, 'ZhangBin')");
return true;
}
#endif // CONNECTION_H
- 执行查询
QSqlQuery query;//构造一个默认链接的对象
bool ok = query.exec("select * from student")//搜索student表
if(!ok){
QSqlError error = QSqlQuery::lastError();
QString buf = error.databaseText();//返回数据错误信息
QString buf1 = error.driverText();//返回驱动错误信息
}