02_QT操作数据库-sqlite

作者:精一思维

个人薇信号:dreamsoft008

 1 显示信息用 tablewidget容器

 2 SQLite是一款开源、轻量级、跨平台的数据库,无需server,无需安装和管理配置。它的设计目标是嵌入式的,所以很适合小型应用,也是Qt应用开发种常用的一种数据库。

3 .Pro需要增加 qt+=sql

4 直接上代码:

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


#include <QtSql/QSql>
#include <QtSql/qsqldatabase.h>
#include <QtSql/qsqlquery.h>
#include <QDebug.h>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QStringList>


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

    //创建数据库连接
    createConn();

    //创建表格
    createTable();



}

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


//1.连接数据库
bool MainWindow::createConn()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("C:\\1.db");
    //db.setHostName("localhost");
    //db.setUserName("");
    //db.setPassword("");
    if (db.open())
    {
        qDebug() << "Connected successfully.";
    }
    else
    {
        qDebug() << "Can't connect to database.";
       // qDebug() << "The error is: " << db.lastError().databaseText();
        return false;
    }
    return true;
}


bool MainWindow::createTable()
{
    QString strQuery;
    strQuery = "create table JobInfo("
        "id integer primary key,"
        "name varchar(30), job varchar(30))";
    QSqlQuery query;
    if (query.exec(strQuery))
    {
        qDebug() << "Create Table Successfully!";
    }
    else
    {
        qDebug() << "Create Table Failed";
        return false;
    }
    return true;
}

bool MainWindow::insertData(QString id, QString name, QString job)
{
    QSqlQuery query;
    query.prepare("insert into JobInfo (name, job) values(:name, :job)");
    query.bindValue(":name", name);
    query.bindValue(":job", job);
    if (query.exec())
    {
        qDebug() << "Insert Successfully.";
    }
    else
    {
        qDebug() << "Insert failed.";

        return false;
    }
    return true;
}


void MainWindow::readData()
{
    //设置表格中每一行的表头
    ui->TableWidget->setHorizontalHeaderLabels(QStringList() << "姓名" << "职位");
    ui->TableWidget->setColumnCount(2);

    //统计现有的表格行
    int t_rowCount = ui->TableWidget->rowCount();
    int nRow =0;
    QSqlQuery query;
    query.exec("select name, job from JobInfo");
    while (query.next())
    {
        QString name = query.value(0).toString();
        QString job = query.value(1).toString();
        qDebug() << "The job of " << name.toStdString().c_str() << " is " << job.toStdString().c_str();



        //设置表格数据区内的所有单元格都不允许编辑
        //ui->TableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
        //设置表格中每一行的内容

        ui->TableWidget->insertRow(t_rowCount + nRow);		//按需求加行
        ui->TableWidget->setItem(t_rowCount+nRow,0,new QTableWidgetItem(name));
        ui->TableWidget->setItem(t_rowCount+nRow,1,new QTableWidgetItem(job));
        nRow++;
    }

      ui->TableWidget->show();
}

void MainWindow::on_pushButton_add_clicked()
{

    QString strName = ui->lineEditName->text();
    QString strJob = ui->lineEditJob->text();

    insertData("1",strName,strJob);

}

void MainWindow::on_pushButton_query_clicked()
{
    int rowNum=  ui->TableWidget->rowCount();
    for(int i = 0 ; i < rowNum ; i++)//清空列表
    {
        ui->TableWidget->removeRow(0);
    }

    readData();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    bool createTable();
    bool createConn();
    bool insertData(QString id, QString name, QString job);
    void readData();

private slots:
    void on_pushButton_add_clicked();

    void on_pushButton_query_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员架构笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值