2016-04-24 15 views
0

sqliteデータベースに接続してAndroidアプリを作成したいと思います。
しかし、私はアプリを実行するときに私は言ったエラーを与える:データベースが開いていない。qtで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、FIRSTNAME、LASTNAME、年齢)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レコード= model.record(0);結果= record.value( "firstname")。toString(); }

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

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

答えて

1

あなたは、Android上で、おそらくアプリから書き込み可能ではありません、現在の作業ディレクトリ(./myfile.sqlite)、中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'を使ってください。あなたはそこにいます。 –

関連する問題