找回密码
 立即注册
收起左侧

qsqlite在ios上运行失败

2
回复
5673
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2016-8-19 08:25:52 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 xxqn 于 2016-8-19 08:27 编辑

此代码在ios模拟器上运行正常返回user=a,但通过qmake生成xcode项目后,发布到iphone上的运行结果是返回"db cant open"

查看xcode的sqlite库已经有了的,请教是不是在xcode中还需要配置什么?


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE");
    mydb.setDatabaseName("db.db");
    mydb.setUserName("root");
    mydb.setPassword("123456");

    if(!mydb.open())
    {
        ui->label->setText("db cant open");
    }
    else
    {

        QSqlQuery query;
        query.exec("create table user(id integer primary key autoincrement,name varchar,password varchar)");

        query.exec("insert into user values(1,'a','aaa')");
        query.exec("select * from user");
        while(query.next())
        {
            QString str="user="+query.value(1).toString();
            ui->label->setText(str);
        }

    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

回复

使用道具 举报

尚未签到

2016-8-20 01:49:21 显示全部楼层
先确定一下文件路径,苹果这类带沙盒的系统对文件存放位置是有限制的。

可以用QStandarPath来看看有哪些位置可写
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-9-20 14:17:16 显示全部楼层
ios每一个APP都有一个存储空间,就是沙盒。APP之间不能相互通信。沙盒根目录结构:Documents、Library、temp。

Documents:用于存储用户数据,iTunes备份和恢复的时候会包括此目录,所以,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下。所以数据库目录选择放在这个目录下

以下参考代码,注意需要改成混合编码模式,把就是把cpp改成mm后缀
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
    NSString *path = [paths objectAtIndex:0];
    NSLog(@"path:%@", path);
    QString str=[path cStringUsingEncoding:NSASCIIStringEncoding];
    QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE");
    mydb.setDatabaseName(QString("%1/db.db").arg(str));
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了