qt使用数据库sqlite

使用QSQL数据库需要添加操作

1.在.Pro文件中添加

qt使用数据库sqlite
; 2.在头文件中添加需要使用的类头文件

qt使用数据库sqlite

数据库所有类

qt使用数据库sqlite

; 重要类和函数函数:

QSqlDatabase类

1.连接数据库

qt使用数据库sqlite

QSqlDatabase addDatabase(const QString &type, const QString &connectionName = QLatin1String(defaultConnection))
该函数是用来把我们的数据库添加到连接列表中,
参数1:表示你是什么类型的数据库,比如sqlite的话就用QSQLITE
参数2:连接名称,表示连接该数据库的文件名字,如果有多个数据库的话,需要自己定义
返回值:就是我们的数据库句柄

2.连接远程主机数据库

如果不设置的话默认是生成数据库文件在QT工程文件下

qt使用数据库sqlite
; 3.设置连接主机的端口

qt使用数据库sqlite
4.设置数据库文件名

qt使用数据库sqlite
数据库文件名不是连接名,数据库文件必须在使用Open打开数据库前设置好
; 5.设置使用数据库的用户名

qt使用数据库sqlite
6.设置使用数据库的密码

qt使用数据库sqlite
; 7.打开数据库

直接使用前面设置的账号和密码打开使用第一个open,
使用是他账号密码使用第二个open

qt使用数据库sqlite
8.返回数据库类型

qt使用数据库sqlite
; 9.执行SQL语句

qt使用数据库sqlite

QSqlQuery类

执行sql语句

exec函数
方式1:直接在构造函数里写入要执行的sql语句,再调用exec函数执行

qt使用数据库sqlite
直接在参数const QString &query = QString()里写入要执行的sql语句,再调用
exec()函数
方式2:直接调用,把sql语句写在参数里执行
qt使用数据库sqlite
执行sql语句的结果保存在QSQLQuery的数组Value里面

next函数
检索结果中的下一条记录(如果可用),并将查询定位在检索到的记录上,该函数一般用于查找时候

qt使用数据库sqlite
qt使用数据库sqlite

; 显示数据库数据

一般我们都是先把数据写到数据显示模型中,再把通过模型写到表格

QStandardItemModel数据显示模型
1.设置列的头部数据(字段名)

qt使用数据库sqlite
void setHorizontalHeaderItem(int column, QStandardItem *item)
参数说明:
int column:哪一列
QStandardItem *item:字段名即列的名字
2.设置某个单元格数据

qt使用数据库sqlite

void setItem(int row, int column, QStandardItem *item)
参数:
row:哪一行
column:那一列
QStandardItem *item:数据值
例如:
model->setItem(count,0,newQStandardItem(sql_query.value(0).toString()));

3.如何把模型数据写到QTableView

使用QTableView的成员函数setModel(模型对象)函数

QTableView表格数据显示

使用QTableView的成员函数setModel(模型对象)函数,把数据模型设置为QTableView显示的模型

测试代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSql>
#include <QSqlDatabase>
#include<QSqlDriver>
#include<QDebug>
#include<QSqlQuery>
#include<QSqlError>
#include<QString>
#include <QStandardItemModel>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:

    void sqlit3_init();
    QSqlDatabase db;
    QStandardItemModel*model;
    int count=0;

    void Init_model();
private slots:
    void on_pushButton_3_clicked();

    void on_insert_bt_clicked();

    void on_delect_bt_clicked();

    void on_read_bt_clicked();

    void on_modify_bt_clicked();

    void on_select_bt_clicked();

private:
    Ui::MainWindow *ui;
    QSqlDatabase *db1;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    sqlit3_init();
    Init_model();

}

MainWindow::~MainWindow()
{
    delete ui;
    db.close();
}

void MainWindow::sqlit3_init()
{

    db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("SQLITE.db");
    db.setUserName("root");
    db.setPassword("root");

    qDebug()<<db.driverName();
    qDebug()<<db.databaseName();
    qDebug()<<db.password();

    bool ok = db.open();
    if (ok)
    {
        qDebug() << QString("数据库打开成功");
    }
    else
    {
        qDebug() << "数据库打开失败!";
    }

}

void MainWindow::on_pushButton_3_clicked()
{

    QSqlQuery sql_query;

    if(! sql_query.exec("create table if not exists student (id int primary key, name text,form text,length int,radius int)"))
    {
        qDebug() << "Error: Fail to create table." << sql_query.lastError();
    }
    else
    {
        qDebug() << "Table created!";
    }
}

void MainWindow::on_insert_bt_clicked()
{
   QSqlQuery sql_query;
   QString sql=QString( "insert into student values (%1,'%2','%3',%4,%5);")
           .arg(ui->ID_edit->text().toInt())
           .arg(ui->name_lineEdit->text())
           .arg(ui->form_lineEdit_2->text())
           .arg(ui->length_lineEdit_3->text().toInt())
           .arg(ui->radius_lineEdit_4->text().toInt());

   qDebug()<<sql;

   if(!sql_query.exec(sql))
   {
       qDebug()<<"insert error"<< sql_query.lastError();
   }
   else
   {
       qDebug()<<"insert ok";
   }
   on_read_bt_clicked();
}

void MainWindow::on_read_bt_clicked()
{

    model->clear();
    Init_model();
    count=0;

    QSqlQuery sql_query;
    QString select_sql = "select * from student order by id asc";
    if(!sql_query.exec(select_sql))
    {
        qDebug()<<sql_query.lastError();
    }
    else
    {
        while(sql_query.next())
        {

        model->setItem(count,0,new QStandardItem(sql_query.value(0).toString()));
        model->setItem(count,1,new QStandardItem(sql_query.value(1).toString()));
        model->setItem(count,2,new QStandardItem(sql_query.value(2).toString()));
        model->setItem(count,3,new QStandardItem(sql_query.value(3).toString()));
        model->setItem(count,4,new QStandardItem(sql_query.value(4).toString()));
        count++;
        }
    }
}

void MainWindow::on_delect_bt_clicked()
{
    QSqlQuery sql_query;
    QString delect_sql=QString( "delete from student where id=%1").arg(ui->ID_edit->text().toInt());
    if(!sql_query.exec(delect_sql))
    {
        qDebug()<<"delect error"<< sql_query.lastError();
    }
    else
    {
         qDebug()<<"delect succeful";
    }
    on_read_bt_clicked();
}

void MainWindow::on_modify_bt_clicked()
{

    QSqlQuery modify_query;
    QString modify_sql=QString("UPDATE student set name='%1',form='%2',length=%3,radius=%4 WHERE id=%5;")
            .arg(ui->name_lineEdit->text())
            .arg(ui->form_lineEdit_2->text())
            .arg(ui->length_lineEdit_3->text().toInt())
            .arg(ui->radius_lineEdit_4->text().toInt())
            .arg(ui->ID_edit->text().toInt());
    if(!modify_query.exec(modify_sql))
    {
        qDebug()<<"modify error"<< modify_query.lastError();
    }
    else
    {
         qDebug()<<"modify succeful";
    }
    on_read_bt_clicked();

}

void MainWindow::on_select_bt_clicked()
{

    model->clear();
    Init_model();
    count=0;

    QSqlQuery sql_query;
    QString select_sql = QString("select *from student where id=%1 ;").arg(ui->ID_edit->text().toInt());
    if(!sql_query.exec(select_sql))
    {
        qDebug()<<sql_query.lastError();
    }
    else
    {
        while(sql_query.next())
        {

            model->setItem(count,0,new QStandardItem(sql_query.value(0).toString()));
            model->setItem(count,1,new QStandardItem(sql_query.value(1).toString()));
            model->setItem(count,2,new QStandardItem(sql_query.value(2).toString()));
            model->setItem(count,3,new QStandardItem(sql_query.value(3).toString()));
            model->setItem(count,4,new QStandardItem(sql_query.value(4).toString()));
        }
    }
}

void MainWindow::Init_model()
{

    model=new QStandardItemModel(this);

    model->setHorizontalHeaderItem(0,new QStandardItem("刀具ID"));
    model->setHorizontalHeaderItem(1,new QStandardItem("刀具名称"));
    model->setHorizontalHeaderItem(2,new QStandardItem("加工形式"));
    model->setHorizontalHeaderItem(3,new QStandardItem("刀具长度"));
    model->setHorizontalHeaderItem(4,new QStandardItem("刀具半径"));

    ui->tableView->setModel(model);
}

Original: https://blog.csdn.net/qq_24093081/article/details/124489034
Author: 不知道起个啥名“”
Title: qt使用数据库sqlite

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815292/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球