qt sqlite数据库操作功能

一、初始化

1、qt操作sqlite数据库,先要进行判断数据库文件有没有存在,如存在,则直接连接数据库。如果不存在,则新建一个,下面为main函数

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //数据库操作
    bool create = !QFile::exists("para.dat");

    if(true == createConnection())        //数据库不存在  则重新初始化并启用数据库
    {
        if (create)
        {
           createParaData();
        }
    }
    //界面显示
    MainFrame w;
    w.show();

    return a.exec();
}

2、接下来是main里面引用的2个子函数的详细内容

//连接数据库文件
bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    db.setDatabaseName("para.dat");

    if (!db.open()) {

        QMessageBox::warning(0, QObject::tr("获取数据库信息失败,已恢复默认值..."),
                             db.lastError().text());
        return false;

    }
    return true;
}

//数据库初始化
void createParaData()
{
    QSqlQuery query;
    query.exec("DROP TABLE para");
    query.exec("CREATE TABLE para ("
                "id INTEGER     PRIMARY KEY AUTOINCREMENT,"
                "sourceDir      VARCHAR(260) NOT NULL,"
                "genearteDir    VARCHAR(260) NOT NULL,"
                "DataHour       VARCHAR(10) NOT NULL,"
                "DataMinute     VARCHAR(10) NOT NULL)");

    query.exec("INSERT INTO para(sourceDir,genearteDir,DataHour,DataMinute)"
                "VALUES ('./','./','8','0')");
}

好了,以上初始化完成。该demo数据库,由一个para表,该表有5个参数,id,sourceDir,generateDir,DataHour,DataMiunte构成,本处已经赋了初始值 

 

二、数据库读取

读取可以放到构造函数内去读  一般只读一次。如下例程。将读到的数据库的内容,放到我自己配置的结构体内

//读取数据库配置
    QSqlTableModel model_para;
    model_para.setTable("para");
    model_para.select();

    QSqlRecord record_para = model_para.record(0);      //第一行数据

    File_Source.File_Dir_Avaliable = true;
    File_Source.File_Dir = record_para.value("sourceDir").toString();
    File_Generate.File_Dir_Avaliable = true;
    File_Source.File_Dir = record_para.value("generateDir").toString();

    Save_Time.Hour = record_para.value("DataHour").toUInt();
    Save_Time.Min = record_para.value("DataMinute").toUInt();


    ui->comboBox_Hour->setCurrentText(QString::number(Save_Time.Hour));
    ui->comboBox_Minute->setCurrentText(QString::number(Save_Time.Min));

三、数据库写值

写值可由按键或其它触发,由下函数所示,本次是由按键触发

    //设置数据库内容
    QSqlTableModel model_para;
    model_para.setTable("para");
    model_para.select();

    QSqlRecord record_para = model_para.record(0);

    record_para.setValue("sourceDir",File_Source.File_Dir);
    record_para.setValue("generateDir",File_Generate.File_Dir);
    record_para.setValue("DataHour",ui->comboBox_Hour->currentText());
    record_para.setValue("DataMinute",ui->comboBox_Minute->currentText());

    model_para.setRecord(0,record_para);
    model_para.submitAll();

    QMessageBox::information(this,"提示","参数保存成功!!!",QMessageBox::Yes);

如此,简单的sqlite数据操作完成!

你可能感兴趣的:(qt)