mysqlcppconn之ConnectOptionsMap的使用

5 篇文章 0 订阅

由来

继上一篇文章, 发现之前写的一篇文章中断线重连部分是错误的, 也是现在翻阅了源码才知道

想要自动重连, 必须使用ConnectOptionsMap才可以

但由于官方代码没有做好导出部分的处理, 直接使用此类型会造成内存异常(跨模块传递STL对象)

所以本人简单的添加了几个导出函数, 绕过了这个问题

添加代码

在connection.h中, 找到

typedef std::map< sql::SQLString, ConnectPropertyVal > ConnectOptionsMap;

在下面紧接着添加

CPPCONN_PUBLIC_FUNC ConnectOptionsMap* ConnectOptionsMap_New();
CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Delete(ConnectOptionsMap *obj);
CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Set(ConnectOptionsMap *obj, const char* k, const Variant &v);


在mysql_connection.cpp中, 文件最后, sql的命名空间内, 即最后一个花括号内, 添加以下代码

CPPCONN_PUBLIC_FUNC ConnectOptionsMap* ConnectOptionsMap_New()
{
	return new ConnectOptionsMap;
}

CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Delete(ConnectOptionsMap *obj)
{
	delete obj;
}

CPPCONN_PUBLIC_FUNC void ConnectOptionsMap_Set(ConnectOptionsMap *obj, const char* k, const Variant &v)
{
	(*obj)[k] = v;
}

编译, 取出dll和lib文件, 搞定.

如何使用

sql::Connection* CSqlWorker::NewSqlObject()
{
	try
	{
		typedef decltype (sql::ConnectOptionsMap_Delete)* TConnectOptionsMap_Deleter;
		std::unique_ptr<sql::ConnectOptionsMap, TConnectOptionsMap_Deleter> Maps(sql::ConnectOptionsMap_New(), sql::ConnectOptionsMap_Delete);

		sql::ConnectOptionsMap_Set(Maps.get(), "hostName", sql::Variant(sql::SQLString(m_host.c_str())));
		sql::ConnectOptionsMap_Set(Maps.get(), "userName", sql::Variant(sql::SQLString(m_user.c_str())));
		sql::ConnectOptionsMap_Set(Maps.get(), "password", sql::Variant(sql::SQLString(m_pass.c_str())));

		sql::ConnectOptionsMap_Set(Maps.get(), "OPT_RECONNECT", sql::Variant(true));
		sql::ConnectOptionsMap_Set(Maps.get(), "OPT_CHARSET_NAME", sql::Variant(sql::SQLString("utf8")));

		return m_driver->connect(*Maps.get());
	}
	catch (sql::SQLException e)
	{
		_ASSERT(0);
	}
	return NULL;
}


更多参数及作用, 请参阅mysql_connection.cpp的MySQL_Connection::init函数

完结

是不是看起来比较麻烦? 

但为了使用扩展功能(动态链接情况下), 只好先这样了

若要避免这个问题, 只能使用静态连接, 且运行库一致, 才可以.
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用MFC连接MySQL数据库时,可以通过以下几个步骤进行增删改查操作。 首先,需要添加MySQL的头文件和库文件到MFC项目中。可以在项目属性中配置附加包含目录和附加库目录,并将mysqlcppconn.lib添加到链接器中。 接下来,在MFC应用程序中创建一个数据库连接对象,并通过该对象建立与MySQL数据库的连接。连接对象可以使用mysql::cppconn::DriverManage的getConnection()方法来获取,需要指定数据库的连接参数,如数据库地址、用户名、密码等。连接成功后,可以将该连接对象用于后续的操作。 要进行增删改查操作,可以使用SQL语句来执行相关操作。通过连接对象的createStatement()方法创建一个Statement对象,然后使用该对象的execute()方法执行SQL语句。例如,可以使用INSERT语句进行插入数据,使用DELETE语句进行删除数据,使用UPDATE语句进行更新数据,使用SELECT语句进行查询数据。 执行SQL语句后,可以通过Statement对象的getResultSet()方法获取查询结果集。然后可以使用ResultSet对象的相关方法来获取查询结果的数据。 最后,记得在操作完成后关闭数据库连接,可以通过连接对象的close()方法实现。 总结起来,使用MFC连接MySQL数据库进行增删改查操作的步骤包括:建立数据库连接、创建Statement对象、执行SQL语句、获取查询结果集、关闭数据库连接等。通过这些步骤可以实现MFC与MySQL的数据交互操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值