qt中sqlite数据库操作方法

23 篇文章 0 订阅
7 篇文章 0 订阅

在qt的sqlite数据库编程中,需要先在工程文件添加:

QT       += core gui sql

在工程头文件中添加对应qtsql头文件,声明QSqlDatabase类对象,以及自定义的数据库初始化接口DbInit。

#include <QtSql>    

QSqlDatabase db;
bool DbInit();
还有一些数据库操作的槽函数:
private slots:
    void GetDbRecord();
    void AddRecord();
    void EditRecord();
    void DelRecord();
    void on_tableWidget_itemClicked(QTableWidgetItem *item);

在工程实现文件,我们这里通过列表框QTabWidget来做数据库的用户界面操作:

    //QTableWidget中去掉默认自带的行号
    QHeaderView* headerView = ui->tableWidget->verticalHeader();
    headerView->setHidden(true);
bool MainWindow::DbInit()
{
    db = QSqlDatabase::addDatabase("QSQLITE");//使用sqlite数据库驱动类型
    db.setDatabaseName("F:\\工具包\\sqlite\\test.db");//加载要使用的sqlite数据库文件
    if(!db.open())//打开数据库
        return false;
    QStringList strTableList=db.tables();//返回数据库中的所有表
    if(strTableList.count()<1)
        return false;
    QString strData,strField;
    strTableName=strTableList.at(0);//默认提取第一个表
    QSqlQuery query;//使用QSqlQuery类对象进行查询
    query.exec("SELECT * FROM "+strTableName);
    int index,fieldCount = query.record().count();//获取列数目
    ui->tableWidget->setColumnCount(fieldCount);//设置tablewidget列数目
    for(index=0;index<fieldCount;index++)
    {
        //把数据表里每一列的字段名添加到tablewidget
        QTableWidgetItem *newItem = new QTableWidgetItem(query.record().fieldName(index));
        ui->tableWidget->setHorizontalHeaderItem(index,newItem);//依次设置列表框的头部节点
    }
    return true;
}


void MainWindow::GetDbRecord()
{
    QString strData;
    QSqlQuery query;
    query.exec("SELECT * FROM "+strTableName);
    int rindex=0;
    int index,fieldCount = query.record().count();//获取列数目
    // 清空列表框中之前的所有数据,先用setRowCount设为0,再用clearContents清除。
    ui->tableWidget->setRowCount(0);
    ui->tableWidget->clearContents();
    //依次向后检索记录,在执行select查询之后,获取的是第一行记录
    while(query.next())
    {
        //在tablewidget新增一行
        ui->tableWidget->insertRow(rindex);
        for(index=0;index<fieldCount;index++)
        {
            //依次获取表中每一行记录中每一列的值
            strData = query.value(index).toString();
            //再赋值到tablewidget中的对应位置
            QTableWidgetItem *newItem = new QTableWidgetItem(strData);
            ui->tableWidget->setItem(rindex, index, newItem);
        }
        //累加行数,当next向后检索不到记录时,即为记录的总行数
        rindex++;
    }
}

void MainWindow::AddRecord()
{
    QSqlQuery query;
    QString strSql,strName,strAge,strClass;
    strName=ui->lineEditName->text();
    strClass=ui->lineEditClass->text();
    strAge=ui->lineEditAge->text();
    //bool QSqlQuery::exec(const QString &query)
    //exec第一种重载方式:直接格式化sql语句,填充每个字段的值
    strSql="INSERT INTO "+strTableName+"(name,age,class)"+
            " VALUES (\'"+strName+"\',"+strAge+",\'"+strClass+"\')";
    if(query.exec(strSql))//执行格式化好的sql语句,传递qstring类型的sql语句。
        GetDbRecord();
    //bool QSqlQuery::exec()
    /*//exec第二种重载方式:使用prepare方法准备要格式化的sql语句,使用位置占位符问号,后面通过addBindValue方法依次绑定每个值
    query.prepare("INSERT INTO "+strTableName+"(name,age,class)"+
                  " VALUES (?,?,?)");
    query.addBindValue(ui->lineEditName->text());
    query.addBindValue(ui->lineEditAge->text().toUInt());
    query.addBindValue(ui->lineEditClass->text());
    if(query.exec())//执行先前准备的SQL查询,这里exec是空参数。
        GetDbRecord();
        */
    else
        QMessageBox::information(this,"提示","添加失败");

}

void MainWindow::EditRecord()
{
    QSqlQuery query;
    QString strID,strName,strAge,strClass;
    strID=ui->lineEditID->text();
    strName=ui->lineEditName->text();
    strClass=ui->lineEditClass->text();
    strAge=ui->lineEditAge->text();

    query.prepare("update "+strTableName+" set name=?,age=?,class=? where id=?");
    query.addBindValue(strName);
    query.addBindValue(strAge.toUInt());
    query.addBindValue(strClass);
    query.addBindValue(strID.toUInt());
    if(query.exec())//执行先前准备的SQL查询,这里exec是空参数。
        GetDbRecord();
    else
        QMessageBox::information(this,"提示","编辑失败");
}

void MainWindow::DelRecord()
{
    QSqlQuery query;
    QString strID;
    strID=ui->lineEditID->text();
    query.prepare("delete from "+strTableName+" where id=?");
    query.addBindValue(strID.toUInt());
    if(query.exec())//执行先前准备的SQL查询,这里exec是空参数。
        GetDbRecord();
    else
        QMessageBox::information(this,"提示","删除失败");
}

void MainWindow::on_tableWidget_itemClicked(QTableWidgetItem *item)
{//列表框单击时,在对应编辑框里显示每个单元格值
    ui->lineEditID->setText(ui->tableWidget->item(item->row(),0)->text());
    ui->lineEditName->setText(ui->tableWidget->item(item->row(),1)->text());
    ui->lineEditAge->setText(ui->tableWidget->item(item->row(),2)->text());
    ui->lineEditClass->setText(ui->tableWidget->item(item->row(),3)->text());
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值