QT 中 SQLite 使用方法

一、pro文件中包含:

cpp 复制代码
QT       += ... sql

二、SQLite 使用要包含的头文件:

cpp 复制代码
#include <QSqlDatabase> // 数据库驱动
#include <QSqlQuery> // 数据库执行语句
#include <QSqlError> // 数据库日志

三、数据库创建

cpp 复制代码
QSqlDatabase database; // 建立了一个QSqlDatabase对象

QSqlDatabase::contains(connection name); // 查看对应连接是否存在(true/false)

database = QSqlDatabase::database(connection name); // 返回对应连接

QSqlDatabase::addDatabase("QSQLITE", connection name); // 创建连接并添加数据库

database.setDatabaseName("MyDataBase.db"); // 指定数据库名称

database.setUserName(id); // 设置用户名(可不要)

database.setPassword(pwd); // 设置密码(可不要)

database.open(); // 使用open()打开数据库

database.close(); // 使用close()关闭数据库

四、数据库使用

1、创建

创建数据库方法:create table <table_name> (f1 type1, f2 type2,...);

基本格式:

cpp 复制代码
QSqlQuery sqlQuery; // 定义 QSqlQuery 对象

QString createsql = "数据库操作语句"; // 数据库执行语句

sqlQuery.prepare(createsql); // 将语句保存到 sqlQuery 中

sqlQuery.exec() // 执行该语句  或者可以直接写成 sqlQuery.exec(createsql)

例如创建一个students表,标题分别为id、name、score、class:

cpp 复制代码
query.exec("CREATE TABLE students ("
                   "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                   "name VARCHAR(40) NOT NULL, "
                   " score INTEGER NOT NULL, "
                   "class VARCHAR(40) NOT NULL)");

AUTOINCREMENT:表示该列为整数递增,如果为空时则自动填入1,然后在下面的每一行都会自动+1,

PRIMARY KEY:则表示该列作为列表的主键,通过它可以轻易地获取某一行数据

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

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

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

2、插入

插入语句:insert into <table_name> (table1, table2,...) values (value1, value2,...);

插入数据的三种格式:

cpp 复制代码
// 1
QString insert_sql = "insert into student (id, name, age) values (3, \"Wang\", 25)";
sql_query.exec(insert_sql);

// 2
QString insert_sql = QString("INSERT INTO student VALUES ('%1', '%2', '%3')").arg(3).arg(Wang).arg(25);
sql_query.exec(insert_sql);

// 3
QString insert_sql = QString("INSERT INTO student VALUES (:id :name :age)");
sql_query.bindValue(":id",3); // 使用后面的内容对前面""中的内容进行替换
sql_query.bindValue(":name","Wang");
sql_query.bindValue(":age",25);
query.exec();

3、查询

查询语句:select , , ... from <table_name>;

查询格式:

cpp 复制代码
QString select_sql = "select id, name from student";
if(!sql_query.exec(select_sql))
{
    qDebug()<<sql_query.lastError();
}
else
{
    while(sql_query.next())
    {
        int id = sql_query.value(0).toInt();
        QString name = sql_query.value(1).toString();
        qDebug()<<QString("id:%1    name:%2").arg(id).arg(name);
    }
}

查询某一范围:

cpp 复制代码
// 查询成绩在60~80之间的数据
select * from students where score >= 60 and score <= 80

查询指定信息:

cpp 复制代码
// 查询用户名和密码是否存在
QString sql=QString("select * from user where username='%1' and password='%2'").arg(username).arg(password);

查询指定字符:

cpp 复制代码
// GLOB表示通配符,匹配班级带有"3-3"的名字
SELECT * FROM students WHERE class GLOB '*3-3*'

4、删除

删除语句:delete from <table_name> where =

删除格式:

cpp 复制代码
QString delete_sql = "delete from student where id = ?";
sql_query.prepare(delete_sql);
sql_query.addBindValue(0);
if(!sql_query.exec())
{
    qDebug()<<sql_query.lastError();
}
else
{
    qDebug()<<"deleted!";
}

query.exec("DELETE FROM students"); // 删除students表里所有内容
相关推荐
lisw05几秒前
作为人类代理的大语言模型及其角色分类!
人工智能·学习·语言模型
Z21-X6 分钟前
云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析
运维·笔记·学习·云原生
坤坤子吖11 分钟前
Linux网络编程:UDP进阶,从字典服务器到简单聊天室
linux·服务器·网络·c++·笔记·学习
Rabitebla22 分钟前
【Linux学习笔记】进程篇(九):进程的创建与退出——fork、写时拷贝与退出码
linux·c++·笔记·学习
skywalk816325 分钟前
不用 SSH、不装数据库:我用 1 个 Python 脚本 + Git,把 15 个 AI Agent 串成了一条流水线
数据库·人工智能·python·ssh·集群
Decay__36 分钟前
19_MySQL 告警与自动化运维 —— 告警分级收敛 / Webhook / 定时巡检 / 脚本库
运维·数据库·sql·mysql·架构
代码不停39 分钟前
Spring Aop
java·数据库·spring
楚山之石41 分钟前
【MRM】CAPLEX 对比剂灌注 MRI 开源术语库:ISMRM OSIPI 共识报告
图像处理·人工智能·学习·mri
keyipatience1 小时前
MySQL 学习(4)常用数据类型
数据库·mysql
达梦产品与服务1 小时前
SQLark V4.2 更新 | 新增TiDB、SSL安全连接、数据字典、清空/截断表等40+项功能已上线!
数据库·安全·tidb·ssl