當前位置:首頁 » 數據倉庫 » qt5連接sqlite資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

qt5連接sqlite資料庫

發布時間: 2022-10-29 21:15:19

① Qt5 linux 無法連接sqlite

先安裝好sqlite,然後去系統軟體源中找qt自帶的sqlite的驅動安裝。
Linux平台下解決Qt5連接mysql資料庫的問題:輸入sudoapt-getinstalllibqt5sql5-mysql解決,這種方法只能解決Qt是用sudoapt-getinstallqt-sdk命令裝的低版本的Qt5(如5、2、x)缺少MySQL驅動問題,如果你的Qt5版本為5、7、X,那麼就不能用這種方法解決,請參考下面的方法。

② 怎樣在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");//刪除資料庫
}
});

③ 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下連接讀寫sqlite資料庫

QT 自帶的資料庫是很好用的。
以下給一些我寫的例子:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加資料庫

db.setDatabaseName("note.db"); //創建一個note.db的文件存儲數據

db.open(); //開啟資料庫
query = QSqlQuery(db); //獲得訪問資料庫的query
query.exec(XXX); //執行指令(XXX為SQL指令)
db.close(); //關閉資料庫

大致只要知道以上例子就OK了。一般而言會將db變數作為全局變數或者數據成員,當需要訪問的時候就獲取一個query就可以了。
另外,要實現所提到的功能,要好好看看QString、QStringList,這兩玩意主要是臨時存放數據、分割數據等作用,另外,要看QFile、QDir、QFileInfo、QTextStream,這四個主要用來讀取文本數據。看看QVector或者QList等來存放讀出來的數據。
另外,要實現這玩意,SQL的語句不要求精通,但是基本的Create、Insert、Select、Delete等操作要准確無誤。否則出錯了QT是看不出來的。QT不會檢測SQL的准確性的。
再另外,在QT的編程中,C++和類都很重要,所以還是得看看。

⑤ qt如何連接sqlite資料庫

#include <QtGui/QApplication>
#include <QSqlDatabase>
#include <QtSql>
#include <QSQLiteDriver>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase(new QSQLiteDriver(),"QSQLITE");
db.setDatabaseName("test.db");
//test.db是通過SQLite程序創建的資料庫文件,當前文件夾下
if ( !db.open())
{
return 0;
}
return app.exec();
}

這是打開 後面的操作跟其他的資料庫操作一樣。還不明白可以追問。望採納 謝謝

⑥ 新手求問,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();

⑦ 請問在Linux系統中QT連接sqlite資料庫怎麼連接呢查了很多資料,我是初學者,請問高手能詳細點指點嗎

Ruby 1.8.2
Rails 1.0.0
SQLite 3.3.3
下載 sqlite-3_3_3.zip sqlitedll-3_3_3.zip
解壓它們,得到文件sqlite3.exe和sqlite3.dll;
復制它們到目錄[RUBY_HOME]/bin下面;
SQLite-Ruby 1.1.0
如下命令安裝該模塊是針對SQLite 3.x版本:
gem install sqlite3-ruby -r -y
SQLite 3.x的可視化工具:SQLite Database Browser
解壓它,我們得到軟體SQLite Database Browser 1.2.1.exe

⑧ Qt連接SQLite的連接問題,連接不上

我沒試過呀!高手會幫你!!!

⑨ qt 能直接連sql2008嗎

1. 確定QT編譯時已經編譯了QtSql。(默認的qt5,都已經支持了,如下目錄:C:\Qt\Qt5.3.0\5.3\msvc2013_opengl\plugins\sqldrivers里有相應的驅動動態庫

也可以通過如下代碼測試qt5是否支持SqlServer

#include <QApplication>

#include <QSqlDatabase>

#include <QStringList>

#include <QDebug>

int main(int argc, char* argv[])

{

QApplication app(argc, argv);

qDebug() << "Available drivers:";

QStringList drivers = QSqlDatabase::drivers();

foreach(QString driver, drivers) //列出Qt5所有支持的資料庫類型

qDebug() << "\t" << driver;

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

qDebug() << "ODBC driver valid?" << db.isValid(); //true為支持

}

輸出結果如下:

"QSQLITE""QMYSQL""QMYSQL3""QODBC""QODBC3""QPSQL""QPSQL7"ODBC driver valid? true

2. 若是沒有編譯,可以手動編譯了qt的ODBC插件。

可以通過編譯qt的時候加上 configure -plugin-sql-odbc來保證,也可以單獨編譯qt安裝包里的~\src\plugins\sqldrivers\odbcqmake -t vclib odbc.pronmake (註:windows中為mingw32-make)編譯後,在~\plugins\sqldrivers\下應該有qsqlodbcd4.dll(debug)或qsqlodbc4.dll

此時,可以用下面的程序,測試一下你的QT目前支持哪些資料庫訪問。

二、連接SQLServer

要注意的就是連接資料庫時使用的資料庫名,sqlserver和sqlite、mysql等是不同的,並不是直接寫入資料庫名稱。 而是DSN名。 如果你已經設置好了DSN,可以直接輸入DSN名。 如果沒有,可以採用DSN連接字元串直接連接ODBC資料庫。

1、直接設定DSN的字元串連接資料庫,很簡單。

/**

*函數介紹:創建資料庫連接

*輸入參數:

*返回值:無

*/

bool DataAccess::createConnection()

{

QStringList drivers = QSqlDatabase::drivers();

foreach(QString driver, drivers)

qDebug() << "\t" << driver;

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

qDebug() << "ODBC driver valid?" << db.isValid();

// 注意,對於express版本資料庫, 一定要加\\sqlexpress這種後綴 SERVER=58.67.161.109\\sqlexpress

QString dsn = "DRIVER={SQL SERVER};SERVER=58.67.161.109;DATABASE=RDBS;UID=RDBS_USER;PWD=RDBS_USER_7010387;";

db.setHostName("58.67.161.109"); //資料庫伺服器,我這里不需要

//即使dsn中已經設置了UID和PASSWD,仍然需要執行setUserName和setPassword的步驟

//還要注意這里的用戶名要有創建表的許可權,不然創建下面的表student會不成功。

db.setDatabaseName(dsn); //資料庫名

db.setUserName("RDBS_USER");//登錄名,我再dsn里設置UID和PWD後,就不需要設置了

db.setPassword("RDBS_USER_7010387");//密碼,我再dsn里設置UID和PWD後,就不需要設置了

if(!db.open ())

{

QSqlError error = db.lastError();

QMessageBox::warning (0, "Warning", QString("Failed to open database!Error:%1").arg(error.text()));

returnfalse;

}

returntrue;

}

注意:連接資料庫時, 一直連不上報錯: ConnectionOpen (Invalid Instance()) , 連接無效, 結果發現微軟對express版本資料庫是有限制的, 在SERVER欄位添加\\sqlexpress這樣後綴, 連接OK。

2、手動設置ODBC數據源,然後制定DSN

控制面板->系統和安全->管理工具->數據源(ODBC)

代碼:

QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");

db.setDatabaseName("testdsn");

db.setUserName("sa");

db.setPassword("scada");

三、下面是ODBC和OLEDB的連接字元串寫法:

1、ODBC連接字元串

//適合資料庫類型 連接方式

access "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"

dBase "Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;"

oracle "Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"

MSSQL server "Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;"

MS text "Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"

Visual Foxpro "Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"

MySQL "Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"

SQLite "Driver={SQLite3 ODBC Driver};Database=D:\SQLite\*.db"

PostgreSQL "Driver={PostgreSQL ANSI};server=127.0.0.1;uid=admin;pwd=pass;database=databaseName"

2、OLEDB連接字元串

//適合的資料庫類型 連接方式

access "Provider=microsoft.jet.oledb.4.0;data source=your_database_path;user id=admin;password=pass;"

oracle "Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"

MS SQL Server "Provider=SQLOLEDB;data source=machinename;initial catalog=dbname;userid=sa;password=pass;"

MS text "Provider=microsof.jet.oledb.4.0;data source=your_path;Extended Properties'text;FMT=Delimited'"