C++ 应用程序崩溃-可能是因为SqlDataAccess
我用的是黑莓级联 我正在尝试访问我的数据库以插入/编辑我的数据库,但当我尝试调用查询函数favorite()时,应用程序崩溃 该应用程序崩溃,控制台中没有任何记录,所以我不确定到底是什么原因造成的 我还在标题中声明:SqlDataAccess*sdaC++ 应用程序崩溃-可能是因为SqlDataAccess,c++,sqlite,blackberry-10,C++,Sqlite,Blackberry 10,我用的是黑莓级联 我正在尝试访问我的数据库以插入/编辑我的数据库,但当我尝试调用查询函数favorite()时,应用程序崩溃 该应用程序崩溃,控制台中没有任何记录,所以我不确定到底是什么原因造成的 我还在标题中声明:SqlDataAccess*sda #include "dbHelper.h" #include <bb/data/SqlDataAccess> #include <bb/data/DataAccessError> #include <QtSql/Qt
#include "dbHelper.h"
#include <bb/data/SqlDataAccess>
#include <bb/data/DataAccessError>
#include <QtSql/QtSql>
#include <QDebug>
dbHelper::dbHelper()
{
initDatabase();
SqlDataAccess sda (mdbFilewithPath);
// or should I use: this-> sda = new SqlDataAccess();
}
void dbHelper::initDatabase(){
//Copy database to Data folder ... pretty sure this part of the code works.
mdbFilewithPath = QDir::homePath() + "/data.db";
}
void dbHelper::executeQuery (const QString query){
this->sda->execute(query);
if (this->sda->hasError()){
DataAccessError err = this->sda->error();
qWarning() << "SQL Error: " << err.errorType() <<err.errorMessage();
}
}
void dbHelper::favourite(const QString &rule_id)
{
QVariantMap rule;
rule["id"] = rule_id;
QString query ="INSERT INTO user (rule_id, isFavourite) VALUES (" + rule_id + ", 1)";
executeQuery(query);
}
#包括“dbHelper.h”
#包括
#包括
#包括
#包括
dbHelper::dbHelper()
{
initDatabase();
SqlDataAccess sda(mdbFilewithPath);
//或者我应该使用:this->sda=newsqldataaccess();
}
void dbHelper::initDatabase(){
//将数据库复制到数据文件夹…非常确定这部分代码是有效的。
mdbFilewithPath=QDir::homePath()+“/data.db”;
}
void dbHelper::executeQuery(常量QString查询){
此->sda->执行(查询);
如果(此->sda->hasError()){
DataAccessError err=this->sda->error();
qWarning()当您编写的应用程序崩溃时,您的第一反应应该是在调试器中运行程序。这将帮助您找到崩溃发生的位置,并让您检查变量值和调用堆栈。此外,我尝试过的所有手机开发包(不包括BB devkit)有可以轻松调试应用程序的模拟器。也可以从实际硬件远程调试。我明白了,我现在先试试。是的,可以在电话或模拟器上调试,不同的人喜欢其中一种。也可以运行调试版本并观看qDebug()输出,所以即使调试不起作用,控制台输出也应该是可见的。我建议添加更多的调试行,以确定应用程序失败的地方。也就是说,BB10在这方面有一点学习曲线,所以一定要慢慢来,在示例应用程序上进行练习。好的luckI,Peter说的第二句话,然后添加如果您表示将sda声明为指向SqlDataAccess的指针,则不表示sda是如何初始化的。取消引用空指针将导致中止//或者我应该使用:this->sda=new SqlDataAccess();是的,您应该