① 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 簡單資料庫操作
看你的create語句中time varchar(20)),..這邊多了一個 ) ,可能導致建的表中實際只有兩個欄位:id和time。
然後你又插入了4個欄位,所以參數個數錯誤。。
③ qt資料庫應用編程實驗,實現了哪些功能
大致只要知道以上例子就OK了。一般而言會將db變數作為全局變數或者數據成員,當需要訪問的時候就獲取一個query就可以了。
另外,要實現所提到的功能,要好好看看QString、QStringList,這兩玩意主要是臨時存放數據、分割數據等作用,另外,要看QFile、QDir、QFileInfo、QTextStream,這四個主要用來讀取文本數據。看看QVector或者QList等來存放讀出來的數據。
另外,要實現這玩意,SQL的語句不要求精通,但是基本的Create、Insert、Select、Delete等操作要准確無誤。否則出錯了QT是看不出來的。QT不會檢測SQL的准確性的。
再另外,在QT的編程中,C++和類都很重要,所以還是得看看。
④ QT資料庫
網上下載「精通QT4編程.pdf」或「QT4從入門到精通.pdf」,裡面有較詳細的說明
⑤ qt的資料庫實現是怎樣的
完整的代碼給你了:
data.h
#define DB_SALES_DRIVER "QMYSQL3"
#define DB_SALES_DBNAME "CAAS"
#define DB_SALES_USER "root"
#define DB_SALES_PASSWD ""
#define DB_SALES_HOST ""
main.cpp
#include <qapplication.h>
#include <qsqldatabase.h>
#include <qsqlquery.h>
#include <qsqlcursor.h>
#include <qtextedit.h>
#include <qstring.h>
#include <qtextcodec.h>
#include <qvbox.h>
#include "data.h"
#include <stdio.h>
#include <qpushbutton.h>
class MyQVBox : public QVBox
{
public:
MyQVBox( QWidget *parent=0, const char *name=0 );
//public slots:
// refValue(QSrting lzw);
};
MyQVBox::MyQVBox( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QString Lzw("\n");
QSqlDatabase *defaultDB = QSqlDatabase::addDatabase(DB_SALES_DRIVER);
if ( defaultDB )
{
defaultDB->setDatabaseName( DB_SALES_DBNAME );
defaultDB->setUserName( DB_SALES_USER );
defaultDB->setPassword( DB_SALES_PASSWD );
defaultDB->setHostName( DB_SALES_HOST );
if ( defaultDB->open() )
{
//插入數據
QSqlQuery query("INSERT INTO test(ID,Name,Age) VALUES(1155, 'Ginger', 125);" );
//提取數據
QSqlCursor cur( "test" ); // 指定表/視圖名稱
cur.select(); // 我們將檢索每一條記錄
while ( cur.next() )
{
qDebug( cur.value( "ID" ).toString() + ": " +
cur.value( "Name" ).toString() + " " +
cur.value( "Age" ).toString() );
Lzw.append(cur.value( "ID" ).toString() + ": " +
cur.value( "Name" ).toString() + " " +
cur.value( "Age" ).toString()+"\n");
}
//qDebug(Lzw);
printf("aaaaaaa");
}
}
QString ustr = (QTextCodec::codecForLocale())->toUnicode(Lzw);
QString sstr = (QTextCodec::codecForLocale())->toUnicode("刷新");
QTextEdit *myEdit = new QTextEdit(this,0);
myEdit->setText(ustr);
QPushButton *quit = new QPushButton(sstr, this, "quit" );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
MyQVBox *mybox = new MyQVBox(0,0);
//mybox->setText(ustr);
app.setMainWidget(mybox);
mybox->show();
return app.exec();
}
⑥ QT中資料庫問題
1.query內封裝了sql語句,調用sql語句操作資料庫第一步先構建QSqlQuery。
2.str 是一條sql語句,意思是查找list表中num=%1的所有行,%1的值由num賦予。
3.query.exec執行了str這條sql語句。此時如果sql語句沒問題,query中已經保存了查詢結果。
4.query.next意思是如果查詢結果中有下一條(默認從第0條開始),返回true 否則返回false.
是人都應該懂了
⑦ qt怎麼開發資料庫程序
不知道QTable是什麼,不過可以用分頁的辦法來處理數據,也就是說最好用可以支持SQL查詢的組件,在裡面語句裡面用分頁top 100,「沒有客戶端可以讓你如此豪放的處理數據」--李維語
⑧ qt編程中如何為QSqlquery對象指定資料庫
data.h
#define DB_SALES_DRIVER "QMYSQL3"
#define DB_SALES_DBNAME "CAAS"
#define DB_SALES_USER "root"
#define DB_SALES_PASSWD ""
#define DB_SALES_HOST ""
main.cpp
#include <qapplication.h>
#include <qsqldatabase.h>
#include <qsqlquery.h>
#include <qsqlcursor.h>
#include <qtextedit.h>
#include <qstring.h>
#include <qtextcodec.h>
#include <qvbox.h>
#include "data.h"
#include <stdio.h>
#include <qpushbutton.h>
class MyQVBox : public QVBox
{
public:
MyQVBox( QWidget *parent=0, const char *name=0 );
//public slots:
// refValue(QSrting lzw);
};
MyQVBox::MyQVBox( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QString Lzw("\n");
QSqlDatabase *defaultDB = QSqlDatabase::addDatabase(DB_SALES_DRIVER);
if ( defaultDB )
{
defaultDB->setDatabaseName( DB_SALES_DBNAME );
defaultDB->setUserName( DB_SALES_USER );
defaultDB->setPassword( DB_SALES_PASSWD );
defaultDB->setHostName( DB_SALES_HOST );
if ( defaultDB->open() )
{
//插入數據
QSqlQuery query("INSERT INTO test(ID,Name,Age) VALUES(1155, 'Ginger', 125);" );
//提取數據
QSqlCursor cur( "test" ); // 指定表/視圖名稱
cur.select(); // 我們將檢索每一條記錄
while ( cur.next() )
{
qDebug( cur.value( "ID" ).toString() + ": " +
cur.value( "Name" ).toString() + " " +
cur.value( "Age" ).toString() );
Lzw.append(cur.value( "ID" ).toString() + ": " +
cur.value( "Name" ).toString() + " " +
cur.value( "Age" ).toString()+"\n");
}
//qDebug(Lzw);
printf("aaaaaaa");
}
}
QString ustr = (QTextCodec::codecForLocale())->toUnicode(Lzw);
QString sstr = (QTextCodec::codecForLocale())->toUnicode("刷新");
QTextEdit *myEdit = new QTextEdit(this,0);
myEdit->setText(ustr);
QPushButton *quit = new QPushButton(sstr, this, "quit" );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}
int main( int argc, char *argv[] )
{
QApplication app( argc, argv );
MyQVBox *mybox = new MyQVBox(0,0);
//mybox->setText(ustr);
app.setMainWidget(mybox);
mybox->show();
return app.exec();
}
⑨ 求一段用Qt來實現資料庫讀取並顯示成折線圖的代碼
[cpp]viewplainprint?
/*************************************************
折線圖繪制
author周翔
2012-8-14
對外提供介面
voidshowData(intdata);接受外部的折線數據
voidsetSingleUnitX(constint&value);設置x軸的單位像素
voidstartUpdataTimer(intmsecond);定時器更新折線圖
voidstopUpdataTimer();關閉定時器
*************************************************/
#ifndefLINEGRAPHWIDGET_H
#defineLINEGRAPHWIDGET_H
#include<QWidget>
#include<QPen>
#include<QPainter>
#include<QResizeEvent>
//#include<QDebug>
#include<QTimer>
structpoint
{
intx;
inty;
};
classLineGraphWidget:publicQWidget
{
Q_OBJECT
public:
//mix和max為折線的y軸的數據范圍
explicitLineGraphWidget(intmin,intmax,QWidget*parent=0);
voidsetSingleUnitX(constint&value){singleUnitX=value;}//設置x軸的一個單位佔多少個像素,默認10
//支持定時器定時更新
voidstartUpdataTimer(intmsecond);
voidstopUpdataTimer();
signals:
//支持實時更新
voidnewDataCome();//有新數據到來時發出的折線圖更新信號
publicslots:
/**
*@briefshowData
*@paramadress地址
*@param_data數據
*/
voidshowData(constQString&adress,int_data);//接受來之外部的數據
/**
*@briefslt_showData接受外部數據
*@paramname設備名
*@param_data數據
*/
voidslt_showData(ushortname,int_data);
protected:
voidpaintEvent(QPaintEvent*);
voidresizeEvent(QResizeEvent*e);
private:
QStringm_currentNodeAdress;//當前顯示的節點的地址
ushortm_currentNodeName;//當前節點的設備名
QList<int>xList;
QList<int>yList;
intCounter;//窗口的長和寬
intwidgetX;
intwidgetY;
//折線圖的顯示範圍
intrangeMin;
intrangeMax;
//根據窗口和范圍得出的單位長,x軸,y軸
intsingleUnitX;
intsingleUnitY;
//根據窗口得出的多少個單位,x軸,y軸
intsumUnitX;
intsumUnitY;
pointbasePoint;//折線圖的原點
pointxAxisEndPoint;//X軸的終點
pointyAxisEndPoint;//Y軸的終點
QTimer*timer;
voidgetSumUnitX();
voidgetSingleUnitY();
voidinitGraph();
voidflush();//數據傳入的節點不是現在的當前的節點的時候,刷新畫面,清除所有的值
};