本篇我们首先讲如何在MyConnectionObject类中引入头文件,添加私有构造函数,公有MYSQL对象,然后讲如何在SqlBlueprintFunctionLibrary类中创建MyConnectionObject类的实例及数据库的连接函数,并且暴露给蓝图。
1、首先打开以前创建的项目,然后点击上方的本地Windows调试器按钮,等待片刻。
2、等待编译完成后,会自动打开UE4编辑器。
3、UE4编辑器上方中有Compile按钮,此按钮是一个比较快捷的编译按钮。但是在一般情况下推荐使用Visual Studio中的编译,因为找错误比较容易。
4、如果未出现错误,就停止调试。首先在Visual Studio中打开 我们以前创建的MyConnectionObject.h和MyConnectionObject.cpp文件。然后引入头文件,添加如下所示代码。
MyConnectionObject.h文件
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
//引入mysql头文件
#include "mysql.h"
#include "MyConnectionObject.generated.h"
/**
*数据库连接对象类
*/
UCLASS(BlueprintType)//声明为蓝图类型的类
class TESTMYSQL_API UMyConnectionObject : public UObject
{
GENERATED_BODY()
private:
//声明私有构造函数
UMyConnectionObject();
public:
//声明MySQL连接对象
MYSQL* Conn;
};
MyConnectionObject.cpp文件
#include "MyConnectionObject.h"
UMyConnectionObject::UMyConnectionObject()
{
//初始化连接对象
Conn = nullptr;
}
添加完成后 ,点击调试按钮,确保无错误。
5、打开SqlBlueprintFunctionLibrary.h和SqlBlueprintFunctionLibrary.cpp文件,添加如下所示代码。
SqlBlueprintFunctionLibrary.h文件
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
//引入mysql头文件
#include "mysql.h"
//引入数据库连接对象头文件
#include "MyConnectionObject.h"
#include "SqlBlueprintFunctionLibrary.generated.h"
/**
* 数据库连接类
*/
UCLASS(BlueprintType)//声明为蓝图类型
class TESTMYSQL_API USqlBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
/**
* 连接MySQL数据库函数
*/
UFUNCTION(BlueprintCallable,Category="SQL Utilities")
static UMyConnectionObject* ConnectToMySQL(FString Host,FString userName,FString Password,FString dbName,int32 Port,FString& Msg);
};
SqlBlueprintFunctionLibrary.cpp
#include "SqlBlueprintFunctionLibrary.h"
#include <string>
UMyConnectionObject* USqlBlueprintFunctionLibrary::ConnectToMySQL(FString Host, FString userName, FString Password, FString dbName, int32 Port, FString& Msg)
{
//字符编码格式转换
std::string t_Host(TCHAR_TO_UTF8(*Host));
std::string t_userName(TCHAR_TO_UTF8(*userName));
std::string t_Password(TCHAR_TO_UTF8(*Password));
std::string t_dbName(TCHAR_TO_UTF8(*dbName));
//数据库连接对象创建
UMyConnectionObject* ConnObj = NewObject<UMyConnectionObject>();
//初始化MYSQL连接对象
ConnObj->Conn = mysql_init(nullptr);
//判断连接状态,并返回相应信息
if (!mysql_real_connect(ConnObj->Conn,t_Host.c_str(),t_userName.c_str(),t_Password.c_str(),t_dbName.c_str(),(uint32)Port,nullptr,0))
{
Msg = TEXT("连接失败!");
}
else
{
Msg = TEXT("连接成功!");
}
//返回数据库连接对象
return ConnObj;
}