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++) 的相关文章

  • PHP Microsoft Excel 文件生成/导出类

    我一直在寻找一个好的 Excel 文件生成类 但还没有找到 我的首要问题是 虽然我可以在 Excel 中打开导出的文件 运行 2007 年 但我总是收到一条警告 文件的格式与文件扩展名不同 我注意到 phpMyAdmin 中的 Excel
  • 将mysql数据导入kubernetes pod

    有谁知道如何将我的 dump sql 文件中的数据导入到 kubernetes pod 中 直接 与处理 docker 容器的方式相同 docker exec i container name mysql uroot password se
  • 使用WordPress get_results()数据库函数是否可以防止sql注入

    似乎找不到答案 但想知道以下对数据库的查询是否容易受到 SQL 注入的攻击 searchPostResults wpdb gt get results querySearchVals OBJECT 这是使用的查询 global wpdb o
  • 通过 PHP 将 CSV 导入 MYSQL

    我正在将 CSV 文件导入到我的管理区域 并且我想将文件添加到我的数据库中 我的 PHP 代码import php is
  • MySQL 匹配全文

    我正在尝试使用 mysql 进行全文搜索以匹配字符串 问题是它首先返回奇怪的结果 例如 字符串 passat 2 0 tdi AND MATCH records veiculos titulo records veiculos descri
  • MYSQL从另一个表插入id

    我有以下疑问 我有 2 张桌子 id customers 1 alan 2 beth 3 john and id id customers value 1 1 bar 2 1 foo 3 2 baz 示例 我需要在第二个表中添加值 alfa
  • 如何准备更新查询语句? [复制]

    这个问题在这里已经有答案了 我有一个 mysqli 查询 代码如下 db usag gt query UPDATE Applicant SET phone number phone number street name street nam
  • 尝试通过 JDBC 将 UTF-8 插入 MySQL 时出现“错误的字符串值”?

    这就是我的连接设置方式 Connection conn DriverManager getConnection url dbName useUnicode true characterEncoding utf 8 userName pass
  • 如何将 PHP 数组中的值插入到 MySQL 表中?

    我正在创建一个注册表单 其中包含姓名 电子邮件和电话号码字段 为了检查用户输入的有效性 我有一个函数validate input 返回一个数组 arr包含用户输入的输入 如果用户输入有效 arr然后传递给一个单独的函数 该函数将值插入arr
  • 设置 MySQL 触发器

    我听说过有关触发器的事情 我有几个问题 什么是触发器 我该如何设置它们 除了典型的 SQL 内容之外 是否还应该采取任何预防措施 触发器允许您在发生某些事件 例如 插入表 时在数据库中执行某个功能 我无法具体评论mysql 注意事项 触发器
  • 土耳其语字符显示不正确[重复]

    这个问题在这里已经有答案了 MySql 数据库使用 utf 8 编码 数据存储正确 我使用 set name utf8 查询来确保调用的数据是 utf 8 编码 只要标头字符集是 utf 8 数据库中的所有变量都可以正常工作 但静态html
  • 同步不同数据库的2个表-MySQL

    我在数据库表中有一个包含某些医疗信息的表 我每天抓取并解析它们并将其存储在本地数据库的表中 假设最初有 1500 条记录 今天我的本地计算机上又添加了 100 条记录 现在 我有一个服务器 我需要在其中推送这些记录 因此数据库是不同的 我昨
  • 跨数据库管理系统检查字符串是否为数字的方法

    好的 我有这个字段 code varchar 255 它包含我们导出例程中使用的一些值 例如 DB84 DB34 3567 3568 我需要仅选择自动生成的 全数字 字段 WHERE is numeric table code is num
  • MySQL中的字符串分割函数

    谁能告诉我如何在 mysql 中实现 split 函数 其行为类似于 Javascript split 我想要一个这样的功能 SELECT Split a b c d AS splitted 结果如下 splitted a b c d 有谁
  • Mysql:多个表还是一张大表?

    这个问题已经被问过 但我还没有找到 1 个语音答案 最好这样做 1 张大桌子 其中 用户 ID 属性 1 属性 2 属性 3 属性 4 或 4 个小桌子 其中 用户 ID 属性 1 用户 ID 属性 2 用户 ID 属性 3 用户 ID 属
  • 连接到 mysql 服务器(localhost)非常慢

    实际上有点复杂 摘要 与数据库的连接非常慢 页面渲染大约需要 10 秒 但页面上的最后一条语句是一个回显 当页面在 Firefox 中加载时我可以看到它的输出 IE 是相同的 在谷歌浏览器中 只有在加载完成后输出才可见 不同浏览器的加载时间
  • mysql 修改全文搜索的停用词列表

    我搜索了很多 据说我必须编辑 my cnf 文件来更改停用词列表 我将 my medium cnf 重命名为 my cnf 并添加了 ft query expansion limit 和 ft stopword file 条件 我已经重新启
  • Rails 创建 schema_migrations - Mysql2::Error: 指定的键太长

    我正在使用Rails 3 2 6和Mysql 6 0 9 但我在MySQL 5 2 25上有完全相同的错误 当我创建新数据库时 rake db create 然后当我尝试加载架构时 rake schema load 我收到此错误 Mysql
  • REPLACE MYSql 中的新行字符不起作用

    我执行了以下查询 由于某种原因它没有替换数据库中的换行符 它说 Rows matches 1 但没有变化 有什么问题吗 mysql gt UPDATE aboutme SET abouttext REPLACE abouttext n WH
  • 在 ADO 查询 (mysql/MyConnector) 中使用参数

    今天我下载并安装了 MyConnector 这样我就可以通过 ADO 使用 Mysql 一切都安装好了 我可以与 ODBC 连接并从我的 delphi 环境进行连接 当我在运行时构建查询时 我收到一条错误消息 项目 Project1 exe

随机推荐

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