**
**
参考:
1.QT连接数据库
2.简单常用函数解释
3.增删改查
mingw32位连接mysql数据库
参考:32位qt程序, 利用32位mysql驱动,连接64位mysql8.0
QT使用操作mysql数据库的详细教程
(给自己看的。哈哈哈)
首先第一步,导入数据库模块
pro文件添加: QT += sql
头文件添加:
#include < QSqlDatabase>
#include < QSqlError>
#include < QSqlQuery>
#include < QSqlRecord>
连接数据库
//连接数据库
void OpeateDB::linkDB()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("testdb");//数据库名
if(!db.open())
{
qDebug()<<db.lastError();
qDebug()<<"link mysql failed";
bislink = false;
return;
}else
{
qDebug()<<"link mysql success";
bislink = true;
}
//断开数据库
//db.close();
}
连接的地址,账号,密码,和端口,数据库名就不赘述了。(建议用配置文件)
下面这个地址有操作演示:
常用操作
下面就是正文了:
数据库操作部分
常用查找select部分:
void OpeateDB::findRecord()
{
//获取表格所有字段名
QString sql = QString("select COLUMN_NAME from information_schema.COLUMNS where table_name = 'test_table'");
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())//指向下一条
{
//根据下标找到对应字段值
qDebug()<<query.value(0).toString();
}
}else
{
qDebug()<<query.lastError();
}
//获取数据库中所有表名
QString sql4 = QString("select table_name from information_schema.tables where table_schema='testdb'");
if(query.exec(sql4)) //执行sql语句是否成功
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())//指向下一条
{
//根据下标找到对应字段值
qDebug()<<query.value(0).toString();
}
}else
{
qDebug()<<query.lastError();
}
//根据指定的字段查询记录
QString sql2 = QString("select *from test_table where NAME ='%1' and AGE = '%2'").arg("wyz").arg(21);
if(query.exec(sql2))
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())
{
qDebug()<<query.value("ID").toString();
qDebug()<<query.value("NAME").toString();
qDebug()<<query.value("AGE").toString();
}
}else
{
qDebug()<<query.lastError();
}
//根据指定字段名输入该列信息
QString sql3 = QString("select NAME from test_table");
if(query.exec(sql3))
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())
{
//两种写法-下标输出,和指定字段输出
qDebug()<<query.value(0).toString();
//qDebug()<
}
}else
{
qDebug()<<query.lastError();
}
}
常用修改update部分:
//更新表格指定行的某个字段的值
QString sql = QString("update test_table set AGE = '%2' where ID = '%1'").arg(1).arg(18);
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"update success";
}else
{
qDebug()<<query.lastError();
}
常用插入insert部分:
void OpeateDB::insertRecord()
{
//插入记录
QString sql = QString("insert into test_table(ID, NAME, AGE) "
"VALUES ('%1','%2', '%3')")
.arg(NULL).arg("").arg(22);
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"insert success";
}else
{
qDebug()<<query.lastError();
}
}
常用删除del部分:
void OpeateDB::delRecord()
{
//根据指定id删除记录
QString sql = QString("delete from test_table where ID = '%1'").arg(2);
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"delete success";
}else
{
qDebug()<<query.lastError();
}
}
下面给个类:(内容要自己去修改)
头文件:
#ifndef OPEATEDB_H
#define OPEATEDB_H
#include
#include
#include
#include
class OpeateDB
{
public:
OpeateDB();
void linkDB();
void test();
void findRecord();
void updateRecord();
void delRecord();
void insertRecord();
bool bislink;
};
#endif // OPEATEDB_H
cpp文件:
#include "opeatedb.h"
#include
OpeateDB::OpeateDB()
{
bislink = false;
linkDB();
}
//连接数据库
void OpeateDB::linkDB()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("testdb");//数据库名
if(!db.open())
{
qDebug()<<db.lastError();
qDebug()<<"link mysql failed";
bislink = false;
return;
}else
{
qDebug()<<"link mysql success";
bislink = true;
}
}
void OpeateDB::test()
{
// findRecord();
// updateRecord();
// delRecord();
insertRecord();
}
void OpeateDB::findRecord()
{
//获取表格所有字段名
QString sql = QString("select COLUMN_NAME from information_schema.COLUMNS where table_name = 'test_table'");
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())//指向下一条
{
//根据下标找到对应字段值
qDebug()<<query.value(0).toString();
}
}else
{
qDebug()<<query.lastError();
}
//获取数据库中所有表名
QString sql4 = QString("select table_name from information_schema.tables where table_schema='testdb'");
if(query.exec(sql4)) //执行sql语句是否成功
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())//指向下一条
{
//根据下标找到对应字段值
qDebug()<<query.value(0).toString();
}
}else
{
qDebug()<<query.lastError();
}
//根据指定的字段查询记录
QString sql2 = QString("select *from test_table where NAME ='%1' and AGE = '%2'").arg("wyz").arg(21);
if(query.exec(sql2))
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())
{
qDebug()<<query.value("ID").toString();
qDebug()<<query.value("NAME").toString();
qDebug()<<query.value("AGE").toString();
}
}else
{
qDebug()<<query.lastError();
}
//根据指定字段名输入该列信息
QString sql3 = QString("select NAME from test_table");
if(query.exec(sql3))
{
qDebug()<<"find record num:"<<query.size();//查询结果记录条数
while(query.next())
{
//两种写法-下标输出,和指定字段输出
qDebug()<<query.value(0).toString();
//qDebug()<
}
}else
{
qDebug()<<query.lastError();
}
}
void OpeateDB::updateRecord()
{
//更新表格指定行的某个字段的值
QString sql = QString("update test_table set AGE = '%2' where ID = '%1'").arg(1).arg(18);
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"update success";
}else
{
qDebug()<<query.lastError();
}
}
void OpeateDB::delRecord()
{
//根据指定id删除记录
QString sql = QString("delete from test_table where ID = '%1'").arg(2);
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"delete success";
}else
{
qDebug()<<query.lastError();
}
}
void OpeateDB::insertRecord()
{
//插入记录
QString sql = QString("insert into test_table(ID, NAME, AGE) "
"VALUES ('%1','%2', '%3')")
.arg(NULL).arg("").arg(22);
QSqlQuery query;
if(query.exec(sql)) //执行sql语句是否成功
{
qDebug()<<"insert success";
}else
{
qDebug()<<query.lastError();
}
}
.h和.cpp文件
/**
* @desc 数据库操作
* @author wqj
* @2022年02月24日
*/
#ifndef OPEATEDB_H
#define OPEATEDB_H
#include
#include
#include
#include
class OpeateDB
{
public:
OpeateDB();
~OpeateDB();
/*
连接打开数据库
参数:
[ip] 数据库连接地址
[user] 用户名
[password] 密码
[dbName] 数据库名
[errorStr] 连接错误信息
返回值:
true - 成功,>false - 失败
*/
bool LinkDB(QString ip,QString user,QString password,QString dbName/*,QString errorStr*/);
/*
关闭数据库
返回值:
true - 成功,>false - 失败
*/
bool CloseDB();
/*
执行sql语句
参数:
[query] 数据库连接地址0
[sql] sql语句字符串
返回值:
true - 成功,>false - 失败
*/
bool ExcuSqlStr(QSqlQuery &query,QString sql);
bool bool_islink;
private:
QSqlDatabase db;
};
#endif // OPEATEDB_H
#include "tools/operatedb.h"
#include
#define IS_DEBUG true
OpeateDB::OpeateDB()
{
bool_islink = false;
}
OpeateDB::~OpeateDB()
{
if(db.isOpen())
{
db.close();
}
}
bool OpeateDB::LinkDB(QString ip,QString user,QString password,QString dbName)
{
db = QSqlDatabase::addDatabase("QMYSQL");
if(ip.isEmpty())
{
ip = "127.0.0.1";
}
db.setHostName(ip);//127.0.0.1
db.setPort(3306);
db.setUserName(user);//root
db.setPassword(password);//123456
db.setDatabaseName(dbName);//数据库名
if(!db.open())
{
if(IS_DEBUG)
{
qDebug()<<"link mysql failed:"<< db.lastError();
}
// errorStr = (QString)db.lastError().text();
bool_islink = false;
}else
{
if(IS_DEBUG)
{
qDebug()<<"link mysql success";
}
bool_islink = true;
}
return bool_islink;
}
bool OpeateDB::CloseDB()
{
if(db.isOpen())
{
db.close();
if(IS_DEBUG)
{
qDebug()<<"close mysql success";
}
}
return true;
}
bool OpeateDB::ExcuSqlStr(QSqlQuery &query,QString sql)
{
if(!query.exec(sql)) //执行sql语句是否成功
{
if(IS_DEBUG)
{
qDebug()<<"excu sqlstr error:"<<query.lastError();
}
return false;
}
if(IS_DEBUG)
{
qDebug()<<"excu sqlstr success";
}
return true;
}
~持续更新