採用將項目中的sqlite文件拷到android內存卡上的固定位置,先判斷位置上是否存在sqlite文件,不存在則復制文件。 sqlite可放在res的raw目錄下,亦可放在assets下,放在assets下,可新建其他層次目錄,本例選擇assets 1.首先,添加sdcard許可權在An..
② 新手求問,Qt中操作sqlite資料庫報錯,No query Unable to fetch row
setInterval(函數名,1000); t: Timer = new Timer(1000, 5); t.addEventListener(TimerEvent.TIMER,函數名); t.addEventListener(TimerEvent.TIMER_COMPLETE, 函數名); t.start();
③ qt操作sqlite 如何使用vacuum命令
qt操作sqlite 如何使用vacuum命令?
使用Qt操作SQLite,可以使用QSqlQuery對象來執行VACUUM命令。例如:
// 創建一個資料庫連接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydb.sqlite"); if(!db.open()) { qDebug() << "Error: connection with database fail"; } else { qDebug() << "Database: connection ok"; } // 執行 VACUUM 命令 QString queryStr = "VACUUM;"; QSqlQuery query(queryStr, db); if (!query.exec()) { qDebug() << "Error: Vacuum failed" ; } else { qDebug() << "Vacuum successful!" ; }
④ qt如何調用sqlite資料庫
//自己設置連接名,不使用默認連接名
if(SdbSqlite.contains("Conn2sqlite"))
{
SdbSqlite=QSqlDatabase::database("Conn2sqlite");
}
else
{
SdbSqlite=QSqlDatabase::addDatabase(
"QSQLITE","Conn2sqlite");
}
SdbSqlite.setDatabaseName("FiveChess.database");//資料庫名稱
這是連接
if(SdbSqlite.open())
{
intRltRowNumber=0;//查詢出來的結果列數
QStringStrSql1=
QString("selectname,grade,integration,round,victory,defeat,rank"
"frommemberwhereaccount='%0'andpassword='%1';")
.arg(StrAcn,StrPsdOrNew);
QSqlQueryquery1(SdbSqlite);
query1.exec(StrSql1);
while(query1.next())
{
if(SdbSqlite.driver()->hasFeature(QSqlDriver::QuerySize))
{
//速度快
RltRowNumber=query1.size();
}
else
{
//速度很慢
//實際執行的是這個
query1.last();
RltRowNumber=query1.at()+1;
}
}
SdbSqlite.close();
}
這是查詢
⑤ qt怎樣創建資料庫以及資料庫的操作
QT創建和插入的操作代碼如下:
bool database::createDatabase()
{
QSqlQuery query; // 此處請查詢 query的相關操作
qDebug() << "Start to create table...";
//create table: User
query.exec("CREATE TABLE [User] ( [userId] VARCHAR(40) NOT NULL, [username] VARCHAR(40) NOT NULL, [email] VARCHAR(40), [password] VARCHAR(40), [city] VARCHAR(20), PRIMARY KEY([userId]) )"); // 一定注意不要拼寫錯誤,引號內是不提示拼寫錯誤的。
//create table: Connect
query.exec("CREATE TABLE [Connect] ( [LeftUser] VARCHAR(40) NOT NULL, [RightUser] VARCHAR(40) NOT NULL, [relation] INTEGER DEFAULT '0' NULL, PRIMARY KEY ([LeftUser], [RightUser]))");
if (query.lastError().isValid())
{
qDebug() << query.lastError();
return false;
}
else
{
qDebug() << "Create database successfully.";
}
return true;
}
插入操作
bool database::adser( User user )
{
if (!db.isOpen())
{
createconnection();
}
QSqlQuery query;
qDebug() << "start to insert data";
query.exec("INSERT INTO [User] ( userId, username, email, password, city) VALUES(?,?,?,?,?)");
QVariantList userId;
userId << user.getUserId();
query.addBindValue(userId);
QVariantList username;
username << user.getUserName();
query.addBindValue(username);
QVariantList email;
email << user.getEmail();
query.addBindValue(email);
QVariantList password;
password << user.getPassword();
query.addBindValue(password);
QVariantList city;
city << user.getCity();
query.addBindValue(city);
try
{
if (!query.execBatch())
{
qDebug() << query.lastQuery();
qDebug() << query.lastError();
return NULL;
}
}
catch(...)
{
QMessageBox::critical(0, "Add New Node error!",
"Unable to add a new Node!/n/n"
"Click Cancel to exit.", QMessageBox::Cancel);
}
if( !UpdateConnectTable(user.getUserId(),user.getUserId(),2))
{
QMessageBox::critical(0,"","Update table Connect error");
return NULL;
}
return true;
}
⑥ 如何用qt使用sqlite資料庫,寫入變數
如何用qt使用sqlite資料庫,寫入變數
QString sql = "insert into info values('"; sql += usr; sql += "','"; sql += pwd; sql += "')"; query.exec(sql) 大概是這樣,具體你對一下,可能有寫錯的地方 可一把這個debug出來,完了放到一個資料庫軟體中 看下能執行不
⑦ Qt如何實現對SQLite的寫入與更新操作的,急!
點擊一下查看按鈕,會添加一條信息,在pc機上很容易實現了,但在Arm開飯板上,資料庫能打開但執行插入的操作的時候總是報錯,我把我能想到的可能都想到了,1,修改了一下資料庫的許可權,2,export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Trolltech/QtEmbedded-4.7.0-arm/plugins/sqldrivers
,sqlite庫的路徑也加上了,但運行結果是一樣的,錯誤提示不是打開資料庫失敗,就是動態庫超出鏈接隊列什麼的(英語不太好),總之不行。後來我決定採取比較二的選擇,在arm板linux系統上跑sqlite插件,後來還是以失敗告終(但得到了好多啟發,下片博文講),無奈我想到的辦法是整一個好的sqliteDemo
在板子上跑一下,執行sql語句的時候還是不行,報錯信息是打開資料庫失敗,無奈做了下一步決定,重燒了一下文件系統,和內核,結果還是不行,在崩潰的邊緣,向老大求教,搗鼓了一陣,結果把生成的可執行文件放到了根目錄下成功了!可以對資料庫進行各種操作,我把我自己寫的Qt
sqlite的小demo也放到了根目錄下結果也成功運行了,很奇怪呀!網上還有人說友善的arm板子對資料庫的支持不好。
⑧ qt怎樣創建資料庫以及資料庫的操作
qt可以實現連接各種資料庫,這里介紹qt自帶的一種資料庫(Qsqlite)
#include<QSqlQuery>
#include<QObject>
#include<QVariantList>
#include<QDebug>
#include<QSqlError>
#include<QTextCodec>
#include<QObject>
staticboolcreateConnection()
{QSqlDatabasedb=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mytest.db");
if(!db.open())
returnfalse;
QSqlQueryquery;
//query.exec(QObject::tr("createtablestudent(idintprimarykey,namevchar)"));
//query.exec(QObject::tr("insertintostudentvalues(0,'劉')"));
////query.exec(QObject::tr("insertintostudentvalues(1,'剛')"));
//query.exec(QObject::tr("insertintostudentvalues(2,'紅')"));
//query.prepare("insertintostudentvalues(?,?)");
//-------------------------------------------------------
//通過下面這段代碼可以實現向資料庫插入變數
//--------------------------------------------------------
QVariantListages;
intx1,x2,x3,x4;
x1=12;
x2=13;
x3=14;
x4=15;
ages<<x1<<x2<<x3<<x4;
query.addBindValue(ages);
QVariantListnames;
names<<QObject::tr("小王")<<QObject::tr("小明")<<QObject::tr("小張")<<QObject::tr("小新");//如果要提交空串,用QVariant(QVariant::String)代替名字
query.addBindValue(names);
if(!query.execBatch())//進行批處理,如果出錯就輸出錯誤
qDebug()<<query.lastError();
returntrue;
}
#endif//DATABASE_H
然後用QSqlTableModel實現資料庫數據顯示
⑨ 怎樣在Qt下連接讀寫sqlite資料庫
採用將項目中的sqlite文件拷到android內存卡上的固定位置,先判斷位置上是否存在sqlite文件,不存在則復制文件。 sqlite可放在res的raw目錄下,亦可放在assets下,放在assets下,可新建其他層次目錄,本例選擇assets
1.首先,添加sdcard許可權在AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在activity中有如下代碼
2.Java代碼
button2.setOnClickListener(new Button.OnClickListener() {
@Override
publicvoid onClick(View arg0) {
try{
String DATABASE_PATH = android.os.Environment.getExternalStorageDirectory().getAbsolutePath()
+ "/testdb"; //將要存放於的文件夾
String DATABASE_FILENAME = "testDatabase.db"; //文件名
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
// 如果/sdcard/testdb目錄中存在,創建這個目錄
if (!dir.exists())
dir.mkdir();
// 如果在/sdcard/testdb目錄中不存在
// test.db文件,則從asset\db目錄中復制這個文件到
// SD卡的目錄(/sdcard/testdb)
if (!(new File(databaseFilename)).exists()) {
// 獲得封裝testDatabase.db文件的InputStream對象
AssetManager asset=getAssets();
InputStream is=asset.open("db/testDatabase.db");
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = newbyte[8192];
int count = 0;
// 開始復制testDatabase.db文件
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
asset.close();
}
SQLiteDatabase mSQLiteDatabase=openOrCreateDatabase(databaseFilename, Activity.MODE_PRIVATE, null);//有則打開,沒有創建
Cursor cur=mSQLiteDatabase.rawQuery("select * from table1", null);
if(cur!=null){
if(cur.moveToFirst()){
do{
int idColumnIndex=cur.getColumnIndex("id");
int numColumnIndex=cur.getColumnIndex("num");
int dataColumnIndex=cur.getColumnIndex("data");
int id=cur.getInt(idColumnIndex);
int num=cur.getInt(numColumnIndex);
String data=cur.getString(dataColumnIndex);
System.out.println("id:"+id+";num:"+num+";data:"+data);
}while(cur.moveToNext());
cur.close();
}
}
mSQLiteDatabase.close();//關閉資料庫連接
}catch(Exception e){
e.printStackTrace();
}
//deleteDatabase("testDatabase.db");//刪除資料庫
}
});