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

qt資料庫教程

發布時間: 2023-02-26 06:16:29

㈠ ubuntu linux 下使用Qt連接Mysql資料庫

Linux下完整的MySQL開發需要安裝伺服器端,如果安裝客戶端也沒什麼不好。直接在軟體中心搜mysql,把client和server選上。
環境說明:
ubuntu
10.04.2
QtSDK
(1.5G安裝包的那個)
mysql5.1
1.安裝MySQL
Linux下完整的MySQL開發需要安裝伺服器端,如果安裝客戶端也沒什麼不好。直接在軟體中心搜mysql,把client和server選上。
server在安裝時會提示為root用戶設置密碼,設一個好了。
我使用的是mysql5.1版本,用戶名密碼存儲在一個叫mysql的資料庫里,只有管理員級別才能看到。
如果直接在終端中輸入
mysql,可能會提示ERROR
1045
(28000),這是因為這時候你是以自己用戶名訪問資料庫,而目前資料庫中只有一個root用戶。沒關系,如果有必要,可以添加一個用戶進去:
mysql
-uroot
-p
--
以root用戶登錄
grant
usage
on
*.*
to
mmy@localhost;
--
授權名為mmy的用戶本地登錄,這里換成自己的用戶名就可以了
不過這時候直接mysql只有普通的許可權,創建資料庫、操作mysql都是不可以的,如果真有將其賦予管理員許可權的需要,可以自己查閱有關資料。
2.安裝Qt的MySQL驅動。
方法一:直接sudo
apt-get
install
libqt4-sql-mysql
,這是Qt4的mysql驅動,就不用自己費勁編譯了,不過可能會額外下載一些東西。

/usr/lib/qt4/plugins/sqldrivers/libqsqlmysql.so拷貝到你的QtSDK
sqldrivers目錄下,我當時是直接用普通許可權安裝,目錄為:~/QtSDK/Desktop/Qt/473/gcc/plugins/sqldrivers
方法二:其實你也可以sudo
apt-get
download
libqt4-sql-mysql,把包解壓縮,然後把裡面的so文件搜出來直接拷貝到那裡。
方法三:乖乖按照官方方法編譯,但是貌似可行性不大,因為新版本的QtSDK並沒有src目錄,默認也沒有mysql的驅動。
3.做個demo試一下
記得在pro文件中
QT
+=那裡加上sql,否則qmake是不會去找sql的相關部分的
復制代碼代碼如下:
#include
QtCore/QCoreApplication
#include
QSqlDatabase
#include
QDebug
int
main(int
argc,
char
*argv[])
{
QCoreApplication
a(argc,
argv);
QSqlDatabase
db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("study");
db.setUserName("root");
db.setPassword("tyh");
if(!db.open()){
qDebug()
"Unable
to
open
database";
}else{
qDebug()
"Database
connection
established";
}
return
a.exec();
}
這里study這個資料庫之前我已經創建過了,如果連接成功,就會顯示Database
connection
established。
我是建立的控制台程序哈。
軟體教程小編推薦:
Linux安裝配置MariaDB資料庫全程詳解
Linux系統怎麼設置開機密碼?
Linux啟動菜單修改教程

㈡ 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中怎樣連接MYsql資料庫,遠程連接資料庫等

1: windows 下登陸mysql 命令行,(1)進入cmd (2) cd mysql 安裝路徑/mysqlserver5.6/bin
(3) 使用命令mysql -u root -p 然後根據提示輸入密碼 進入命令行

select user(); //顯示當前用戶

2: 在同一台電腦上利用Qt 訪問資料庫
(1)顯示當前電腦上安裝的資料庫驅動
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() <<"/t" << driver;
(2)QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");/對 QMYSQL進行操作,本函數
有第二個參數 連接名
db.setHostName("localhost");//或127.0.0.1 本主機
db.setPort(3306);
db.setDatabaseName("example"); //對資料庫example進行操作
db.setUserName("wangxuetao"); //wangxuetao是一個對example資料庫有操作許可權的賬戶
db.setPassword("3791948");

於是mysql中增加一個賬戶可使用
Grant all previliges on *.* to 『wangxuetao』@』localhost』 identified by
『3791948』 with grant option;
Flush privileges; //更新

(3)db.open() 函數可由於檢測資料庫是否連接成功
cout<DBConnection();
2. m_sqlquery = new QSqlQuery("",m_sqldb);//statement 1:connect db with sql
query
3. if(result == R_OK)
4. {
5. result = m_sqlquery->exec("INSERT INTO children(fname,age) VALUES('A
nn2',13)");
6. if(!result)
7. qDebug()<<" [OK] "<<"EXEC successed";
8. m_sqlquery->exec("SELECT * FROM children c LIMIT 0,1000");
9. while(m_sqlquery->next())
10. {
11. qDebug()<value(0).toString()<value(1).
toString();
12. }
13. }

㈣ QT怎麼ssh連接mysql資料庫

在這里小編使用的是SQLyogEnt進行遠程連接配置了SSH的資料庫。通過桌面的SQLyogEnt運行資料庫客戶端。
在界面中點擊【新建】按鈕,在Mysql下填寫Mysql資料庫的ip地址、用戶名、密碼、埠(默認在3306)就好,資料庫名稱。這里跟普通的連接資料庫的方法一致。
這個時候讀者可以點擊一下【測試連接】,這個時候點擊測試連接去連接資料庫是不會成功的,因為資料庫配置了SSH訪問。如下圖:
配置完成Mysql信息後,在旁邊選擇【SSH】

㈤ 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連接資料庫並在dialog中顯示數據表的內容怎麼做

這個網上都搜得到,書上也有。 我提關鍵幾點:1.連接資料庫時,要在你這個工程的 .pro文件里 最後添上 QT +=sql
2.連接資料庫時,你連接用的用戶名要吧許可權設置高,否者,數據寫不進去

把數據讀出來方法比較多,有QT自帶的模板可用,你可以去借點書系統的看下就知道了

㈦ 用qt如何連接資料庫(簡答題)

連接mysql 資料庫
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql資料庫驅動
db.setHostName("localhost");
db.setDatabaseName("exampledb"); // 資料庫名稱
db.setUserName("sa"); // 用戶名
db.setPassword("1"); // 密碼
bool ok = db.open(); // 嘗試連接資料庫
if(ok)
{
QSqlQuery myquery;
if(myquery.exec("select * from employeedb"))
{
int num = 0;
if(db.driver()->hasFeature(QSqlDriver::QuerySize))
{
num = myquery.size(); // 如果支持結果影響的行數,那麼直接記錄下來
}
else
{
myquery.last(); //否則定位到結果最後
num = myquery.at() + 1;
}
//這里添加資料庫的查詢結果處理操作
}
else // 如果查詢失敗
{
QSqlError error = myquery.lastError();
}
}
else // 打開資料庫失敗
{
}

㈧ 用Qt做軟體時,備份,導入資料庫時候,進度條怎麼弄

一、備份資料庫1、打開SQL企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer

2、SQLServer組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄

3、選擇你的資料庫名稱(如論壇資料庫Forum)-->然後點上面菜單中的工具-->選擇備份資料庫

4、備份選項選擇完全備份,目的中的備份到如果原來有路徑和名稱則選中名稱點刪除,然後點添加,如果原來沒有路徑和名稱則直接選擇添加,接著指定路徑和文件名,指定後點確定返回備份窗口,接著點確定進行備份二、還原資料庫1、打開SQL企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer

2、SQLServer組-->雙擊打開你的伺服器-->點圖標欄的新建資料庫圖標,新建資料庫的名字自行取

3、點擊新建好的資料庫名稱(如論壇資料庫Forum)-->然後點上面菜單中的工具-->選擇恢復資料庫

4、在彈出來的窗口中的還原選項中選擇從設備-->點選擇設備-->點添加-->然後選擇你的備份文件名-->添加後點確定返回,這時候設備欄應該出現您剛才選擇的資料庫備份文件名,備份號默認為1(如果您對同一個文件做過多次備份,可以點擊備份號旁邊的查看內容,在復選框中選擇最新的一次備份後點確定)-->然後點擊上方常規旁邊的選項按鈕

5、在出現的窗口中選擇在現有資料庫上強制還原,以及在恢復完成狀態中選擇使資料庫可以繼續運行但無法還原其它事務日誌的選項。在窗口的中間部位的將資料庫文件還原為這里要按照你SQL的安裝進行設置(也可以指定自己的目錄),邏輯文件名不需要改動,移至物理文件名要根據你所恢復的機器情況做改動,如您的SQL資料庫裝在D:,那麼就按照您恢復機器的目錄進行相關改動改動,並且最後的文件名最好改成您當前的資料庫名(如原來是bbs_data.mdf,現在的資料庫是forum,就改成forum_data.mdf),日誌和數據文件都要按照這樣的方式做相關的改動(日誌的文件名是*_log.ldf結尾的),這里的恢復目錄您可以自由設置,前提是該目錄必須存在(如您可以指定d:sqldatabs_data.mdf或者d:sqldatabs_log.ldf),否則恢復將報錯

6、修改完成後,點擊下面的確定進行恢復,這時會出現一個進度條,提示恢復的進度,恢復完成後系統會自動提示成功,如中間提示報錯,請記錄下相關的錯誤內容並詢問對SQL操作比較熟悉的人員,一般的錯誤無非是目錄錯誤或者文件名重復或者文件名錯誤或者空間不夠或者資料庫正在使用中的錯誤,資料庫正在使用的錯誤您可以嘗試關閉所有關於SQL窗口然後重新打開進行恢復操作,如果還提示正在使用的錯誤可以將SQL服務停止然後重起看看,至於上述其它的錯誤一般都能按照錯誤內容做相應改動後即可恢復三、收縮資料庫一般情況下,SQL資料庫的收縮並不能很大程度上減小資料庫大小,其主要作用是收縮日誌大小,應當定期進行此操作以免資料庫日誌過大

1、設置資料庫模式為簡單模式:打開SQL企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer-->SQLServer組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄-->選擇你的資料庫名稱(如論壇資料庫Forum)-->然後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,然後按確定保存

2、在當前資料庫上點右鍵,看所有任務中的收縮資料庫,一般裡面的默認設置不用調整,直接點確定

3、收縮資料庫完成後,建議將您的資料庫屬性重新設置為標准模式,操作方法同第一點,因為日誌在一些異常情況下往往是恢復資料庫的重要依據四、設定每日自動備份資料庫強烈建議有條件的用戶進行此操作!

1、打開企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer-->SQLServer組-->雙擊打開你的伺服器

2、然後點上面菜單中的工具-->選擇資料庫維護計劃器

3、下一步選擇要進行自動備份的數據-->下一步更新數據優化信息,這里一般不用做選擇-->下一步檢查數據完整性,也一般不選擇

4、下一步指定資料庫維護計劃,默認的是1周備份一次,點擊更改選擇每天備份後點確定

5、下一步指定備份的磁碟目錄,選擇指定目錄,如您可以在D盤新建一個目錄如:d:databak,然後在這里選擇使用此目錄,如果您的資料庫比較多最好選擇為每個資料庫建立子目錄,然後選擇刪除早於多少天前的備份,一般設定4-7天,這看您的具體備份要求,備份文件擴展名一般都是bak就用默認的

6、下一步指定事務日誌備份計劃,看您的需要做選擇-->下一步要生成的報表,一般不做選擇-->下一步維護計劃歷史記錄,最好用默認的選項-->下一步完成

7、完成後系統很可能會提示SqlServerAgent服務未啟動,先點確定完成計劃設定,然後找到桌面最右邊狀態欄中的SQL綠色圖標,雙擊點開,在服務中選擇SqlServerAgent,然後點擊運行箭頭,選上下方的當啟動OS時自動啟動服務

8、這個時候資料庫計劃已經成功的運行了,他將按照您上面的設置進行自動備份

修改計劃:

1、打開企業管理器,在控制台根目錄中依次點開MicrosoftSQLServer-->SQLServer組-->雙擊打開你的伺服器-->管理-->資料庫維護計劃-->打開後可看到你設定的計劃,可以進行修改或者刪除操作五、數據的轉移(新建資料庫或轉移伺服器)一般情況下,最好使用備份和還原操作來進行轉移數據,在特殊情況下,可以用導入導出的方式進行轉移,這里介紹的就是導入導出方式,導入導出方式轉移數據一個作用就是可以在收縮資料庫無效的情況下用來減小(收縮)資料庫的大小,本操作默認為您對SQL的操作有一定的了解,如果對其中的部分操作不理解,可以咨詢動網相關人員或者查詢網上資料

1、將原資料庫的所有表、存儲過程導出成一個SQL文件,導出的時候注意在選項中選擇編寫索引腳本和編寫主鍵、外鍵、默認值和檢查約束腳本選項

2、新建資料庫,對新建資料庫執行第一步中所建立的SQL文件

3、用SQL的導入導出方式,對新資料庫導入原資料庫中的所有表內容

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