『壹』 QT 在當前目錄下可創建資料庫,為什麼在其他目錄創建資料庫會失敗一下是相關代碼。
("/sdcard/vb3.db");
你這目錄名,是在磁碟根目錄的sdcard文件夾里的vb3.db,
你根目錄有sdcard文件夾么?
如果要在當前目錄的sdcard文件夾里弄db,
那個目錄名是:
("./sdcard/vb3.db");
點號是當前目錄。
『貳』 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命令創建了資料庫 C:\StudentInfo\sutdentdata.db,並且建立了一個資料庫表student,該表有四個欄位ID、Name、Sex、Age,未向表中添加任何數據。
關於sqlite的簡單使用,可以參考我們的另一篇經驗。
2SQLite的簡單使用方法
在讀寫SQLite資料庫中,我們最主要用到的是QSqlDatabase類及QSqlQuery類,前者負責創建資料庫連接並打開資料庫,後者負責執行查詢操作。實際上前者也可以進行查詢操作並將結果返回給QSqlQuery對象,但是Qt並不建議這么做。
在幹活前,依然是先看看Assitant,這是培養獨立解決問題的一個好習慣。
好,下面給 錄入 按鈕的點擊事件編寫代碼。關於如何給按鈕的某一事件進行編碼,可以參考我們另一篇經驗。
首先在.pro文件中加上sql,然後別忘了#include <QSqlDatabase>以及#include <QSqlQuery>。
好了,下面在錄入按鈕的槽中加入如下代碼:
QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE","wconntosqlite");
mydb.setDatabaseName("c:\\StudentInfo\\studentdata.db");
if(mydb.open())
{
QSqlQuery query(mydb);
QString sqlstr="insert into student (ID,Name,Sex,Age) values ('"
+ui->le_id->text()+"','"
+ui->le_name->text()+"','"
+ui->le_sex->text()+"',"
+ui->le_age->text()+")";
bool isok=query.exec(sqlstr);
if(isok)
qDebug()<<"數據寫入成功";
}
上面我們先調用了QSqlDatabase的靜態函數addDatabase創建了一個名為wconntosqlite的連接。然後給其傳遞資料庫名稱。
如果資料庫打開成功,就創建一個關聯的QSqlQuery對象,最後由QSqlQuery來執行插入數據工作。
特別注意:QSqlQuery對象的創建必須在mydb open成功以後才行,否則會出錯。
我們來看看效果如何。
4c++怎麼做界面
我們接著來寫查詢按鈕的代碼,輸入以下代碼:
QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE","rconntosqlite");
mydb.setDatabaseName("c:\\StudentInfo\\studentdata.db");
if(mydb.open())
{
QSqlQuery query(mydb);
QString sqlstr="select * from student";
bool isok=query.exec(sqlstr);
if(isok)
qDebug()<<"數據讀取成功";
query.first();
QString result="學號:"+query.value(0).toString()+" "
+"姓名:"+query.value(1).toString()+" "
+"性別:"+query.value(2).toString()+" "
+"年齡:"+query.value(3).toString();
ui->lbl_query->setText(result);
}
與寫入數據基本差不多,這里需要特別注意的是query.first();。看看Assistant怎麼說的就知道了。原來,query對象在執行完查詢語句後,query的位置被置於一個不可用的位置,如果想從query中獲取數據,需要設置query到一個可用的記錄中才行。方法有好幾種,這里我們用了first()成員函數。
好,來看看運行結果。
可以看到軟體讀取的數據與控制台窗口的數據是一致的。
我們來總結下Qt操作SQLite資料庫的五步走法決:
第一步,建立一個連接:QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
第二步,關聯資料庫文件:db.setDatabaseName("這里你的資料庫文件路徑")
第三步,打開資料庫:db.open()
第四步,如果資料庫打開成功,就建立一個相關聯的QSqlQuery對象:QSqlQuery query(db)
第五步,執行SQL語句:query.exec("你的SQL語句字元串")
『肆』 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怎樣創建資料庫以及資料庫的操作
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連接資料庫並導入文件
可以使用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(); //關閉資料庫
一般而言會將db變數作為全局變數或者數據成員,當需要訪問的時候就獲取一個query就可以了。
要實現所提到的功能,要好好看看QString、QStringList,這兩玩意主要是臨時存放數據、分割數據等作用,另外,要看QFile、QDir、QFileInfo、QTextStream,這四個主要用來讀取文本數據。看看QVector或者QList等來存放讀出來的數據。
另外,要實現這玩意,SQL的語句不要求精通,但是基本的Create、Insert、Select、Delete等操作要准確無誤。否則出錯了QT是看不出來的。QT不會檢測SQL的准確性的。
『柒』 QT 簡單資料庫操作
看你的create語句中time varchar(20)),..這邊多了一個 ) ,可能導致建的表中實際只有兩個欄位:id和time。
然後你又插入了4個欄位,所以參數個數錯誤。。
『捌』 qt中創建資料庫sqlite名為mysql.db,向mysql.db中插入數據,不成功
你看看你的sql語句有沒有問題,把sql語句打出來
那你用一個sql連接工具看看,用命令行好像你這樣寫是新建資料庫sql.db的意思,打開的不是這樣的好像。你用工具看吧
『玖』 在QT Creator中如何創建Access資料庫
function singplay() {
var self = this;
this.prefix = "sing_play__fm_";
this.playIndex = -1;
this.listIndex = { PlayList: 0, MusicBox: 1 };
this.isLogin = false;
this.countMusicbox = -1;
this.cookieList = { PlayList: this.prefix + "0", MusicBox: this.prefix + "1" };
this.cookie;
this.agent;
this.init();
『拾』 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();
}