openDatabase()出错,无法打开

1、如果是4.2的系统,则有可能是系统权限机制问题:


I faced this problem, it was because in 4.2, there is multi users support, and if you are testing with non-admin user, you cannot acess /data/data path..

In my case i’m using the path:

context.getFilesDir().getAbsolutePath().replace("files", "databases") + File.separator


http://androiddev.orkitra.com/?p=13793

就是说,androi4.2中引入了多用户机制,普通用户无法访问根目录下的/data/data目录,因而无法创建数据库文件。而我的安卓模拟器确实是最新的4.2版本,因此就会有这种问题。



知道原因就很好解决了,按照上面的方法使用context.getFilesDir().getAbsolutePath()获取绝对路径即可。


2、也有可能是路径问

比如,项目的MainActivity位于 com.example.finance.activity,而一般db的路径会设置为/data/data/com.example.finance/mydb。

这么写就会导致权限问题,所以其实应该是/data/data/com.example.finance.activity/mydb



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QSqlDatabase> #include <QMessageBox> #include <QDebug> #include<QSqlError> #include<stdio.h> #include<stdlib.h> #include <QFileDialog> #include"mat.h" #include"matrix.h" QSqlDatabase db; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); // db = QSqlDatabase::addDatabase("QMYSQL"); // db.setHostName("localhost"); // db.setPort(3306); // db.setDatabaseName("demo"); // db.setUserName("root"); // db.setPassword("123456"); // bool ok = db.open(); // if (ok){ // QMessageBox::information(this, "infor", "success"); // } // else { // QMessageBox::information(this, "infor", "open failed"); // qDebug()<<"error open database because"<<db.lastError().text(); // } /*------------------------------------导入.mat文件-------------------------------------------------*/ //打开选择文件对话框,获取文件路径 QString File_Path = QFileDialog::getOpenFileName(this, "open","../","source(*.cpp *.h *.DAT *.mat);;Text(*.txt);;all(*.*)"); QByteArray ba = File_Path.toLatin1(); const char *rootFile = ba.data(); MATFile *pmatFile = matOpen(rootFile, "r"); if (pmatFile == NULL) { QMessageBox::warning(NULL,tr("文件打开失败"),tr("mat文件打开失败"),QMessageBox::Yes); return; } // // 获取文件中变量var; // mxArray* Array1 = matGetVariable(pmatFile, "RBR"); //先与变量绑定 // mxArray* pF = mxGetField(Array1,0,"data"); //再获取其中域的数据 // matClose(pmatFile); // // 获取矩阵数据行数; // int row = mxGetM(pF); // qDebug() << row<<endl; // // 获取矩阵数据列数; // int column = mxGetN(pF); // qDebug() << column <<endl; } MainWindow::~MainWindow() { delete ui; }这段代码为什么会显示程序异常介乎是
06-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值