Qt中MySQL数据库编程Word格式.docx
- 文档编号:16958880
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:17
- 大小:37.14KB
Qt中MySQL数据库编程Word格式.docx
《Qt中MySQL数据库编程Word格式.docx》由会员分享,可在线阅读,更多相关《Qt中MySQL数据库编程Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
if(db.open()){
9.
qDebug()<
<
"
open/n"
db.lastError().driverText()<
/n"
;
10.
}
11.
else{
12.
open
faile/n"
13.
14.
QSqlQuery
query;
//用于执行SQL语言
15.
query.exec("
show
databases"
//很方便的
16.
while
(query.next())
{
17.
query.value(0).toString()<
18.
19.
20.
21.
QSqlTableModel
*model
=
QSqlTableModel;
//间接将数据库表装入QTableView
22.
model->
setTable("
people"
//表名
23.
setEditStrategy(QSqlTableModel:
OnManualSubmit);
24.
select();
25.
//model->
removeColumn(0);
don'
t
ID
26.
setHeaderData(0,
Qt:
Horizontal,
QObject:
tr("
ID"
));
27.
Name"
28.
setHeaderData(1,
Age"
29.
setHeaderData(2,
Sex"
30.
31.
32.
QTableView
*view
QTableView(this);
33.
view->
setModel(model);
34.
35.
db.close();
36.
37.
QGridLayout
*
gl=new
QGridLayout();
38.
gl->
addWidget(view);
39.
this->
setLayout(gl);
2、
下面是最终的现实效果如下:
现在先做一个显示的界面,界面是由一个表格试图和三个按钮组成。
我的大概流程是:
1>
在对话框窗口先创建一个栅格布局管理器,添加一个表格视图窗口部件。
2>
创建一个水平布局管理器,在水平布局管理器中添加三个按钮,最后将水平布局管理器添加到栅格布局管理器中。
3>
创建三个按钮的信号与槽
4>
数据库的使用分为三步:
(1)QsqlDatabase建立数据库的链接
(2)QsqlQuery用于执行SQL语句(3)QsqlTableModel结合QtableView可以输出数据库的表。
5>
效果测试点击connect按钮链接打开数据库
#include
#include"
table.h"
intmain(intargc,char*argv[])
{
QApplicationapp(argc,argv);
Table*table=newTable;
table->
show();
returnapp.exec();
}
#ifndefTABLE_H
#defineTABLE_H
classQGridLayout;
classQPushButton;
classQHBoxLayout;
classTable:
publicQDialog
Q_OBJECT
public:
//继承公共对话框窗体派生类
Table(QWidget*parent=0);
//创建各个类的指针
QTableView*table;
QGridLayout*gridLayout;
QPushButton*connectButton;
QPushButton*executionButton;
QPushButton*displayButton;
QHBoxLayout*verticalLayout;
privateslots:
//创建三个按钮槽函数
voidon_connectButton_clicked();
voidon_executionButton_clicked();
voidon_displayButton_clicked();
};
#endif
Table:
Table(QWidget*parent)
QDialog(parent)
//创建视图及按钮的对象
table=newQTableView;
connectButton=newQPushButton("
connect"
executionButton=newQPushButton("
execution"
displayButton=newQPushButton("
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=newQHBoxLayout;
verticalLayout->
addWidget(connectButton);
addWidget(executionButton);
addWidget(displayButton);
//创建一个栅格布局管理器对整体窗口部件的排布。
gridLayout=newQGridLayout;
gridLayout->
addWidget(table,0,0,1,1);
addLayout(verticalLayout,1,0,1,1);
setLayout(gridLayout);
//设置窗口的大小
resize(500,400);
voidTable:
on_connectButton_clicked()
//链接函数实现数据库的链接功能
QSqlDatabasedb=QSqlDatabase:
//添加QMYSQL数据库驱动
//设置登陆的主机名为localhost
//登陆的用户是超级用户root
123456"
//登陆密码是123456
student"
//打开的数据库表格,这个表格式预先创建好的。
用>
createdatabasestudent;
创建。
boolok=db.open();
//布尔类型,打开数据。
if(ok)//if判断
{
openDatabase!
endl;
//如果打开数据库在终端输出openDatabase信息
}
else
{QMessageBox:
critical(0,QObject:
DatabaseError"
),db.lastError().text());
//否则输出数据库的消息框错误信息
on_executionButton_clicked()
//按executionButton按钮执行SQL语句
QSqlQueryquery;
//创建一个执行数据库SQL语句对象
droptableemployee"
//如果存在employee数据库表格,先删除
createtableemployee(idint(11)primarykey,namevarchar(50),descriptionvarchar(255))"
//在创建数据库表格employee
insertintoemployeevalues(1,'
zhangsan'
'
student'
)"
insertintoemployeevalues(2,'
lisi'
teacher'
insertintoemployeevalues(3,'
wangwu'
professor'
//插入三个记录
on_displayButton_clicked()
//用数据库表格模式结合试图显示数据库内容。
QSqlTableModel*model=newQSqlTableModel;
//创建数据表模式对象
employee"
//设置数据库表上的运作模式以employee表名,不选择从数据表格以外获取信息
//所有更改将被缓存在模型中,直到submitAll()或revertAll()函数被调用
//select()函数用于确定一个或多个套接口的状态。
对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息。
model->
setHeaderData(0,Qt:
Horizontal,QObject:
setHeaderData(1,Qt:
name"
setHeaderData(2,Qt:
description"
//对应指定的字段并设置对应的水平标题显示
//将这个数据库表格模式用视图显示出来。
在关闭对话框后出现查询应用默认数据库连接错误:
QSqlDatabasePrivate:
removeDatabase:
connection'
qt_sql_default_connection'
isstillinuse,allquerieswillceasetowork.
我googel以下,参照
的内容测试,还是解决不了。
在第二个按钮末尾添加下面的语句:
QStringname;
name=QSqlDatabase:
database().connectionName();
QSqlDatabase:
removeDatabase(name);
On_executionButton_clicked()函数末尾添加,执行SQL语句后关闭窗口时有效的,但在on_displayButton_clicked()函数末尾添加却没有效。
问题还在解决当中。
。
Qt中MySQL数据库操作
首先,要查询相关的驱动是否已经装好了,可以用以下的程序进行验证:
#include<
QtCore/QCoreApplication>
QSqlDatabase>
QDebug>
QStringList>
intmain(intargc,char*argv[])
QCoreApplicationa(argc,argv);
qDebug()<
Availabledrivers:
QStringListdrivers=QSqlDatabase:
drivers();
foreach(QStringdriver,drivers)
qDebug()<
/t"
<
driver;
returna.exec();
结果如下:
接着是连接数据库:
QtGui/QApplication>
QtGui>
QtSql>
boolcreateConnection()
QSqlDatabasedb=QSqlDatabase:
db.setDatabaseName("
db.setUserName("
db.setPassword("
boolok=db.open();
if(!
ok){
QMessageBox:
critical(0,QObject:
连接数据库失败!
!
"
),db.lastError().text());
returnfalse;
}else{
information(0,QObject:
Tips"
),QObject:
连接数据库成功!
returntrue;
QApplicationa(argc,argv);
QTextCodec*codec=QTextCodec:
codecForName("
GB2312"
QTextCodec:
setCodecForLocale(codec);
setCodecForCStrings(codec);
setCodecForTr(codec);
createConnection())
return1;
插入操作:
//ODBC数据库表示方式
query.prepare(“insertintostudent(id,name)”
“values(:
id,:
name)”);
query.bindValue(0,5);
query.bindValue(1,“sixth”);
query.exec();
//Oracle表示方式
“values(?
?
)”);
//使用addBindValue()函数,省去了编号,它是按属性顺序赋值的
query.addBindValue(5);
query.addBindValue(“sixth”);
//使用ODBC方法时,可以将编号用实际的占位符代替
query.bindValue(“:
id”,5);
name”,“sixth”);
注意:
最后一定要执行exec(),否则上面的语句是不会被执行的。
//进行多个记录的插入时,可以利用绑定进行批处理
QSqlQueryq;
q.prepare(“insertintostudentvalues(?
QVariantListints;
ints<
10<
11<
12<
13;
q.addBindValue(ints);
QVariantListnames;
names<
“xiaoming”<
“xiaoliang”<
“xiaogang”<
QVariant(QVariant:
String);
//最后一个是空字符串,应与前面的格式相同
q.addBindValue(names);
if(!
q.execBatch())//进行批处理,如果出错就输出错误
q.lastError();
查询操作:
//返回全部的属性和结果集
query.exec(“select*fromstudent”);
//执行查询操作
qDebug()<
“execnext():
”;
if(query.next())
//开始就先执行一次next()函数,那么query指向结果集的第一条记录
introwNum=query.at();
//获取query所指向的记录在结果集中的编号
intcolumnNum=query.record().count();
//获取每条记录中属性(即列)的个数
intfieldNo=query.record().indexOf(“name”);
//获取”name”属性所在列的编号,列从左向右编号,最左边的编号为0
intid=query.value(0).toInt();
//获取id属性的值,并转换为int型
QStringname=query.value(fieldNo).toString();
//获取name属性的值
“rowNumis:
”<
rowNum//将结果输出
”idis:
id
”nameis:
name
”columnNumis:
columnNum;
“execseek
(2):
if(query.seek
(2))
//定位到结果集中编号为2的记录,即第三条记录,因为第一条记录的编号为0
query.at()
”<
query.value(0).toInt()
query.value
(1).toString();
“execlast():
if(query.last())
//定位到结果集中最后一条记录
”idis:
”nameis:
结果集其实就是查询到的所有记录的集合,而在QSqlQuery类中提供了多个函数来操作这个集合,需要注意这个集合中的记录是从0开始编号的。
最常用的有:
seek(intn):
query指向结果集的第n条记录。
first():
query指向结果集的第一条记录。
last():
query指向结果集的最后一条记录。
next():
query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。
previous():
query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。
record():
获得现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qt MySQL 数据库 编程