Qt_SQL数据库开发
来源:互联网 发布:标准acl是基于目标端口 编辑:程序博客网 时间:2024/09/21 09:03
//2011年8月30日 晴
//头文件 connection.h
#ifndef CONNECTION_H#define CONNECTION_H#include <QObject>#include <QTextCodec>#include <QDebug>#include <QSqlDatabase>#include <QSqlQuery>bool static createConnection(){ QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //1.定义数据库的驱动程序 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //2.定义数据库名字 //db.setDatabaseName(":memory:"); //内存中的数据库,只在程序运行的时候存在 db.setDatabaseName("test.db"); //物理上载磁盘上存在的数据库 //3.打开数据库 if(!db.open()) { qDebug()<<"数据库打开失败"; return false; } //4.操作数据库中的数据 QSqlQuery query; //创建表 query.exec("create table Stu(id int primary key, name varchar(16));"); //插入数据 query.exec(QObject::tr("insert into Stu values(101, '张三丰');")); query.exec(QObject::tr("insert into Stu values(102, '张无忌');")); query.exec(QObject::tr("insert into Stu values(103, '赵敏');")); query.exec(QObject::tr("insert into Stu values(104, '周芷若');")); query.exec(QObject::tr("insert into Stu values(105, '小昭');")); return true;}#endif // CONNECTION_H
//widget.h头文件#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QSqlTableModel>namespace Ui { class Widget;}class Widget : public QWidget { Q_OBJECTpublic: Widget(QWidget *parent = 0); ~Widget();protected: void changeEvent(QEvent *e);private: Ui::Widget *ui; QSqlTableModel *model;private slots: void on_btnTable_clicked(); void on_btnQuery_clicked(); void on_btnSortDes_clicked(); void on_btnSortAsc_clicked(); void on_btnDel_clicked(); void on_btnInsert_clicked(); void on_btnRoll_clicked(); void on_btnCommit_clicked();};#endif // WIDGET_H//widget.cpp文件-成员函数-槽函数
#include "widget.h"#include "ui_widget.h"#include <QMessageBox>#include <QModelIndex>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); //构造TableModel对象 model = new QSqlTableModel(this); //选定表 model->setTable("Stu"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); //选定所有的行 model->select(); //将model和界面组件相关联 ui->tableView->setModel(model);}Widget::~Widget(){ delete ui;}void Widget::changeEvent(QEvent *e){ QWidget::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; }}void Widget::on_btnCommit_clicked(){ //开始一个事务 model->database().transaction(); if(model->submitAll()) { model->database().commit(); } else { model->database().rollback(); QMessageBox::warning(this, tr("提交"), tr("数据库提交失败,所有修改进行回滚")); }}void Widget::on_btnRoll_clicked(){ //撤销的是没有提交的数据,一旦数据写入到数据库中后,就没有办法撤销,只能进行删除 model->revertAll();}void Widget::on_btnInsert_clicked(){ int row = model->rowCount(); //先在model中插入行 model->insertRow(row); //在model中新插入的行中设置数据,每一个setData可以设置表中的一个字段的值 model->setData(model->index(row, 0), 110); model->setData(model->index(row, 1), tr("阳顶天")); model->submitAll();}void Widget::on_btnDel_clicked(){ //获取到tableView的选中行的索引 int curIndex = ui->tableView->currentIndex().row(); //从model中删除特定索引的行 model->removeRow(curIndex); if(QMessageBox::Yes == QMessageBox::warning(this, tr("删除数据"), tr("选中的行即将从数据表中删除\n你确定要删除该行?"), QMessageBox::Yes | QMessageBox::No)) { model->submitAll(); } else { model->revert(); }}void Widget::on_btnSortAsc_clicked(){ model->sort(0, Qt::AscendingOrder); model->select();}void Widget::on_btnSortDes_clicked(){ model->sort(1, Qt::DescendingOrder); model->select();}void Widget::on_btnQuery_clicked(){ QString txt = ui->lineEdit->text(); //设置model的过滤器(实际上,过滤器就是查询语句中where部分的语句) model->setFilter(tr("name = '%1'").arg(txt)); model->select();}void Widget::on_btnTable_clicked(){ model->setTable("Stu"); model->select();}
//main 主函数
#include <QtGui/QApplication>#include "widget.h"#include "connection.h"#include <QMessageBox>#include <QObject>int main(int argc, char *argv[]){ QApplication a(argc, argv); //QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); if(!createConnection()) { //QMessageBox::warning(0, "dd", "dd"); return 1; } Widget w; w.show(); return a.exec();}
//自动生成的ui_widget.h文件/********************************************************************************** Form generated from reading UI file 'widget.ui'**** Created: Mon Aug 29 14:50:52 2011** by: Qt User Interface Compiler version 4.6.2**** WARNING! All changes made in this file will be lost when recompiling UI file!********************************************************************************/#ifndef UI_WIDGET_H#define UI_WIDGET_H#include <QtCore/QVariant>#include <QtGui/QAction>#include <QtGui/QApplication>#include <QtGui/QButtonGroup>#include <QtGui/QHBoxLayout>#include <QtGui/QHeaderView>#include <QtGui/QLineEdit>#include <QtGui/QPushButton>#include <QtGui/QTableView>#include <QtGui/QVBoxLayout>#include <QtGui/QWidget>QT_BEGIN_NAMESPACEclass Ui_Widget{public: QPushButton *btnQuery; QPushButton *btnTable; QLineEdit *lineEdit; QWidget *widget; QHBoxLayout *horizontalLayout; QTableView *tableView; QVBoxLayout *verticalLayout; QPushButton *btnCommit; QPushButton *btnRoll; QPushButton *btnInsert; QPushButton *btnDel; QPushButton *btnSortAsc; QPushButton *btnSortDes; void setupUi(QWidget *Widget) { if (Widget->objectName().isEmpty()) Widget->setObjectName(QString::fromUtf8("Widget")); Widget->resize(372, 400); btnQuery = new QPushButton(Widget); btnQuery->setObjectName(QString::fromUtf8("btnQuery")); btnQuery->setGeometry(QRect(280, 310, 75, 23)); btnTable = new QPushButton(Widget); btnTable->setObjectName(QString::fromUtf8("btnTable")); btnTable->setGeometry(QRect(280, 350, 75, 23)); lineEdit = new QLineEdit(Widget); lineEdit->setObjectName(QString::fromUtf8("lineEdit")); lineEdit->setGeometry(QRect(100, 310, 161, 20)); widget = new QWidget(Widget); widget->setObjectName(QString::fromUtf8("widget")); widget->setGeometry(QRect(10, 40, 351, 251)); horizontalLayout = new QHBoxLayout(widget); horizontalLayout->setSpacing(6); horizontalLayout->setContentsMargins(11, 11, 11, 11); horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); horizontalLayout->setContentsMargins(0, 0, 0, 0); tableView = new QTableView(widget); tableView->setObjectName(QString::fromUtf8("tableView")); horizontalLayout->addWidget(tableView); verticalLayout = new QVBoxLayout(); verticalLayout->setSpacing(6); verticalLayout->setObjectName(QString::fromUtf8("verticalLayout")); btnCommit = new QPushButton(widget); btnCommit->setObjectName(QString::fromUtf8("btnCommit")); verticalLayout->addWidget(btnCommit); btnRoll = new QPushButton(widget); btnRoll->setObjectName(QString::fromUtf8("btnRoll")); verticalLayout->addWidget(btnRoll); btnInsert = new QPushButton(widget); btnInsert->setObjectName(QString::fromUtf8("btnInsert")); verticalLayout->addWidget(btnInsert); btnDel = new QPushButton(widget); btnDel->setObjectName(QString::fromUtf8("btnDel")); verticalLayout->addWidget(btnDel); btnSortAsc = new QPushButton(widget); btnSortAsc->setObjectName(QString::fromUtf8("btnSortAsc")); verticalLayout->addWidget(btnSortAsc); btnSortDes = new QPushButton(widget); btnSortDes->setObjectName(QString::fromUtf8("btnSortDes")); verticalLayout->addWidget(btnSortDes); horizontalLayout->addLayout(verticalLayout); retranslateUi(Widget); QMetaObject::connectSlotsByName(Widget); } // setupUi void retranslateUi(QWidget *Widget) { Widget->setWindowTitle(QApplication::translate("Widget", "Widget", 0, QApplication::UnicodeUTF8)); btnQuery->setText(QApplication::translate("Widget", "\346\237\245\350\257\242", 0, QApplication::UnicodeUTF8)); btnTable->setText(QApplication::translate("Widget", "\350\277\224\345\233\236\345\205\250\350\241\250", 0, QApplication::UnicodeUTF8)); btnCommit->setText(QApplication::translate("Widget", "\346\217\220\344\272\244", 0, QApplication::UnicodeUTF8)); btnRoll->setText(QApplication::translate("Widget", "\346\222\244\351\224\200", 0, QApplication::UnicodeUTF8)); btnInsert->setText(QApplication::translate("Widget", "\346\217\222\345\205\245", 0, QApplication::UnicodeUTF8)); btnDel->setText(QApplication::translate("Widget", "\345\210\240\351\231\244", 0, QApplication::UnicodeUTF8)); btnSortAsc->setText(QApplication::translate("Widget", "\345\215\207\345\272\217\346\216\222\345\272\217", 0, QApplication::UnicodeUTF8)); btnSortDes->setText(QApplication::translate("Widget", "\351\231\215\345\272\217\346\216\222\345\272\217", 0, QApplication::UnicodeUTF8)); } // retranslateUi};namespace Ui { class Widget: public Ui_Widget {};} // namespace UiQT_END_NAMESPACE#endif // UI_WIDGET_H
- Qt_SQL数据库开发
- 数据库开发
- 数据库开发
- 数据库开发
- 数据库开发
- 数据库开发
- mono:数据库开发
- 数据库应用开发(一)
- 数据库开发中间件
- VC数据库开发
- 用SQLJ开发数据库
- ORACLE数据库开发经验总结
- 转-数据库开发经验谈
- 数据库开发规范
- 三层数据库开发
- Java 数据库开发总结
- 数据库开发规范
- 数据库开发??精典 - -
- C/C++代码审查工具PCLint9.0
- 简易自动化测试设计之(一) 基于RFT的自动化测试层次
- 邮箱帐号密码导入邮箱联系人
- Heavy Weapon Deluxe【基址+偏移】 popcap的小游戏
- Linux中 oralce命令创建表空间
- Qt_SQL数据库开发
- 从网络数据的流程来总体看一下网络的概括
- http协议详解
- .net编码习惯
- 离DBA还有多远?
- 为VMware增加虚拟硬盘
- 中国的网友。。。。很烂
- Struts2使用json-plugin出现java.sql.SQLException: Positioned Update not supported异常
- 主机字节顺序与网络字节顺序相互转换的四个函数