本帖最后由 一撇一捺 于 2014-5-16 14:44 编辑
自己在QT中连接了sqlite3数据库,要将主窗口几个lineEdit中实时显示的数据定期插入(保存)到数据库中,头文件中新建连接函数connection()如下所示: #ifndef CONNECTION_H
#define CONNECTION_H
#include<QMessageBox>
#include<QSqlDatabase>
#include<QSqlError>
#include<QSqlQuery>
static bool createConnection()
{
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("SensorData.db");
if(!db.open())
{
QMessageBox::critical(0,qApp->tr("Cannot open database"),qApp->tr("Unable to establish a database connection.\n"),QMessageBox::Cancel);
return false;
}
QSqlQuery query;
query.exec("create table sensordata(ID text,Tem text,Hum text,ZD text,datetime text)");
return true;
}
#endif // CONNECTION_H
mainwindow.cpp函数中关于插入操作相关代码如下:定义定时器saveTimer=new QTimer(this);点击保存按钮操作函数如下:void MainWindow::on_pushButton_save_clicked()
{
saveTimer->start(6000);
connect(saveTimer,SIGNAL(timeout()),this,SLOT(savedata()));
ui->pushButton_save->setEnabled(false);
}
savedata()实现函数如下:void MainWindow::savedata()
{
QString id1,id2,id3,tem1,tem2,tem3,hum1,hum2,hum3,zd1,zd2,zd3,newtime;
QDateTime qdatetime=QDateTime::currentDateTime();
newtime = qdatetime.toString("yyyy-MM-dd hh:mm:ss");
id1="1";id2="2";id3="3";
tem1=lineEdit_3->text();
hum1=lineEdit_2->text();
zd1=lineEdit->text();
tem2=lineEdit_4->text();
hum2=lineEdit_5->text();
zd2=lineEdit_6->text();
tem3=lineEdit_7->text();
hum3=lineEdit_8->text();
zd3=lineEdit_9->text();
/*QSqlDatabase db=QSqlDatabase::database("QSQLITE");
//db.databaseName("SensorData.db");
if(!db.open())
{
QMessageBox::critical(0,qApp->tr("Cannot open database"),qApp->tr("Unable to establish a database connection.\n"),QMessageBox::Cancel);
//return false;
this->close();
}*/
if(createConnection())
{
QSqlQuery query;
query.exec("INSERT INTO sensordata VALUES('"+id1+"','"+tem1+"','"+hum1+"','"+zd1+"','"+newtime+"')");
query.exec("INSERT INTO sensordata VALUES('"+id2+"','"+tem2+"','"+hum2+"','"+zd2+"','"+newtime+"')");
query.exec("INSERT INTO sensordata VALUES('"+id3+"','"+tem3+"','"+hum3+"','"+zd3+"','"+newtime+"')");
this->close();
}
}打开程序时,串口终端会提示Error opening mouse device '/dev/mouse1':No such file or directory(重新添加该驱动后运行程序没出现该提示,可以排除),运行其他程序时也会出现这句话,程序能正常进行下去,点击开始按钮可以正常在几个lineEdit中实时显示串口传过来的数据,当点击保存按钮时一两秒后程序自动退出,终端提示segmentation default。没有其他信息了,进入当前目录,查看数据库SensorData.db下的表,自动生成了sensordata这个表,程序运行前是没有这个表的,说明数据库的连接和表的创建是正常的,不正常的地方应该在上面的插入操作savedata()里面,但是我弄了几天都不知道到底哪块错了,编译都能通过,希望各位看看,给点建议,谢谢了。
|