Qt操作数据库1
来源:互联网 发布:node-http-proxy原理 编辑:程序博客网 时间:2024/06/05 06:59
Qt使用SQL
QApplication app(argc,argv); Table *table = new Table; table->show(); return app.exec(); Q_OBJECT public: //继承公共对话框窗体派生类 Table(QWidget *parent = 0); //创建各个类的指针 QTableView *table; QGridLayout *gridLayout; QPushButton *connectButton; QPushButton *executionButton; QPushButton *displayButton; QHBoxLayout *verticalLayout; private slots: void on_connectButton_clicked(); void on_executionButton_clicked(); void on_displayButton_clicked(); :QDialog(parent) table = new QTableView; connectButton = new QPushButton("connect"); executionButton = new QPushButton("execution"); displayButton = new QPushButton("display"); connect(connectButton,SIGNAL(clicked()),this,SLOT(on_connectButton_clicked())); connect(executionButton,SIGNAL(clicked()),this,SLOT(on_executionButton_clicked())); connect(displayButton,SIGNAL(clicked()),this,SLOT(on_displayButton_clicked())); verticalLayout = new QHBoxLayout; verticalLayout->addWidget(connectButton); verticalLayout->addWidget(executionButton); verticalLayout->addWidget(displayButton); gridLayout = new QGridLayout; gridLayout->addWidget(table,0,0,1,1); gridLayout->addLayout(verticalLayout,1,0,1,1); setLayout(gridLayout); resize(500,400); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //添加QMYSQL数据库驱动 db.setHostName("localhost"); //设置登陆的主机名为localhost db.setUserName("root"); //登陆的用户是超级用户 root db.setPassword("123456"); //登陆密码是123456 db.setDatabaseName("student"); //打开的数据库表格,这个表格式预先创建好的。用>create database student;创建。 bool ok = db.open(); if(ok) //if判断 { qDebug()<<"open Database!"<<endl; } else { QMessageBox::critical(0,QObject::tr("Database Error"),db.lastError().text()); //否则输出数据库的消息框错误信息 } //按executionButton按钮执行SQL语句 QSqlQuery query; //创建一个执行数据库SQL语句对象 query.exec("drop table employee"); query.exec("create table employee(id int(11) primary key,name varchar(50),description varchar(255))"); query.exec("insert into employee values(1,'zhangsan','student')"); query.exec("insert into employee values(2,'lisi','teacher')"); query.exec("insert into employee values(3,'wangwu','professor')"); //插入三个记录 //用数据库表格模式结合试图显示数据库内容。 QSqlTableModel *model = new QSqlTableModel; //创建数据表模式对象 model->setTable("employee"); //设置数据库表上的运作模式以employee表名,不选择从数据表格以外获取信息 model->setEditStrategy(QSqlTableModel::OnManualSubmit); //所有更改将被缓存在模型中,直到submitAll()或revertAll()函数被调用 model->select(); model->setHeaderData(0,Qt::Horizontal,QObject::tr("ID")); model->setHeaderData(1,Qt::Horizontal,QObject::tr("name")); model->setHeaderData(2,Qt::Horizontal,QObject::tr("description")); //对应指定的字段并设置对应的水平标题显示 table->setModel(model); //将这个数据库表格模式用视图显示出来。
主要是下面的几个类
贴下我写的简单Demo
[cpp] view plaincopyprint?
- QSqlDatabase
db "QMYSQL");=QSqlDatabase::addDatabase( // becomes the new default connection -
db.setUserName( -
db.setPassword( -
db.setHostName( -
db.setDatabaseName( -
db.setConnectOptions( -
db.setPort(3306); -
-
qDebug()<< -
} -
-
qDebug()<< faile/n" ; -
} -
QSqlQuery query; -
query.exec( databases" );//很方便的 -
(query.next()) { -
qDebug()<<query.value(0).toString()<< -
-
} -
-
QSqlTableModel *model = QSqlTableModel; //间接将数据库表装入QTableView -
model->setTable( -
model->setEditStrategy(QSqlTableModel::OnManualSubmit); -
model->select(); -
// don't show the ID -
Qt::Horizontal, QObject::tr("ID")); -
model->setHeaderData(0, Qt::Horizontal, tr( -
model->setHeaderData(1, Qt::Horizontal, tr( -
model->setHeaderData(2, Qt::Horizontal, tr( -
-
-
QTableView *view = QTableView( this); -
view->setModel(model); -
-
db.close(); -
-
QGridLayout * gl= QGridLayout(); -
gl->addWidget(view); -
2、
下面是最终的现实效果如下:
现在先做一个显示的界面,界面是由一个表格试图和三个按钮组成。我的大概流程是:
<1>在对话框窗口先创建一个栅格布局管理器,添加一个表格视图窗口部件。
<2>创建一个水平布局管理器,在水平布局管理器中添加三个按钮,最后将水平布局管理器添加到栅格布局管理器中。
<3>创建三个按钮的信号与槽
<4>数据库的使用分为三步:(1)QsqlDatabase建立数据库的链接(2)QsqlQuery用于执行SQL语句(3)QsqlTableModel结合QtableView可以输出数据库的表。
<5>效果测试点击connect按钮链接打开数据库
#include
#include "table.h"
int main(int argc,char *argv[])
{
}
#ifndef TABLE_H
#define TABLE_H
#include
#include
class QGridLayout;
class QPushButton;
class QHBoxLayout;
class Table:public QDialog
{
//创建三个按钮槽函数
};
#endif
#include
#include
#include
#include
#include "table.h"
Table::Table(QWidget *parent)
{
//创建视图及按钮的对象
//建立三个信号与槽函数链接
//创建一个水平布局管理器,布局三个按钮
//创建一个栅格布局管理器对整体窗口部件的排布。
//设置窗口的大小
}
void Table::on_connectButton_clicked()
{
//链接函数实现数据库的链接功能
//布尔类型,打开数据。
//如果打开数据库在终端输出open Database信息
}
void Table::on_executionButton_clicked()
{
//如果存在employee数据库表格,先删除
//在创建数据库表格employee
}
void Table::on_displayButton_clicked()
{
//select()函数用于确定一个或多个套接口的状态。对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息。
}
在关闭对话框后出现查询应用默认数据库连接错误:
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
我googel以下,参照http://www.cnblogs.com/codingmylife/archive/2010/04/27/1722404.html
的内容测试,还是解决不了。
在第二个按钮末尾添加下面的语句:
QString name;
{
name = QSqlDatabase::database().connectionName();
}
QSqlDatabase::removeDatabase(name);
{
}
QSqlDatabase::removeDatabase(name);
On_executionButton_clicked()函数末尾添加,执行SQL语句后关闭窗口时有效的,但在on_displayButton_clicked()函数末尾添加却没有效。问题还在解决当中。。。。。
0 0
- Qt操作数据库1
- Qt数据库 QSqlTableModel实例操作(1)
- Qt数据库 QSqlTableModel实例操作(1)(2)
- Qt数据库 QSqlTableModel实例操作(1)(3)
- Qt操作SQLite数据库
- qt 数据库操作
- QT操作数据库
- QT之数据库操作
- QT 操作Sqlite数据库
- Qt操作数据库
- qt数据库操作
- qt数据库操作
- Qt 数据库操作
- QT 数据库操作
- QT操作Sqlite数据库
- Qt数据库操作
- Qt数据库操作
- Qt数据库操作
- linux和STL 常用头文件及说明
- C++设计模式浅识观察者模式
- java_basic_review(5) java继承
- 定制开发映客、花椒直播app 微信直播
- 一步步教你写StepView(流程指示器)
- Qt操作数据库1
- android6.25存储卡权限
- Java中的反射,内省
- vijos P1212Way Selection(简单的建图)
- SSL/TLS协议的运行原理浅,客户端与服务器的4次握手通信
- Tomcat 架构探索
- eclipse给jar文件配置源码和文档
- leetcode #139 in cpp
- HTTPS 科普扫盲