qt使用数据库sqlite

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

1.在.Pro文件中添加

qt使用数据库sqlite_第1张图片

2.在头文件中添加需要使用的类头文件

qt使用数据库sqlite_第2张图片

数据库所有类

qt使用数据库sqlite_第3张图片

重要类和函数函数:

QSqlDatabase类

1.连接数据库

在这里插入图片描述


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

2.连接远程主机数据库

如果不设置的话默认是生成数据库文件在QT工程文件下
在这里插入图片描述

3.设置连接主机的端口

在这里插入图片描述

4.设置数据库文件名

在这里插入图片描述
数据库文件名不是连接名,数据库文件必须在使用Open打开数据库前设置好

5.设置使用数据库的用户名

在这里插入图片描述

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

在这里插入图片描述

7.打开数据库

直接使用前面设置的账号和密码打开使用第一个open,
使用是他账号密码使用第二个open
在这里插入图片描述

8.返回数据库类型

qt使用数据库sqlite_第4张图片

9.执行SQL语句

在这里插入图片描述

QSqlQuery类

执行sql语句

exec函数
方式1:直接在构造函数里写入要执行的sql语句,再调用exec函数执行
在这里插入图片描述
直接在参数const QString &query = QString()里写入要执行的sql语句,再调用
exec()函数
方式2:直接调用,把sql语句写在参数里执行
在这里插入图片描述
执行sql语句的结果保存在QSQLQuery的数组Value里面

next函数
检索结果中的下一条记录(如果可用),并将查询定位在检索到的记录上,该函数一般用于查找时候
在这里插入图片描述
qt使用数据库sqlite_第5张图片

显示数据库数据

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

QStandardItemModel数据显示模型

1.设置列的头部数据(字段名)

在这里插入图片描述

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

在这里插入图片描述


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() << "数据库打开失败!";
    }

}



//1.创建表
void MainWindow::on_pushButton_3_clicked()
{
// db.setHostName("./SQLITE.db");//设置需要连接的主机数据库
// db.setPort(6868);//设置端口

    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!";
    }
}



 //2.插入数据
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();//跟新数据
}

//3.读取全部数据
void MainWindow::on_read_bt_clicked()
{


    model->clear();//清除表中数据
    Init_model();//再次初始化模型,不然上面清除清除模型后,列的标题就没了
    count=0;//每次都从第0行查询

    QSqlQuery sql_query;
    QString select_sql = "select * from student order by id asc";// order by 字段名 +asc 递增方式
    if(!sql_query.exec(select_sql))
    {
        qDebug()<<sql_query.lastError();
    }
    else
    {
        while(sql_query.next())//判断下个查询数据是否可用
        {
//           int id = sql_query.value(0).toInt();//打印某行第一列
//           int age = sql_query.value(1).toInt();
//            qDebug()<

//通过QTableview表格显示数据
        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++;//不断增加行数
        }
    }
}


//4.删除数据
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());//根据刀具ID删除数据
    if(!sql_query.exec(delect_sql))
    {
        qDebug()<<"delect error"<< sql_query.lastError();
    }
    else
    {
         qDebug()<<"delect succeful";
    }
    on_read_bt_clicked();//更新表中数据
}

//5.更新数据

//修改数据
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();//更新表中数据


}
//UPDATE students set age=20 WHERE id=2;
 



//依据ID查询数据
void MainWindow::on_select_bt_clicked()
{

    model->clear();//清除表中数据
    Init_model();//再次初始化模型,不然上面清除清除模型后,列的标题就没了
    count=0;//每次都从第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())//判断下个查询数据是否可用
        {
            //通过QTableview表格显示数据
            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("刀具半径"));

    //把数据模型设置到Qtableviwe
    ui->tableView->setModel(model);
}




你可能感兴趣的:(Qt,数据库,sqlite,qt)