QT:SQLITE数据库编程

pro文件:QT         += core gui sql

widget.ui

QT:SQLITE数据库编程_第1张图片

main.cpp

#include "widget.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w("./student.db");  //传入文件名
    w.show();

    return a.exec();
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include   //数据库连接
#include     //执行SQL语句

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QString filename, QWidget *parent = 0);  //数据库文件名,存储数据库的操作
    ~Widget();

    void showInfo();
    void clearInput();

private slots:

    void on_pb_add_clicked();

    void on_pb_delete_clicked();

    void on_pb_query_clicked();

    void on_pb_update_clicked();

private:
    Ui::Widget *ui;
    QSqlDatabase db_student;   //表示数据库的连接
    QString db_file_name;   //数据库文件名

};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include    //文件类
#include 
#include 

Widget::Widget(QString filename, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget),
    db_file_name(filename)
{
    ui->setupUi(this);
    ui->cbb_gender->setCurrentIndex(-1);
    ui->cbb_gender->setFixedSize(224,40);
    ui->te_table_content->setReadOnly(true);

    QFile file(db_file_name);  //要操作的文件名

    if(!file.exists())
    {
        //数据库文件不存在表示这个程序第一次被运行
        //连接数据库,创建数据库表,生成数据库文件
        //"QSQLITE"表示创建的是基于sqlite数据库的连接
        db_student = QSqlDatabase::addDatabase("QSQLITE");

        //设置数据库文件的名字
        db_student.setDatabaseName(db_file_name);

        //打开数据库
        if(!db_student.open())
        {
            qDebug() << "打开数据库失败1";
        }
        else
        {
            qDebug() << "打开数据库成功1";
        }

        //QSqlQuery用于SQL语句的执行,对返回结果的使用
        //要指定使用的数据库的连接 db_student
        QSqlQuery sql_query(db_student);

        //创建数据库表
        QString str_query = "create table Student(id varchar(64) PRIMARY KEY,name varchar(64),gender varchar(64),age int)";

        //执行SQL语句
        if(!sql_query.exec(str_query))
        {
            qDebug() << str_query <<"failed";
            qDebug() << sql_query.lastError().text();
        }

        //向数据库表Student插入数据(方式一)
        str_query = "insert into Student values('2310060001','张三','男',15)";
        if(!sql_query.exec(str_query))
        {
            qDebug() << str_query << "failed";
            qDebug() << sql_query.lastError().text();
        }

        //向数据库表Student插入数据(方式二)
        str_query = "insert into Student values(?,?,?,?)";

        //准备SQL语句
        sql_query.prepare(str_query);
        //绑定待定的数据,取代SQL语句里的?
        sql_query.addBindValue("2310060002");
        sql_query.addBindValue("李四");
        sql_query.addBindValue("男");
        sql_query.addBindValue(16);
        if(!sql_query.exec())
        {
            qDebug() << str_query << "failed";
            qDebug() << sql_query.lastError().text();
        }

        //向数据库表Student插入数据(方式三)
        str_query = "insert into Student values(:id,:name,:gender,:age)";
        sql_query.prepare(str_query);
        //绑定待定的数据
        sql_query.bindValue(":id","2310060003");
        sql_query.bindValue(":name","王五");
        sql_query.bindValue(":gender","女");
        sql_query.bindValue(":age",20);
        if(!sql_query.exec())
        {
            qDebug() << str_query << "failed";
            qDebug() << sql_query.lastError().text();  //打印具体错误
        }
    }
    else
    {
        db_student = QSqlDatabase::addDatabase("QSQLITE");

        //设置数据库文件的名字
        db_student.setDatabaseName(db_file_name);

        //打开数据库
        if(!db_student.open())
        {
            qDebug() << "打开数据库失败2";
        }
        else
        {
            qDebug() << "打开数据库成功2";
        }
    }

    // 显示Student表中所有的记录
    showInfo();
}

Widget::~Widget()
{
    delete ui;
}


//更新信息显示
void Widget::showInfo()
{
    QSqlQuery sql_query(db_student);  //执行QSL语句

    QString str_query = "select * from Student";

    if(!sql_query.exec(str_query))
    {
        qDebug() << str_query << "failed";
        qDebug() << sql_query.lastError().text();
    }

    ui->te_table_content->clear();

    while(sql_query.next())  //获得当前的一整条记录
    {
        QString s1;
        for(int i = 0;i < 4;i++) //id,name,gender,age
        {
            s1 += sql_query.value(i).toString();  //获得一条记录中的第i个表项,0 base
            s1 += " ";
        }

        ui->te_table_content->append(s1);
    }
}


//清空
void Widget::clearInput()
{
    ui->le_id->clear();
    ui->le_name->clear();
    ui->cbb_gender->setCurrentIndex(-1);
    ui->le_age->clear();
}

//新增
void Widget::on_pb_add_clicked()
{
    QSqlQuery sql_query(db_student);

    QString str_query = "insert into Student values(?,?,?,?)";  //id,name,gender,age

    //准备SQL语句
    sql_query.prepare(str_query);

    //绑定待定的数据,取代SQL语句里的?
    sql_query.addBindValue(ui->le_id->text());
    sql_query.addBindValue(ui->le_name->text());
    sql_query.addBindValue(ui->cbb_gender->currentText());
    sql_query.addBindValue(ui->le_age->text().toInt());

    if(!sql_query.exec())
    {
        qDebug() << str_query << "failed";
        qDebug() << sql_query.lastError().text();
    }

    clearInput();
    showInfo();
}

//删除
void Widget::on_pb_delete_clicked()
{

    QSqlQuery sql_query(db_student);

    QString str_query = "delete from Student where id = :id";

    sql_query.prepare(str_query);

    sql_query.bindValue(":id",ui->le_id->text());

    if(!sql_query.exec())
    {
        qDebug() << str_query << "failed";
        qDebug() << sql_query.lastError().text();
    }

    clearInput();
    showInfo();
}

//查询
void Widget::on_pb_query_clicked()
{
    QSqlQuery sql_query(db_student);  //操作的数据库

    QString str_query = "select * from Student where id = :id";

    sql_query.prepare(str_query);

    sql_query.bindValue(":id",ui->le_id->text());

    if(!sql_query.exec())
    {
        qDebug() << str_query << "failed";
        qDebug() << sql_query.lastError().text();
    }

    while(sql_query.next())  //获得当前的一整条记录 id,name,gender,age
    {
        ui->le_name->setText(sql_query.value(1).toString());
        ui->cbb_gender->setCurrentText(sql_query.value(2).toString());
        ui->le_age->setText(sql_query.value(3).toString());
    }
}

//修改
void Widget::on_pb_update_clicked()
{
    QSqlQuery sql_query(db_student);

    QString str_query = "update Student set name = ?,gender = ?,age = ? where id = ?";

    sql_query.prepare(str_query);

    sql_query.addBindValue(ui->le_name->text());
    sql_query.addBindValue(ui->cbb_gender->currentText());
    sql_query.addBindValue(ui->le_age->text().toInt());
    sql_query.addBindValue(ui->le_id->text());

    if(!sql_query.exec())
    {
        qDebug() << str_query << "failed";
        qDebug() << sql_query.lastError().text();
    }

    clearInput();
    showInfo();
}

结果

QT:SQLITE数据库编程_第2张图片

QT:SQLITE数据库编程_第3张图片

新增

QT:SQLITE数据库编程_第4张图片

QT:SQLITE数据库编程_第5张图片

删除

QT:SQLITE数据库编程_第6张图片

QT:SQLITE数据库编程_第7张图片

查询

QT:SQLITE数据库编程_第8张图片

QT:SQLITE数据库编程_第9张图片

修改

QT:SQLITE数据库编程_第10张图片

QT:SQLITE数据库编程_第11张图片

QT:SQLITE数据库编程_第12张图片

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