Qt学习17——初识数据库SQLite(上)

SQLite的使用

摘要:主要是了解Qt中创建SQLite数据库的基本流程,使用QSqlQuery类和SQL基本语法实现创建简单数据库并添加数据。下一篇会介绍与Model/View配合更默契的QSqlTableModel和QSqlRelationalTableModel,这些高层接口将不依赖SQL语法实现数据库操作。

一、创建数据库

新建Qt工程,添加空的C++类文件(本文暂不使用ui)。在.pro文件中添加

QT += sql

这里默认创建的是SQLite,Qt默认搭载QSqlite驱动(包含了Sqlite数据库),所以这里不必使用

QSqlDatabase::drivers()

去查找系统中可用数据库驱动了。
新建方法bool ConnectDB(const QString &dbName),用于创建并配置一个数据库连接。

@sqliteconnection.cpp

bool SqlConnection::ConnectDB(const QString &dbName) {
    QSqlDatabase myDB = QSqlDatabase::addDatabase("QSQLITE");
//    myDB.setHostName("host");
//    myDB.setDatabaseName("dbname");
//    myDB.setUserName("username");
//    myDB.setPassword("password");
    myDB.setDatabaseName(dbName);
    if (!myDB.open()) {
        QMessageBox::critical(0,QObject::tr("Database Error"),myDB.lastError().text());
        qDebug()<<"my_db open error !";
        return false;

    }
    return true;
}

setDatabaseName()用于设置要连接的数据库名,同名链接新的会覆盖旧的。如果搭建数据库服务器,注释中可以对主机名、用户名等进行配置。open()用于打开数据库链接并返回bool值。lastError()用于输出最新错误。在main()中调用它:

@main.cpp

#include "mainwindow.h"
#include "sqlconnection.h"
#include <QApplication>
#include <QFile>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile file("demo.db");
    if (file.exists())
        file.remove();//用于测试时删除上一次创建的数据库
    SqlConnection sql;
    sql.ConnectDB("demo.db")//建立名为"demo.db"的数据库连接
//    MainWindow w;
//    w.show();

    return a.exec();
}

此时已经可以创建一个数据库链接,在build-debug文件路径下可以看到demo.db文件。

二、添加数据库查询

要实现数据库查询,需要将QSqlQuery实例化。

@sqlconnection.cpp

bool SqlConnection::CreateDB() {
    QSqlQuery query;
    if (!query.exec("CREATE TABLE music ("
                    "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                    "title VARCHAR,"
                    "artist VARCHAR)"))
    {
        QMessageBox::critical(0,QObject::tr("Database Error"),query.lastError().text());
        return 1;
    }
    return true;
}

这里创建了一个数据库表music,包含titleartist两个属性,关键字”id”自动递增。

三、插入数据

@sqlconnection.cpp

bool SqlConnection::AddData() {
        QSqlQuery query;
        query.prepare("INSERT INTO music (title, artist) VALUES (?,?)");

        QStringList titles;
        titles <<QString::fromLocal8Bit("小城故事")<< QString::fromLocal8Bit("她") << "Dapartures";
        query.addBindValue(titles);
        QVariantList artists;
        artists<< QString::fromLocal8Bit("邓丽君") << QString::fromLocal8Bit("朱婧汐") << "EGOIST";
        query.addBindValue(artists);
        if (!query.execBatch()) {
            QMessageBox::critical(0,QObject::tr("Database Error"),query.lastError().text());
        }

        query.finish();
        query.exec("SELECT title, artist FROM music");
        while (query.next()) {
            QString title = query.value(0).toByteArray();
            QString artist = query.value(1).toByteArray();
            qDebug()<<title<<"|"<<artist;
        }
        return true;
}
@main.cpp

#include "mainwindow.h"
#include "sqlconnection.h"
#include <QApplication>
#include <QFile>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile file("demo.db");
    if (file.exists())
        file.remove();
    SqlConnection sql;

    if (sql.ConnectDB("demo.db")) {
            sql.CreateDB();
            sql.AddData();

    }
//    MainWindow w;
//    w.show();

    return a.exec();
}

运行结果:
运行结果

三、中文问题

Sqlite默认是不支持中文的(截止目前版本为SQLite version 3.20.1),网上看了一圈方法很多,但是有的写的也很复杂。我这里给出一种能简便地实现中文输入的方法:

1、将包含中文的文件(.cpp、.h)用记事本打开,随便加个空格什么的修改一下,保存。
2、在使用中文的地方用QString::fromLocal8Bit(“中文”)

就可以实现将中文字符插入数据库了。

这里写图片描述

这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Qt 和 VS 使用 SQLite 数据库的步骤如下: 1. 在 Qt 中添加 SQLite 驱动程序。可以通过 Qt Maintenance 工具来完成。打开 Qt Maintenance 工具,选择“添加或删除组件”,在“Qt”下找到“Qt版本”,选择“Qt 5.15.0”(或者其他版本),在右侧的“Qt 5.15.0”区域里勾选“Qt SQL”,然后点击“安装”按钮。 2. 在 Qt 项目中添加 SQLite 的头文件和库文件。在 Qt 项目中的 .pro 文件中添加以下代码: ``` QT += sql LIBS += -lsqlite3 ``` 3. 在 Qt 项目中使用 QSqlDatabase 类连接 SQLite 数据库。可以在 main 函数中添加以下代码: ``` #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> int main(int argc, char *argv[]) { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if (!db.open()) { qDebug() << "Cannot open database"; return 1; } QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)"); query.exec("INSERT INTO mytable (name) VALUES ('John')"); query.exec("INSERT INTO mytable (name) VALUES ('Jane')"); query.exec("SELECT * FROM mytable"); while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); qDebug() << QString("id=%1, name=%2").arg(id).arg(name); } db.close(); return 0; } ``` 这段代码会创建一个名为“mydatabase.db”的 SQLite 数据库文件,并在其中创建一个名为“mytable”的表格,然后插入两条记录(John 和 Jane),最后查询表格中的所有记录,并输出到控制台。 4. 编译并运行 Qt 项目。在 VS 中编译并运行 Qt 项目,可以看到控制台输出了两条记录(John 和 Jane)。 以上就是使用 Qt 和 VS 使用 SQLite 数据库的基本步骤。需要注意的是,在实际开发中,可能需要更加复杂的操作,比如使用 QSqlTableModel 类来操作数据库表格,使用 QSqlRelationalTableModel 类来操作多个相关表格等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值