qt mysql怎么选表_Qt的Mysql数据库表操作(1)
Qt中的QSqlDatabase、QSqlQueryModel、QSqlRecord、QSqlTableModel等類為我們提供了快速開發數據庫的方式,支持多種數據庫連接,例如oracle,db2,Mysql,Sqlserver等數據庫,QSqlDatabase類實現了數據庫連接的操作;QSqlQuery類用來執行SQL語句,對數據庫記錄的Select、Insert、Update、Delete操作;QSqlRecord類 封裝數據庫所有記錄;QSqlTableModel?繼承QSqlQueryModel類?,該類提供了一個可讀寫單張SQL表的可編輯數據模型,功能:修改,插入,刪除,查詢,和排序等功能。
那么如何連接Mysql數據庫呢?我們一般使用靜態方法addDatabas類實現數據庫的連接:直接上代碼:
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數據庫里的所有表
}else{
qDebug()<
}
一般情況下,我們安裝Qt5以上版本,都自帶了數據庫驅動,只需要在程序里指明即可,有些情況下,會在連接時報缺該驅動,那么就需要要重寫編譯下對應的數據庫驅動了,詳細編譯過程,請查相關資料,這里只講操作,不再贅述。下面我們看下數據庫的操作:
1、QSqlQuery?創建表:
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?數據插入:
QSqlQuery?query;
query.exec("SELECT?*?FROM?admin ");?//?查詢的結果可能不止一條記錄,所以我們稱之為結果集
while?(query.next())
{
QString?id?=?query.value(0).toInt ();?//取第i條記錄第1個字段(從0開始計數)的結果
int?name?=?query.value(0).toString ();?//取第i條記錄第2個字段的結果
}
seek(int n) :query指向結果集的第n條記錄。指定當前的位置
first() :query指向結果集的第一條記錄。
last() :query指向結果集的最后一條記錄。
next() :query指向下一條記錄,每執行一次該函數,便指向相鄰的下一條記錄。
previous() :query指向上一條記錄,每執行一次該函數,便指向相鄰的上一條記錄。
record() :獲得現在指向的記錄。
value(int n) :獲得屬性的值。其中n表示你查詢的第n個屬性
int rowNum = query.at(); //獲取query所指向的記錄在結果集中的編號
int fieldNo =query.record().indexOf(“name”); //返回"name"的列號
int columnNum =query.record().count();?//獲取每條記錄中屬性(即列)的個數
3、QSqlQuery?事務操作:
操作函數:transaction(),commit()提交,rollback()回滾
操作事務前,先判斷該數據庫是否支持事務操作。hasFeature是QSQLDriver類函數
if?(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)){?...?}?//
插入一條記錄,然后提交事務
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);
//設置表格行標題的對齊方式
ui->tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
ui->vlaout->addWidget(ui->tableWidget);
//設置行表題
QStringList rowLabels;
rowLabels << "Line1" << "Line2" << "Line3" << "Line4"<< "Line5"<< "Line6";
ui->tableWidget->setVerticalHeaderLabels(rowLabels);
//設置每一行的高度
for(int i = 0; i < 6; i++)
ui->tableWidget->setRowHeight(i, 22);
//自動調整最后一列的寬度使它和表格的右邊界對齊
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
//設置表格的選擇方式
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
//設置編輯方式
ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked);
//設置表格的內容
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");//查詢表的內容
while (query1.next()) {
QString id = query1.value(0).toString();//表第1個字段的內容
QString name = query1.value(1).toString();//表第2個字段的內容
QString passwd = query1.value(2).toString();//表第3個字段的內容
QString create_time = query1.value(3).toString();//表第4個字段的內容
QString root = query1.value(4).toString();//表第5個字段的內容
QString authority = query1.value(5).toString();//表第6個字段的內容
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?? 后臺管理測試數據庫表操作實例
總結
以上是生活随笔為你收集整理的qt mysql怎么选表_Qt的Mysql数据库表操作(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Travis CI mysql_DevO
- 下一篇: gazebo卡了_ardupilot g