使用QT对MYSQL数据库进行简单操作

#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();

}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力攀爬的菜鸟_为自己努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值