UE4学习笔记--连接MySQL数据库(C++)

2023-11-18

UE4学习笔记--连接MySQL数据库


我个人是个比较水的人,在学校没好好学程序,不误正业的玩建模,现在美术和程序都不行……想想还是重新认真学程序吧,先从记笔记开始,话说我还是第一次写博客……
我是跟着几位大佬的博客做的,记录一下自己的问题,以免以后忘记.
大佬的链接如下:
https://blog.csdn.net/jack0596_cn/article/details/52387890.
https://blog.csdn.net/boonti/article/details/84255014.
UE4连接MySQL数据库步骤

  1. 首先搞到MySQL的连接文件 MySQL Connector.C 6.1(在C:\Program Files \MySQL文件下,注意要看好自己的程序需要的是32位的库还是64位的库)
  2. 然后到项目文件夹下新建文件夹ThirdParty,并将连接文件复制到ThirdParty文件夹下,将连接文件的文件名中的空格全部删去
  3. 将lib文件夹下的dll文件放到项目文件夹下的Binaries文件夹
  4. 常规的C++添加第三方库的方法对虚幻不是很适用,可能会出现一系列问题,所以要在插件模块的.build.cs下添加以下代码
using UnrealBuildTool;
using System.IO;
public class MySQLUtility : ModuleRules
{
   public MySQLUtility(ReadOnlyTargetRules Target) : base(Target)
   {
   	PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
   	


   	PublicIncludePaths.AddRange(
   		new string[] {
   			// ... add public include paths required here ...
   		}
   		);
   			
   	
   	PrivateIncludePaths.AddRange(
   		new string[] {
   			// ... add other private include paths required here ...
   		}
   		);
   		
   	
   	PublicDependencyModuleNames.AddRange(
   		new string[]
   		{
   			"Core",
   			// ... add other public dependencies that you statically link with here ...
   		}
   		);
   		
   	
   	PrivateDependencyModuleNames.AddRange(
   		new string[]
   		{
   			"CoreUObject",
   			"Engine",
   			"Slate",
   			"SlateCore",
               //"HeadMountedDisplay",
   			// ... add private dependencies that you statically link with here ...	
   		}
   		);
   	
   	
   	DynamicallyLoadedModuleNames.AddRange(
   		new string[]
   		{
   			// ... add any modules that your module loads dynamically here ...
   		}
   		);
//需要增加的代码
       string ModulePath = ModuleDirectory; //获取本.build.cs文件的路径
       string ThirdPartyPath = Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/"));//获取第三方库文件的路径。
       string MySQLConnectorLibraryPath = ThirdPartyPath + "MySQLConnectorC8/lib64/";//获取连接文件的路径。
       string MySQLConnectorIncludePath = ThirdPartyPath + "MySQLConnectorC8/include/jdbc/";//获取第三方库的头文件路径。
       string MySQLConnectorImportLibraryName = Path.Combine(MySQLConnectorLibraryPath, "vs14/mysqlcppconn.lib");//获取第三方库的连接文件的路径。
       string MySQLConnectorDLLName = Path.Combine(MySQLConnectorLibraryPath, "mysqlcppconn-7-vs14.dll");//获取第三方动态链接库文件的路径。

       if (!File.Exists(MySQLConnectorImportLibraryName))
       {
           throw new BuildException(string.Format("{0} could not be found.", MySQLConnectorImportLibraryName));//如果找不到文件,编译器报错!
       }

       if (!File.Exists(MySQLConnectorDLLName))
       {
           throw new BuildException(string.Format("{0} could not be found.", MySQLConnectorDLLName));
       }

       PublicIncludePaths.Add(MySQLConnectorIncludePath);//注册第三方库头文件的路径。
       PublicLibraryPaths.Add(MySQLConnectorLibraryPath);//注册第三方库连接文件的路径。
       PublicAdditionalLibraries.Add(MySQLConnectorImportLibraryName);//注册第三方库的连接文件。
       //PublicDelayLoadDLLs.Add(MySQLConnectorDLLName);
       bEnableUndefinedIdentifierWarnings = false;
   }
}

  1. 在工程所对应的.build.cs的文件中加上bEnableUndefinedIdentifierWarnings = false;就不会报没有将“某某某”定义为预处理器宏,用“0”替换“#if/#elif”的错误了
  2. 在打包时可能会报平台的错误,这需要去插件的.uplugin文件下添加白名单代码
{
	"FileVersion": 3,
	"Version": 1,
	"VersionName": "1.0",
	"FriendlyName": "MySQLUtility",
	"Description": "",
	"Category": "Other",
	"CreatedBy": "",
	"CreatedByURL": "",
	"DocsURL": "",
	"MarketplaceURL": "",
	"SupportURL": "",
	"CanContainContent": true,
	"IsBetaVersion": false,
	"Installed": false,
  "Modules": [
    {
      "Name": "MySQLUtility",
      "Type": "Runtime",
      "LoadingPhase": "Default",
      "WhitelistPlatforms": [
        "Win64",
        "Win32",
        "HTML5"
      ]
    }
  ]
}

测试代码如下 MyBlueprintFunctionLibrary.h文件

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "mysql_connection.h"
#include "mysql_driver.h"
#include "cppconn/resultset.h"
#include "cppconn/statement.h"
#include "MySQLConnectObject.h"
#include "MyBlueprintFunctionLibrary.generated.h"

using namespace sql;
/**
 * 
 */

USTRUCT()
struct FSQLCon
{
	GENERATED_USTRUCT_BODY()
public:
	
	Connection* con;
};

UCLASS()
class MYSQLUTILITY_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()

	UFUNCTION(BlueprintCallable, Category = "MySQL")
	static UMySQLConnectObject* ConnectMySQL(FString Username,FString Password, FString DataBase);
	UFUNCTION(BlueprintCallable, Category = "MySQL")
	static UMySQLConnectObject* exeQueryMySQL(UMySQLConnectObject* con,FString SQL);
	UFUNCTION(BlueprintCallable, Category = "MySQL")
	static void CloseMySQL(UMySQLConnectObject* con);
		

};

测试代码如下 MyBlueprintFunctionLibrary.cpp文件

// Fill out your copyright notice in the Description page of Project Settings.


#include "MyBlueprintFunctionLibrary.h"
#include "Engine/Engine.h"

UMySQLConnectObject* UMyBlueprintFunctionLibrary::ConnectMySQL(FString Username, FString Password,FString DataBase)
{		
	Driver *driver;
	Connection *con=NULL;
	if (GEngine)
	{

		try
		{
			driver = get_driver_instance();
			if (Username.IsEmpty() || Password.IsEmpty() || DataBase.IsEmpty())
			{
				con = driver->connect("tcp://127.0.0.1:3306", "root", "MySQL125799");
				con->setSchema("asdf");
			}
			else
			{
				con = driver->connect("tcp://127.0.0.1:3306", TCHAR_TO_UTF8(*Username), TCHAR_TO_UTF8(*Password));
				con->setSchema(TCHAR_TO_UTF8(*DataBase));
			}
		}
		catch (SQLException &e)
		{
			//cout << "ERROR: SQLException in ";
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR: SQLException in MyBlueprintFunctionLibrary")));
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR:")) + FString(e.what()));
			if (e.getErrorCode() == 1047) {
				/*
				Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
				Message: Unknown command
				*/
				GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("\nYour server does not seem to support Prepared Statements at all. ")));
			}
		}
		catch (std::runtime_error &e)
		{
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR: runtime_error in ")) + TEXT(__FILE__));
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR:")) + FString(e.what()));
		}		
	}
	UMySQLConnectObject* tmp = NewObject<UMySQLConnectObject>();
	tmp->con = con;
	return tmp;
}



UMySQLConnectObject* UMyBlueprintFunctionLibrary::exeQueryMySQL(UMySQLConnectObject* con, FString SQL)
{

	Statement *stmt = NULL;
	ResultSet *res = NULL;
	
	if (con->con==NULL)
	{
		return con;
	}
	
	if (con==NULL||SQL.IsEmpty())
	{
	
			if (con->con)
	{
		stmt = con->con->createStatement();
					try
					{
					
						res = stmt->executeQuery("SELECT * from goods");
					}
					catch (SQLException &e)
					{
						//cout << "ERROR: SQLException in ";
						GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR: SQLException in MyBlueprintFunctionLibrary")));
						GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR:")) + FString(e.what()));
						if (e.getErrorCode() == 1047) {
							/*
							Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
							Message: Unknown command
							*/
							GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("\nYour server does not seem to support Prepared Statements at all. ")));
						}
						return con;
					}
					catch (std::runtime_error &e)
					{
						GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR: runtime_error in ")) + TEXT(__FILE__));
						GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR:")) + FString(e.what()));
						return con;
					}
					// 标准sql语句
					while (res->next())
					{
						GEngine->AddOnScreenDebugMessage(-1, 15.f, FColor::Red, FString(TEXT("gid为 ")) + UTF8_TO_TCHAR(res->getString("gid").c_str()));
					}
	}
	
			delete res;
			delete stmt;
	}
	else
	{
		stmt = con->con->createStatement();
		try
		{
			res = stmt->executeQuery(TCHAR_TO_UTF8(*SQL));
		}
		catch (SQLException &e)
		{
			//cout << "ERROR: SQLException in ";
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR: SQLException in MyBlueprintFunctionLibrary")));
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR:")) + FString(e.what()));
			if (e.getErrorCode() == 1047) {
				/*
				Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
				Message: Unknown command
				*/
				GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("\nYour server does not seem to support Prepared Statements at all. ")));
			}
			return con;
		}
		catch (std::runtime_error &e)
		{
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR: runtime_error in ")) + TEXT(__FILE__));
			GEngine->AddOnScreenDebugMessage(-1, 1.f, FColor::Red, FString(TEXT("ERROR:")) + FString(e.what()));
			return con;
		}
		// 标准sql语句
		while (res->next())
		{
			GEngine->AddOnScreenDebugMessage(-1, 15.f, FColor::Red, FString(TEXT("gid为 ")) + UTF8_TO_TCHAR(res->getString("gid").c_str()));
		}

		delete res;
		delete stmt;
	}
        return con;
}

void UMyBlueprintFunctionLibrary::CloseMySQL(UMySQLConnectObject* con)
{
	//delete res;
	//delete stmt;
	
	if (con->con)
	{
		con->con->close();
	}
}


测试代码如下 MySQLConnectObject.cpp

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "mysql_connection.h"
#include "mysql_driver.h"
#include "cppconn/resultset.h"
#include "cppconn/statement.h"
#include "MySQLConnectObject.generated.h"

/**
 * 
 */
using namespace sql;


UCLASS(BlueprintType)
class MYSQLUTILITY_API UMySQLConnectObject : public UObject
{
	GENERATED_BODY()
public:

	Connection* con;
};

测试代码如下MySQLConnectObject.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "MySQLConnectObject.h"



打包的时候发现不能使用try catch语句,这是因为虚幻默认禁用,想要开启需要在.build.cs下添加一句
bEnableExceptions = true;
其他bool变量的作用可以查看源码的ModuleRules类的成员变量的注释

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UE4学习笔记--连接MySQL数据库(C++) 的相关文章

  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • MYSQL - 查找最近的前一天

    我可以以某种方式 不使用 PHP 找到一周中最近的前一天日期吗 Like 最近的上一个星期二的日期是哪一天 CURDATE INTERVAL WEEKDAY CURDATE wday IF WEEKDAY CURDATE gt wday 0
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 如何将ElasticSearch与MySQL集成?

    在我的一个项目中 我计划将 ElasticSearch 与 MySQL 结合使用 我已经成功安装ElasticSearch 我可以单独管理ES中的索引 但我不知道如何用 MySQL 实现同样的功能 我读过一些文件 但我有点困惑 没有明确的想
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • Bugzilla 中分离客户端的基本权限

    我正在尝试配置一个 Bugzilla 实例 这将允许我的客户登录并为其正在开发 维护的网站提交错误 例如 我创建了 2 个名为 TestProject TestProject2 的产品和一个名为 TestClient 的用户 我想要实现的是
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi

随机推荐

  • ★SQL注入漏洞(7)SQL注入高级篇

    分析目标防火墙并且跳过 1 直接拉黑ip类防火墙 2 过滤删除相应字符的防火墙 1 waf注释符号过滤 例题 Sqli labs T23 特点 注释符 被过滤掉了 绕过方法 逻辑上补全闭合即可 多加一次url编码只是更安全的绕过 selec
  • Redis系列1——数据类型和常用数据操作

    一 redis基础知识 客户端和服务器命令 默认端口号6379 服务器命令 redis server redis windows conf 设置服务一直开启 首先进入redis安装目录 然后执行 redis server service i
  • android so 调试

    安卓调试 环境 tool JDK 8X 之前用15版本的 monitor一直无法启动 链接 https pan baidu com s 12LUwB7ZOVEcblAzkO8hxyA 提取码 5lw0 monitor bat 流程 开启调试
  • mybatis学习笔记8:注解开发

    文章目录 一 基于注解的开发环境搭建以及实现查询所有 1 定义主配置文件 2 准备实体类和Dao接口 3 Dao接口定义findAll方法 以及添加注解 4 测试类定义方法测试 5 注解开发和基于xml的映射配置文件开发对比 6 注解开发的
  • 数据结构练习题——图(含应用题)

    1 选择题 1 在一个图中 所有顶点的度数之和等于图的边数的 倍 A 1 2 B 1 C 2 D 4 答案 C 2 在一个有向图中 所有顶点的入度之和等于所有顶点的出度之和的 倍 A 1 2 B 1 C 2 D 4 答案 B 解释 有向图所
  • 黄聪:微信小程序 服务器 TLS1.0 1TLS.2 配置详细教学!

    下载IISCrypto exe 点击best 工具自动推荐选中 也可以定义勾选 选择配置完成 然后点击 apply 软件弹窗提醒你 手动重启服务器 重启服务器 搞定 最后 https www ssllabs com ssltest inde
  • Linux与windows文件上传和下载

    在没有安装第三方工具的帮助下 能不能直接完成上传一个文件给服务器上 或者从服务器上下载一个文件下来 当然是可以的 你可以通过rz和sz来完成在自己的windows上上传一个文件给服务器 或者直接从服务器下载一个文件 首先第一步使用rz和sz
  • 三种SQL实现聚合字段合并(presto、hive、mysql)

    需求 按照项目名 以逗号合并参与人 presto select item name array join array agg name as group name from test test 04 group by item name o
  • Java版企业电子招标采购系统源代码Spring Boot + 二次开发 + 前后端分离 构建企业电子招采平台之立项流程图

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • swagger注解之@ApiOperation

    swagger注解之 ApiOperation 链接 swagger学习一 链接 swagger学习二 ApiOperation 用于方法 表示一个http请求的操作 ApiOperation value 接口说明 httpMethod 接
  • 【Linux】Argument list too long参数列表过长的办法-四种

    1 背景 Linux下使用cp mv rm chmod等命令时经常会碰到 Argument list too long 错误 这主要是因为这些命令的参数太长 即文件个数过多 2 解决方案 方案一 将文件群手动划分为比较小的组合 user l
  • oracle 聚合函数 LISTAGG ,将多行结果合并成一行

    LISTAGG 列名 分割符号 oracle 11g 以上的版本才有的一个将指定列名的多行查询结果 用 指定的分割符号 合并成一行显示 例如 表原始数据 需求 将 mb1 Transport License list 表中的数据 根据 tr
  • 设计师winPE 更新支持Z370/Z390系列网卡 集成鲁大师远程协助QQ、检测工具、修复工具等懒得写自己看吧

    设计师winPE 更新支持Z370 Z390系列网卡 集成鲁大师远程协助QQ 检测工具 修复工具等懒得写自己看吧 网络远程版单机极速版 链接 https pan baidu com s 1BEraFYvtKNeqRkGljIbTtQ 提取码
  • 卷积运算转换为矩阵乘法

    看卷积神经网络的时候 发现代码中计算卷积是通过矩阵乘法来计算的 搜了一下发现网上这方面的资料很少 刚开始找中文的 找到两个 http blog csdn net anan1205 article details 12313593 http
  • 宽表, 窄表, 维度表, 事实表的区别

    在数据开发里 会涉及到一些概念 宽表 窄表 维度表 事实表 宽表 把多个维度的字段都放在一张表存储 增加数据冗余是为了减少关联 便于查询 查询一张表就可以查出不同维度的多个字段 窄表 和我们 mysql 普通表三范式相同 把相同维度的字段组
  • 信奥:1001Hello,World! 1002输出第二个整数 1003对齐输出

    include
  • Qt WebAssembly实验记录

    文章目录 1 安装及介绍 2 问题及解决方案 2 1 在C 中调用js函数 2 2 中文无法显示 乱码 2 3 无法输入中文 2 4 qt对应的emsdk版本 2 5 文件的下载以及上传 2 6 设置调试时的网页浏览器 2 7 编译时报空间
  • 睿象云入围

    睿象云入围 腾讯云原生加速器首期成员名单 6月30日 开源向善 应云而生 腾讯云原生加速器公布了首期入选企业名单 睿象云等 38 家优秀云原生企业从全球500多家参与企业中脱颖而出 携手腾讯共建云原生生态 面向云原生未来加速启航 产业数字化
  • 基于 ZooKeeper 搭建 Kafka 高可用集群

    kafka简介与应用场景 Apache Kafka是分布式发布 订阅消息系统 在 kafka官网上对 kafka 的定义 一个分布式发布 订阅消息传递系统 它最初由LinkedIn公司开发 Linkedin于2010年贡献给了Apache基
  • UE4学习笔记--连接MySQL数据库(C++)

    UE4学习笔记 连接MySQL数据库 我个人是个比较水的人 在学校没好好学程序 不误正业的玩建模 现在美术和程序都不行 想想还是重新认真学程序吧 先从记笔记开始 话说我还是第一次写博客 我是跟着几位大佬的博客做的 记录一下自己的问题 以免以