1、mysql安装以及使用
安装教程
mysql使用说明(菜鸟教程)
2、qt使用mysql
我觉得下面这篇文章很有参考价值
qt使用mysql.
对qt使用mysql的安装过程做一个简单的总结吧,以免以后踩坑
在安装数据库时首先要看一下qt的编译版本是32位还是64位,Qt5.6的话只有32位的,所以这时候就要安装32位的数据库了,否则qt是无法操作64位的数据库的。
装完之后要把数据库的 libmysql.ddl 放到qt的编译的使用的mingw的目录的bin下面
看的时候如下
我是Qt5.6.2 MinGW 32bit
然后找到Qt的安装路径,把32位的数据库 的libmysql.ddl 放到目录下
3、一个测试Qt是否能打开数据库的例子
第一步,正常创建一个widget项目
然后给项目文件也就是.pro
文件添加QT += sql
,如下图
然后保存
第二步,使用 QSqlDatabase
代码如下
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlDatabase>
#include <QDebug>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QSqlDatabase db;
};
#endif // WIDGET_H
Widget::~Widget()
{
delete ui;
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//使用mysql
db = QSqlDatabase::addDatabase("QMYSQL");
//设置ip、端口、名字、密码
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
//打开数据库
bool res = db.open();
if(res){
qDebug()<<"数据库连接成功";
}else{
qDebug()<<"数据库连接失败";
}
//关闭数据库
db.close();
}
Widget::~Widget()
{
delete ui;
}
第三步、运行程序
输出数据库连接成功说明qt可以使用数据库了
如果不行的话,就要看一下是哪里出现问题了,到时候就只能复制错误代码自己百度了,查找解决问题是每个程序员必须具备的能力!!!!!!
4、一个使用实例(仅仅是后面用来参考使用步骤)
本实例仅仅是用来参考使用步骤
例子说明:
提供一个用户界面,可以输入用户名和密码,提供两个按键,登录和注册,点击注册,把用户名和密码存入数据库,点击登录,对用户名和密码进行验证。
利用关闭事件关闭数据库
代码部分:
.pro文件记得加“QT+=sql”
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlDatabase>
#include <QDebug>
#include <QCloseEvent>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushreg_clicked();
void on_pushlogic_clicked();
private:
Ui::Widget *ui;
QSqlDatabase db;
QSqlQuery *query;
QMessageBox box;
protected:
virtual void closeEvent(QCloseEvent * ev);
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//初始化数据库描述符
db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //本地数据库
db.setPort(3306);//端口号
db.setUserName("root"); //登录用户
db.setPassword("123456");//登录密码
db.setDatabaseName("1030_test");//使用的数据库的table
bool res = db.open(); //打开数据库
if(!res){
qDebug()<<"数据库打开失败";
}
//该变量必须在打开数据库之后进行操作,否则无法操作数据库
query = new QSqlQuery;
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushreg_clicked()
{
QString name = ui->lineuser_name->text();
QString pswd = ui->linepassword->text();
//占位符的格式为 :+name
query->prepare("insert into tb2 (name,pswd) values (:name,:pswd)");
//用来绑定值
query->bindValue(":name",name);
query->bindValue(":pswd",pswd);
bool res = query->exec();
if(!res){
//用来打印错误信息
qDebug()<<query->lastError().text();
}
}
void Widget::closeEvent(QCloseEvent *ev)
{
Q_UNUSED(ev);
db.close();//关闭数据库
delete query;
}
void Widget::on_pushlogic_clicked()
{
QString name = ui->lineuser_name->text();
QString pswd = ui->linepassword->text();
QString _name;
QString _pswd;
query->prepare("select * from tb2 where name = :name");
query->bindValue(":name",name);
bool res = query->exec();
if(!res){
qDebug()<<query->lastQuery();
}
while(query->next()){
_name = query->value("name").toString();
_pswd = query->value("pswd").toString();
if(_name == name){
if(pswd == _pswd){
box.setText("登录成功");
box.show();
return;
}else{
box.setText("密码错误");
box.show();
return;
}
}
}
box.setText("未注册");
box.show();
return;
}
创建的数据库表格内容如下
功能验证
5、把数据库的调用封装成一个单例
目录
代码(内函注释)
dbhelper.h
#ifndef DBHELPER_H
#define DBHELPER_H
#include <QWidget>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QVariant>
class dbhelper
{
public:
dbhelper();
static dbhelper *getIntance(QString);
void setHostName(QString hostname);
void setPort(int port);
void setUserName(QString name);
void setPassword(QString pswd);
void setDatabaseName(QString name);
void open();
void close();
bool exec(QString cmd);
bool prepare(const QString &cmd);
void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType = QSql::In);
bool exec();
bool next();
QVariant value(int index);
QVariant value(const QString &name);
private:
dbhelper(QString driver);
static dbhelper* instance;
QSqlDatabase *db;
QSqlQuery *query;
};
#endif // DBHELPER_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <QCloseEvent>
#include "dbhelper.h"
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
protected:
virtual void closeEvent(QCloseEvent *ev);
private slots:
void on_pushButton_clicked();
};
#endif // WIDGET_H
dbhelper.cpp
#include "dbhelper.h"
dbhelper *dbhelper::getIntance(QString driver)
{
if(instance == NULL){
instance = new dbhelper(driver);
}
return instance;
}
void dbhelper::setHostName(QString hostname)
{
db->setHostName(hostname);
}
void dbhelper::setPort(int port)
{
db->setPort(port);
}
void dbhelper::setUserName(QString name)
{
db->setUserName(name);
}
void dbhelper::setPassword(QString pswd)
{
db->setPassword(pswd);
}
void dbhelper::setDatabaseName(QString name)
{
db->setDatabaseName(name);
}
void dbhelper::open()
{
bool res = db->open();
if(!res){
qDebug()<<"数据库打开失败";
}
query = new QSqlQuery;
}
void dbhelper::close()
{
return db->close();
delete query;
}
bool dbhelper::exec(QString cmd)
{
bool res = query->exec(cmd);
if(!res){
qDebug()<<query->lastError().text();
}
return res;
}
bool dbhelper::prepare(const QString &cmd)
{
bool res = query->prepare(cmd);
if(!res){
qDebug()<<query->lastError().text();
}
return res;
}
void dbhelper::bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
{
query->bindValue(placeholder,val);
}
bool dbhelper::exec()
{
bool res = query->exec();
if(!res){
qDebug()<<query->lastError().text();
}
return res;
}
bool dbhelper::next()
{
return query->next();
}
QVariant dbhelper::value(int index)
{
return query->value(index);
}
QVariant dbhelper::value(const QString &name)
{
return query->value(name);
}
dbhelper::dbhelper(QString driver)
{
db = new QSqlDatabase;
*db = QSqlDatabase::addDatabase(driver);
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
dbhelper * dbhelper::instance = NULL;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
dbhelper *db = dbhelper::getIntance("QMYSQL");
db->setHostName("localhost");
db->setPort(3306);
db->setUserName("root");
db->setPassword("123456");
db->setDatabaseName("1030_test");
db->open();
}
Widget::~Widget()
{
delete ui;
}
void Widget::closeEvent(QCloseEvent *ev)
{
Q_UNUSED(ev);
//因为是单例模式所以两次获取的db也肯定是一模一样的
dbhelper *db = dbhelper::getIntance("QMYSQL");
db->close();
}
void Widget::on_pushButton_clicked()
{
QString show;
dbhelper *db = dbhelper::getIntance("QMYSQL");
bool res = db->prepare("select * from tb2");
if(!res){
qDebug()<<"查询数据库失败";
}
db->exec();
while(db->next()){
QString name = db->value("name").toString();
QString pswd = db->value(1).toString();
show += name+" "+pswd+"\n";
}
ui->label->setText(show);
}
运行效果
记录完毕,收工!
更多推荐
Qt学习之mysql使用(备忘)
发布评论