一、初始化
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数据操作完成!