#include `在这里插入代码片`"QtMySql.h"
#include <QDebug>
#include <QSqlDatabase>
#include <QStringList>
#include <QSqlError>
#include <QSqlQuery>
QtMySql::QtMySql(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
QSqlDatabase db;
//调用QSqlDatabase::drivers()静态方法获取支持的数据库驱动
QStringList list = QSqlDatabase::drivers();
//判断QStringList中是否包含某个成员
bool b = list.contains("QMYSQL");
if (b)
{
//db为数据库实例 addDatabase参数为要连接数据库的驱动类型
db = QSqlDatabase::addDatabase("QMYSQL");
qDebug() << QString::fromLocal8Bit("当前数据库支持QMYSQL驱动,数据库已实例化") << endl;
}
else
{
qDebug() << QString::fromLocal8Bit("当前不支持QMYSQL驱动,无法实例化数据库") << endl;
}
//设置连接的主机名,如果主机在本机可以写入127.0.0.1或本机IP地址或者localhost,如果在远程服务器端需要写入服务器所在主机的ip
db.setHostName("127.0.0.1");
//对于mysql来说用户名一般都默认为root
db.setUserName("root");
//设置数据库对应的密码
db.setPassword("123456");
//设置数据库服务器端口,如服务器默认端口无需调用,非默认端口需要调用,mysql默认端口为3306;
db.setPort(3306);
if (db.open())
{
qDebug() << QString::fromLocal8Bit("连接成功") << endl;
}
else
{
//lastError可以打印最后一条错误信息
qDebug() << QString::fromLocal8Bit("连接失败原因:") << db.lastError();
}
// 创建数据库,把下面的your_database1替换成你要创建的数据库名字。
db.exec("create database if not exists jxstest");
//设置数据库名
db.setDatabaseName("jxstest");
// 必须重新调用一遍.open(),这里不加这一句,后面就会报错"QSqlQuery::exec: database not open"
if (db.open())
{
qDebug() << QString::fromLocal8Bit("连接成功") << endl;
}
else
{
//lastError可以打印最后一条错误信息
qDebug() << QString::fromLocal8Bit("连接失败原因:") << db.lastError();
}
//创建表
//用于存储sql语句
QString sql;
//查询数据库中所有表的名称 如果有Test表则不进行表添加,如果没有则添加表Test
QString cmd = "show tables;";
QSqlQuery sqlQuery(cmd);
bool bTest = false;
while (sqlQuery.next())
{
qDebug() << "table name:" << sqlQuery.value(0).toString();
if (sqlQuery.value(0)==QString("test"))
{
bTest = true;
}
}
if (bTest)
{
sqlQuery = QSqlQuery(db);
qDebug() << QString::fromLocal8Bit("当前数据库中已有表Test,无需重复创建.......") << endl;
}
else
{
//创建表固定SQL语句fisher表名字, fish_id为key名 后面可以跟属性名和类型以,隔开例如fish_name和fish_score都为属性名"create table fisher(fish_id int primary key,fish_name text,fish_score int)"
sql = "create table test(fish_id int primary key,fish_name text,fish_score int)";
//创建表是否成功
if (!sqlQuery.exec(sql))
{
qDebug() << QString::fromLocal8Bit("创建表失败原因:") << sqlQuery.lastError();
}
else
{
qDebug() << QString::fromLocal8Bit("成功创建表");
}
}
//执行表数据插入语句 key值不能重复,
//第一种写法 将SQL语句放入QString中,在exec函数中传入
sql = QString("insert into test values('%1','%2','%3')").arg(8).arg("funny").arg(200);
//创建表是否成功
if (!sqlQuery.exec(sql))
{
qDebug() << QString::fromLocal8Bit("数据插入失败:") << sqlQuery.lastError();
}
else
{
qDebug() << QString::fromLocal8Bit("数据插入成功");
}
//第三种写法 直接在exec函数中写入SQL语句
if (!sqlQuery.exec("insert into test values(204,'funny',200)"))
{
qDebug() << QString::fromLocal8Bit("数据插入失败:") << sqlQuery.lastError();
}
else
{
qDebug() << QString::fromLocal8Bit("数据插入成功");
}
// 删除数据delete from 表名 where 条件;
sql = QString("delete from test where fish_id = 8;");
if (!sqlQuery.exec(sql))
{
qDebug() << QString::fromLocal8Bit("删除失败:") << sqlQuery.lastError();
}
else
{
qDebug() << QString::fromLocal8Bit("删除成功");
}
// 更新数据update 表名 set 列名 = ***, ..., 列名 = *** where 条件; 注意更新语句条件在最后
sql = QString("update test set fish_id = 204, fish_name = 18, fish_score = 1996 where fish_id = 204;");
if (!sqlQuery.exec(sql))
{
qDebug() << QString::fromLocal8Bit("更新失败:") << sqlQuery.lastError();
}
else
{
qDebug() << QString::fromLocal8Bit("更新成功");
}
// 查询全部 select * from 表名;
sqlQuery.exec("select * from test;");
//select 字段名 from 表名; 仅查询该字段内容
// sqlQuery.exec("select fish_id from test;");
//仅查询该字段内容 select * from 表名 where 条件;
// sqlQuery.exec("select * from test where fish_id = 204;");
// 当查询完数据返回false
while (sqlQuery.next())
{
qDebug() << sqlQuery.value(0).toInt() // 第一个字段
<< sqlQuery.value(1).toString() // 第二个字段
<< sqlQuery.value(2).toInt() // 第三个字段
<< sqlQuery.value("fish_id").toInt() // 也可以通过字段名进行获取
<< sqlQuery.value("fish_name").toString() // 也可以通过字段名进行获取
<< sqlQuery.value("fish_score").toInt(); // 也可以通过字段名进行获取
}
// 删除表drop table 表名;
sqlQuery.exec("drop table test;");
// 返回当前数据库对象
//QSqlDatabase::database();
//数据库使用完需要关闭,不然一直会有内存占用
db.open();
db.close();
}
使用QT对MYSQL数据库进行简单操作
最新推荐文章于 2024-07-24 19:26:26 发布