qt mysql怎么选表_Qt的Mysql数据库表操作(1)
Qt中的QSqlDatabase、QSqlQueryModel、QSqlRecord、QSqlTableModel等類為我們提供了快速開發(fā)數(shù)據(jù)庫(kù)的方式,支持多種數(shù)據(jù)庫(kù)連接,例如oracle,db2,Mysql,Sqlserver等數(shù)據(jù)庫(kù),QSqlDatabase類實(shí)現(xiàn)了數(shù)據(jù)庫(kù)連接的操作;QSqlQuery類用來執(zhí)行SQL語(yǔ)句,對(duì)數(shù)據(jù)庫(kù)記錄的Select、Insert、Update、Delete操作;QSqlRecord類 封裝數(shù)據(jù)庫(kù)所有記錄;QSqlTableModel?繼承QSqlQueryModel類?,該類提供了一個(gè)可讀寫單張SQL表的可編輯數(shù)據(jù)模型,功能:修改,插入,刪除,查詢,和排序等功能。
那么如何連接Mysql數(shù)據(jù)庫(kù)呢?我們一般使用靜態(tài)方法addDatabas類實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接:直接上代碼:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setPort(3306);
db.setHostName("139.129.21.226");
db.setDatabaseName("table");
db.setUserName("root");
db.setPassword("123abc");
if(db.open())
{
qDebug()<
qDebug()<
QSqlQuery query("show tables from admin");//admin數(shù)據(jù)庫(kù)里的所有表
}else{
qDebug()<
}
一般情況下,我們安裝Qt5以上版本,都自帶了數(shù)據(jù)庫(kù)驅(qū)動(dòng),只需要在程序里指明即可,有些情況下,會(huì)在連接時(shí)報(bào)缺該驅(qū)動(dòng),那么就需要要重寫編譯下對(duì)應(yīng)的數(shù)據(jù)庫(kù)驅(qū)動(dòng)了,詳細(xì)編譯過程,請(qǐng)查相關(guān)資料,這里只講操作,不再贅述。下面我們看下數(shù)據(jù)庫(kù)的操作:
1、QSqlQuery?創(chuàng)建表:
QSqlQuery query;
if(!query.exec("CREATE TABLE admin(id INTEGER PRIMARY KEY, name VARCHAR,passwdVARCHAR,create_time DATETIME,root VARCHAR, authority VARCHAR)"))
{
return query.lastError();
}
2、QSqlQuery?數(shù)據(jù)插入:
QSqlQuery?query;
query.exec("SELECT?*?FROM?admin ");?//?查詢的結(jié)果可能不止一條記錄,所以我們稱之為結(jié)果集
while?(query.next())
{
QString?id?=?query.value(0).toInt ();?//取第i條記錄第1個(gè)字段(從0開始計(jì)數(shù))的結(jié)果
int?name?=?query.value(0).toString ();?//取第i條記錄第2個(gè)字段的結(jié)果
}
seek(int n) :query指向結(jié)果集的第n條記錄。指定當(dāng)前的位置
first() :query指向結(jié)果集的第一條記錄。
last() :query指向結(jié)果集的最后一條記錄。
next() :query指向下一條記錄,每執(zhí)行一次該函數(shù),便指向相鄰的下一條記錄。
previous() :query指向上一條記錄,每執(zhí)行一次該函數(shù),便指向相鄰的上一條記錄。
record() :獲得現(xiàn)在指向的記錄。
value(int n) :獲得屬性的值。其中n表示你查詢的第n個(gè)屬性
int rowNum = query.at(); //獲取query所指向的記錄在結(jié)果集中的編號(hào)
int fieldNo =query.record().indexOf(“name”); //返回"name"的列號(hào)
int columnNum =query.record().count();?//獲取每條記錄中屬性(即列)的個(gè)數(shù)
3、QSqlQuery?事務(wù)操作:
操作函數(shù):transaction(),commit()提交,rollback()回滾
操作事務(wù)前,先判斷該數(shù)據(jù)庫(kù)是否支持事務(wù)操作。hasFeature是QSQLDriver類函數(shù)
if?(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)){?...?}?//
插入一條記錄,然后提交事務(wù)
QSqlDatabase::database().transaction();
QSqlQuery query;
query.exec("SELECT id FROM admin WHERE id=12");
if (query.next())
{
query.exec("INSERT INTO T_STUDENT (id,name,root) VALUES (3,'lixiao',1)");
}
QSqlDatabase::database().commit();
4、綜合示例:
ui->tableWidget = new QTableWidget(6,6);
//設(shè)置表格行標(biāo)題的對(duì)齊方式
ui->tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
ui->vlaout->addWidget(ui->tableWidget);
//設(shè)置行表題
QStringList rowLabels;
rowLabels << "Line1" << "Line2" << "Line3" << "Line4"<< "Line5"<< "Line6";
ui->tableWidget->setVerticalHeaderLabels(rowLabels);
//設(shè)置每一行的高度
for(int i = 0; i < 6; i++)
ui->tableWidget->setRowHeight(i, 22);
//自動(dòng)調(diào)整最后一列的寬度使它和表格的右邊界對(duì)齊
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
//設(shè)置表格的選擇方式
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
//設(shè)置編輯方式
ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
//設(shè)置表格的內(nèi)容
for (int row = 0; row < 6; ++row)
{
QTableWidgetItem *item0, *item1, *item2, *item3, *item4 , *item5;
item0 = new QTableWidgetItem;
item1 = new QTableWidgetItem;
item2 = new QTableWidgetItem;
item3 = new QTableWidgetItem;
item4 = new QTableWidgetItem;
item5 = new QTableWidgetItem;
QSqlQuery query1("select * from admin");//查詢表的內(nèi)容
while (query1.next()) {
QString id = query1.value(0).toString();//表第1個(gè)字段的內(nèi)容
QString name = query1.value(1).toString();//表第2個(gè)字段的內(nèi)容
QString passwd = query1.value(2).toString();//表第3個(gè)字段的內(nèi)容
QString create_time = query1.value(3).toString();//表第4個(gè)字段的內(nèi)容
QString root = query1.value(4).toString();//表第5個(gè)字段的內(nèi)容
QString authority = query1.value(5).toString();//表第6個(gè)字段的內(nèi)容
qDebug()<
qDebug()<
qDebug()<
qDebug()<
qDebug()<
qDebug()<
item0->setText(id);
ui->tableWidget->setItem(row, 0, item0);
item1->setText(name);
ui->tableWidget->setItem(row, 1, item1);
item2->setText(passwd);
ui->tableWidget->setItem(row, 2, item2);
item3->setText(create_time);
ui->tableWidget->setItem(row, 3, item3);
item4->setText(root);
ui->tableWidget->setItem(row, 4, item4);
item5->setText(authority);
ui->tableWidget->setItem(row, 5, item5);
}
} ui->tableWidget->show();如圖1所示:
圖1?? 后臺(tái)管理測(cè)試數(shù)據(jù)庫(kù)表操作實(shí)例
總結(jié)
以上是生活随笔為你收集整理的qt mysql怎么选表_Qt的Mysql数据库表操作(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Travis CI mysql_DevO
- 下一篇: mysql select from us