关于Qt连接SqLite数据库的一些问题

zero刹那芳华 2017-02-14 12:27:04
第一次运行程序时创建了一个表,然后在这个表中插入了一些数据后
第二次再次运行该程序,可是上次插入的数据却不存在了
这是为什么
该怎么解决
#include <bookshow.h>
#include <QMessageBox>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QInputDialog>

BookShow::BookShow(QWidget *parent) :
QWidget(parent)
{
if (openDataBase())
{
createDataBaseTable();
QStringList data;
data << "empty";
query->exec("select Book_Name from BookInfo");
while (query->next())
data << query->value(0).toString();
model = new QStringListModel(this);
model->setStringList(data);

view = new QListView;
view->setModel(model);

showButton = new QPushButton("Show", this);
QObject::connect(showButton, &QPushButton::clicked,
this, &BookShow::showDetail);
deleteButton = new QPushButton("Delete", this);
QObject::connect(deleteButton, &QPushButton::clicked,
this, &BookShow::deleteData);
insertButton = new QPushButton("Insert", this);
QObject::connect(insertButton, &QPushButton::clicked,
this, &BookShow::insertData);

QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addWidget(deleteButton);
buttonLayout->addWidget(showButton);
buttonLayout->addWidget(insertButton);

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(view);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);
}
}


bool BookShow::openDataBase()
{
DataBase = QSqlDatabase::addDatabase("QSQLITE");
DataBase.setHostName("localHost");
DataBase.setDatabaseName("MyBook");
DataBase.setUserName("root");
DataBase.setPassword("123456");
if (DataBase.open())
{
query = new QSqlQuery(DataBase);
return true;
}
QMessageBox::information(this, "error", "The DataBase failed to open!");
return false;
}

bool BookShow::createDataBaseTable()
{
QString tableName = "BookInfo";
query->exec(QString("select * from sys.tables where name = '%1' ").arg(tableName));
if (!query->next())
return false;
query->exec(QString("create table '%1'"
"(Book_Name varchar(20),"
"Author varchar(10),"
"Word_Count int,"
"Serial_Status bit").arg(tableName));
return true;
}

void BookShow::showDetail()
{

}

void BookShow::deleteData()
{

}

void BookShow::insertData()
{
bool isOk;
QString text = QInputDialog::getText(this, "Insert",
"Please input new data:",
QLineEdit::Normal,
"you are inserting new data",
&isOk);
if(isOk)
{
QModelIndex currIndex = view->currentIndex();
model->insertRows(currIndex.row(), 1);
model->setData(currIndex, text);
view->edit(currIndex);
query->exec(QString("insert into BookInfo(Book_Name) values('%1')").arg(text));
}
}
...全文
373 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你每次运行的时候都会调用createDataBaseTable();函数重新创建一个数据表,这个地方应该先判断是否已存在这个数据表了吧,要不你创建后数据不就没了吗

16,227

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧