C++ 应用程序崩溃-可能是因为SqlDataAccess

C++ 应用程序崩溃-可能是因为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

我用的是黑莓级联

我正在尝试访问我的数据库以插入/编辑我的数据库,但当我尝试调用查询函数favorite()时,应用程序崩溃

该应用程序崩溃,控制台中没有任何记录,所以我不确定到底是什么原因造成的

我还在标题中声明:SqlDataAccess*sda

#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();是的,您应该