2016-04-24 70 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',你就在那裏。 –

相關問題