Qt 快速入门第三版 ---第17章 数据库和XML --抄录

  • 查询系统所支持的驱动
    1. 创建空的Qt项目:新建文件-其他项目-Empty qmake Project
    2. 要在pro文件中加上QT+=sql widgets
    3. 创建一个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()来移除链接。

  • 创建表格并连接
    1. 先创建空项目.项目名称为connection.h
    2. 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();//返回驱动错误信息
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值