2016-04-24 74 views
0

我想连接sqlite数据库并编写一个Android应用程序。
但是,当我运行的应用程序,我给了一个错误说:数据库未打开。如何通过q​​t连接到sqlite并运行它在android

#include "csqlconnect.h" 
#include <QFile> 
#include <QSqlQuery> 
#include <QMessageBox> 
#include <QDebug> 
#include <QSql> 
#include <QSqlError> 
#include <QSqlTableModel> 
#include <QSqlRecord> 

CSqlConnect::CSqlConnect() 
{ 
db = QSqlDatabase::addDatabase("QSQLITE","MyConnection"); 
QFile dfile("./myfile.sqlite"); 
bool dbf=dfile.exists(); 
if (!dbf) 
{ 
QFile::copy("assets:/myfile.sqlite", "./myfile.sqlite"); 
QFile::setPermissions("./myfile.sqlite",QFile::WriteOwner | QFile::ReadOwner); 
} 
db.setDatabaseName("myfile.sqlite"); 
bool open=db.open(); 
if(!open) 
{ 
QMessageBox::warning(0, "Failed to connect!", "Error connecting to  database: "+db.lastError().driverText()); 
    // qDebug()<<"Failed!!!!"; 
} 

if(open) 
{ 
QSqlQuery query; 
query.exec("create table person " 
     "(id integer primary key, " 
     "firstname varchar(20), " 
     "lastname varchar(30), " 
     "age integer)"); 

}

QSqlQuery query2; 

query2.prepare( “INSERT INTO人(ID,名字,姓氏,年龄)VALUES(:ID,:FIRSTNAME,:LASTNAME,:AGE)”); query2.bindValue(“:ID”,1); query2.bindValue(“:FIRSTNAME”,“ali”); query2.bindValue(“:LASTNAME”,“alavi”); query2.bindValue(“:AGE”,24); query2.exec(); QSqlTableModel模型; model.setTable(“person”); model.select(); QSqlRecord record = model.record(0); result = record.value(“firstname”)。toString(); }

QString CSqlConnect::getValue() 
{ 
    return result; 
} 

CSqlConnect::~CSqlConnect() 
{ 
db.close(); 
} 

回答

1

你想创建在当前工作目录(./myfile.sqlite),这很可能不是从应用程序中可写,Android上的SQLite的文件。

更好地QStandardPaths得到明确可写的路径:

const auto path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); 

errno = 0; 
if (!QDir(path).mkpath()) { 
    // return error, get details from strerror(errno) 
    … 
    return; 
} 

db.setDatabaseName(path + QStringLiteral("/myfile.sqlite")); 
if (!db.open()) { 
    // handle error 
    … 
    return; 
} 

… 
+0

让人惊奇的是这个答案是如何努力在谷歌找到。在来这里之前浪费了2个小时。对于那些充满愤怒和沮丧的人来说:现在只需使用'#ifdef Q_OS_ANDROID',你就在那里。 –

相关问题