dataManager类
有如下声明:
public:
void prepareRows();
private:
QSqlQuery *query;
QString userId;
QSqlDatabase *dataBase;
构造函数:
dataManager::dataManager(QString id)
:userId(id)
{
if(userId.isEmpty()||userId.isNull())
{
QMessageBox::information(this,"Fail","Invalid User Id ");
return;
}
dataBase=new QSqlDatabase();
*dataBase=QSqlDatabase::addDatabase("QSQLITE");
dataBase->setDatabaseName("data.db");
if(!dataBase->open())
{
qDebug()<<dataBase->lastError();
QMessageBox::information(this,"Fail","Fail to connect the database");
return;
}
query=new QSqlQuery(*dataBase);
// query->clear();
QStringList existTables;
existTables=dataBase->tables();
if(!existTables.contains("user"+userId))
{
QString temp=QString("CREATE TABLE IF NOT EXISTS user%1(item INTEGER PRIMARY KEY AUTOINCREMENT,\
itemDate,\
itemType,\
itemField,\
itemSpecial,\
itemNumber,\
itemHandman,\
itemExtra);").arg(userId);
if(!query->exec(temp))
{
qDebug()<<query->lastError()<<" type: "<<query->lastError().type();
QMessageBox::information(this,"Fail","fail to create tables");
}
}
}
成员函数:
void dataManager::prepareRows()
{
QString temp=QString("SELECT itemDate,\
itemType,\
itemField,\
itemSpecial,\
itemNumber,\
itemHandman,\
itemExtra\
FROM user%1;").arg(userId);
if(!query->exec(temp)) //////////////////////////////////////////////////运行到这里崩溃
{
qDebug()<<query->lastError();
QMessageBox::information(this,"Fail","fail to prepare rows");
}
}
程序运行到上面标注处程序崩溃。
我想程序崩溃一般是指针的问题,但是构造函数中已经给query符了值,而且是成员变量应该没关系吧。。。
然后可能是没有表user1,但是我在命令行下进入数据库查看确实有表user1,(运行时userId为QString类型的1),
实在不知道怎么回事了,大家帮忙啊~