0
点赞
收藏
分享

微信扫一扫

MySQL Connector/C++ 连接数据库崩溃

寒羽鹿 2022-03-12 阅读 55

一.最近用C++的mysql connector库时,遇到一些问题,记录如下:

        1.需要delete sql::Connection类指针才能断开数据库连接

#include "stdafx.h"
#include "jdbc/mysql_connection.h"
#include "jdbc/mysql_driver.h"
#include "jdbc/cppconn/statement.h"
#include "jdbc/cppconn/prepared_statement.h"
#include <iostream>
using namespace std;

int main()
{
	sql::mysql::MySQL_Driver* m_MySqlDriver = nullptr;
	m_MySqlDriver = sql::mysql::get_mysql_driver_instance();
	if (m_MySqlDriver == nullptr)
	{
		cout << "driver is null" << endl;
		return false;
	}
	sql::Connection* m_MySqlConn = m_MySqlDriver->connect("localhost", "oliver_zhang", "******");
	if (m_MySqlConn == nullptr)
	{
		cout << "conn is null" << endl;
		return false;
	}
	cout << "connect suceess" << endl;

	//关闭连接
	m_MySqlConn->close();
    //delete m_MySqlConn;    //释放连接对象
	cout << "连接关闭" << endl;
	getchar();
    return 0;
}

        2.delete sql::mysql::MySQL_Driver类指针导致后续的操作会崩溃

这个问题是我将sql::mysql::MySQL_Driver实例指针释放后,再获取数据库实例,然后使用该实例去连接时,发生崩溃。demo代码如下:

#include "jdbc/mysql_connection.h"
#include "jdbc/mysql_driver.h"
#include "jdbc/cppconn/statement.h"
#include "jdbc/cppconn/prepared_statement.h"
#include <iostream>
using namespace std;

int main()
{
	sql::mysql::MySQL_Driver* m_MySqlDriver = nullptr;
	m_MySqlDriver = sql::mysql::get_mysql_driver_instance();
	if (m_MySqlDriver == nullptr)
	{
		cout << "driver is null" << endl;
		return false;
	}
	sql::Connection* m_MySqlConn = m_MySqlDriver->connect("localhost", "oliver_zhang", "******");
	if (m_MySqlConn == nullptr)
	{
		cout << "conn is null" << endl;
		return false;
	}
	cout << "connect suceess" << endl;

	//关闭连接
	m_MySqlConn->close();
	delete m_MySqlConn;
	cout << "连接关闭" << endl;

	delete m_MySqlDriver;	//这边如果手动释放数据库驱动实例的指针,后续的操作会崩溃
	m_MySqlDriver = nullptr;
	try
	{
		m_MySqlDriver = sql::mysql::get_mysql_driver_instance();
        if(m_MySqlDriver == nullptr)
		{
			cout << "driver is null" << endl;
			return false;
		}
		m_MySqlConn = m_MySqlDriver->connect("localhost", "oliver_zhang", "******");
		if (m_MySqlConn == nullptr)
		{
			cout << "在次连接失败" << endl;
			return false;
		}
		cout << "在次连接成功" << endl;
	}
	catch (const exception& ex)
	{
		cout << "异常:" << ex.what() << endl;
		return -1;
	}
	return 0;
}

        

 运行结果如上,发现异常也没能捕获到就直接崩溃了,应该是m_MySqlDriver这个指针已经无效了


 

举报

相关推荐

0 条评论