设为首页 加入收藏

TOP

42.QT-QSqlQuery类操作SQLite数据库(创建、查询、删除、修改)详解(一)
2019-05-25 12:12:58 】 浏览:221
Tags:42.QT-QSqlQuery 操作 SQLite 数据库 创建 查询 删除 修改 详解

Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作。这里我们所说的“平台
独立”,既包括操作系统平台,也包括各个数据库平台,Qt支持以下几种数据库:

 

  • QT自带SQLITE数据库,不需要再安装
  • QTDS在Qt4.7起已经被移除

 

1.QtSql

要使用QtSql 模块的话,需要在.pro文件中添加这么一句:

QT += sql 

 

2.QSqlDatabase

QSqlDatabase类提供了一个接口,用于通过连接访问数据。QSqlDatabase的一个实例表示连接。该连接通过受支持的数据库驱动程序之一提供对数据库的访问,该驱动程序派生自QSqlDriver。

2.1 创建一个数据库示例如下

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("scooters.dat");     //如果本目录下没有该文件,则会在本目录下生成,否则连接该文件
 if (!db.open()) {                     
        QMessageBox::warning(0, QObject::tr("Database Error"),
                             db.lastError().text());
        return false;
 }

编译运行后,可以看到已经创建了该文件:

 

创建成功后,该文件默认为空的,然后就可以使用QSqlQuery类来操作该数据库, QSqlQuery类使用的是SQL语句,如果只需要使用高层次的数据
库接口(不关心 SQL 语法),我们可以选择 QSqlTableModel 和
QSqlRelationalTableModel(在后续章节介绍)。本章我们介绍 QSqlQuery 类,来如何使用SQL语法.

 

3.QSqlQuery类介绍

通过exec()成员函数来执行DML(数据操作语言)语句,如SELECT、INSERT、UPDATE和DELETE,以及DDL(数据定义语言)语句等.

比如:

QSqlQuery query;
query.exec("DROP TABLE students");    //删除名为students的表

4.接下来,我们讲讲如何导入数据

创建表:

query.exec("CREATE TABLE students ("
                   "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                   "name VARCHAR(40) NOT NULL, "
                   " score INTEGER NOT NULL, "
                   "class VARCHAR(40) NOT NULL)");
                //创建一个students表,标题分别为id、name、score、class

" PRIMARY KEY AUTOINCREMENT,":表示该列为整数递增,如果为空时则自动填入1,然后在下面的每一行都会自动+1, PRIMARY KEY则表示该列作为列表的主键,通过它可以轻易地获取某一行数据

" INTEGER ":表示该列为带符号的整数

" VARCHAR(40) ":表示该列为可变长字符串,默认只能存储英文和数字或者utf-8,最多存储40个字节.

"NOT NULL ":表示该列的内容不为空

 

导入数据:

query.exec("INSERT INTO students (name, score,class) "
               "VALUES ('小张', 85, '初2-1班')");  
              //向students表里的(name, score,class)标题下插入一项数据'小张', 85, '初2-1班'

添加后如下图所示:

 

 

 

5.批量导入库

如果我们有大串数据需要导入时,也可以使用prepare()来绑值,然后再通过bindValue()向绑值加入数据

示例代码如下所示:

QStringList names;
names<<"小A"<<"小B"<<"小C"<<"小D"<<"小E"<<"小F"<<"小G"
           <<"小H"<<"小I"<<"小G"<<"小K"<<"小L"<<"小M"<<"小N";

QStringList clases;
clases<<"初1-1班"<<"初1-2班"<<"初1-3班"<<"初2-1班"
         <<"初2-2班"<<"初2-3班"<<"初3-1班"<<"初3-2班"<<"初3-3班";

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("students.dat");     //在本目录下生成
QSqlQuery query;
query.exec("DROP TABLE students");        //先清空一下表
query.exec("CREATE TABLE students ("
                   "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                   "name VARCHAR(40) NOT NULL, "
                   " score INTEGER NOT NULL, "
                   "class VARCHAR(40) NOT NULL)");
                //创建一个students表

    query.prepare("INSERT INTO students (name, score,class) "
                  "VALUES (:name, :score, :class)");
                    //为每一列标题添加绑定值

    foreach (QString name, names)       //从names表里获取每个名字
    {
        query.bindValue(":name", name);                      //向绑定值里加入名字
        query
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇[HNOI2012]矿场搭建 (点双连通) 下一篇C++中的自定义内存管理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目