UE5连接SQL数据库

本文档详细介绍了如何在Unreal Engine中安装和使用SqlConnect插件进行数据库连接。该插件支持本地SQL服务器和云数据库(如Azure Database for SQL),并提供了C++和蓝图的同步及异步调用方式。通过示例代码,展示了如何进行数据库的连接、查询及获取数据行数等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、安装 Sql Connect 插件
Install the Sql Connect plugin

https://www.unrealengine.com/marketplace/zh-CN/product/d1e931c9fb2a459ea2f33a12823e830a

2、使用插件
Use plugins

在这里插入图片描述
在这里插入图片描述

Features:(产品特点)

Support local SQL server and cloud database connection (eg: Azure Database for SQL)
支持本地SQL服务器和云数据库连接(例如:Azure Database for SQL)

Support C++ or pure blueprint calls
支持 C++ 或纯蓝图调用

Synchronous and asynchronous support
同步和异步支持

used in C++(在 C++ 中使用)

/////////////////////////// synchronous connection example(同步连接示例) ///////////////////////////////

sql = USqlConnectSubsystem::Get();
Results = NewObject<USqlResult>();

sql->Connect("127.0.0.1", 1433, "username", "pw", "TableName", Results);
if (!Results->IsSucceed)
{
	UE_LOG(LogTemp, Warning, TEXT("SQL: ConnectError: %s"), *Results->Msg);
	return;
}

//Get the total number of rows
sql->Query("SELECT count(1) FROM `testtable`", Results);
UE_LOG(LogTemp, Warning, TEXT("SQL: Count: IsSucceed = %d, msg = %s, count = %d"), Results->IsSucceed, *Results->Msg, Results->getCount());

//get row
sql->Query("SELECT * FROM `testtable`", Results);
UE_LOG(LogTemp, Warning, TEXT("SQL: rows: IsSucceed = %d, msg = %s, Num = %d"), Results->IsSucceed, *Results->Msg, Results->getRows().Num());

/////////////////////////// Asynchronous connection example(异步连接示例) ///////////////////////////////

sql = USqlConnectSubsystem::Get();
Results = NewObject<USqlResult>();

const FLatentActionInfo LatentInfo(0, FMath::Rand(), TEXT("ConnectCallback"), this);
sql->AConnect("127.0.0.1", 1433, "username", "pw", "TableName", Results, this, LatentInfo);

//Asynchronous callback function
void APluginProjectGameModeBase::ConnectCallback()
{
    if (!Results->IsSucceed)
    {
        UE_LOG(LogTemp, Warning, TEXT("SQL: ConnectError: %s"), *Results->Msg);
        return;
    }

    //Get the total number of rows
    const FLatentActionInfo LatentInfo(0, FMath::Rand(), TEXT("fetch_count_Callback"), this);
    sql->AQuery("SELECT count(1) FROM `testtable`", Results, this, LatentInfo);
}

//Asynchronous callback function
void APluginProjectGameModeBase::fetch_count_Callback()
{
    UE_LOG(LogTemp, Warning, TEXT("SQL: Count: IsSucceed = %d, msg = %s, count = %d"), Results->IsSucceed, *Results->Msg, Results->getCount());

    //get row
    const FLatentActionInfo LatentInfo(0, FMath::Rand(), TEXT("fetch_rows_Callback"), this);
    sql->AQuery("SELECT * FROM `testtable`", Results, this, LatentInfo);
}

//Asynchronous callback function
void APluginProjectGameModeBase::fetch_rows_Callback()
{
    UE_LOG(LogTemp, Warning, TEXT("SQL: rows: IsSucceed = %d, msg = %s, Num = %d"), Results->IsSucceed, *Results->Msg, Results->getRows().Num());
}
### 在 Unreal Engine 5 中生成唯一 ID 字符串 在 Unreal Engine 5 (UE5) 中,可以通过多种方式生成唯一的字符串 ID。以下是几种常见的方法: #### 方法一:使用 `FGuid` 类 Unreal 提供了一个内置类 `FGuid` 来生成全局唯一标识符(GUID)。该类能够创建随机的 GUID 或基于特定算法生成。 ```cpp #include "Misc/Guid.h" // 创建一个新的 FGuid 对象并初始化为随机值 FGuid UniqueId = FGuid::NewGuid(); // 将其转换为字符串形式 FString UniqueIdAsString = UniqueId.ToString(); ``` 此方法利用了 UE 的核心库来生成一个几乎不可能重复的 UUID[^1]。 --- #### 方法二:组合时间戳与随机数 如果需要自定义逻辑生成唯一 ID,则可以结合当前的时间戳和随机数实现。 ```cpp #include "HAL/PlatformTime.h" #include "Math/RandomStream.h" FString GenerateUniqueId() { uint64 Timestamp = FPlatformTime::Cycles64(); // 获取高精度时间戳 FRandomStream RandomStream; int32 RandomNumber = RandomStream.RandRange(0, INT32_MAX); // 随机数范围 FString Id = FString::Printf(TEXT("T%llu_R%d"), Timestamp, RandomNumber); return Id; } // 调用函数生成唯一 ID FString UniqueId = GenerateUniqueId(); ``` 这种方法通过时间戳确保每次调用都不同,并加入随机数进一步降低冲突概率[^2]。 --- #### 方法三:使用 SQLite 数据库中的 `ROWID` 当项目涉及 SQLite 数据库时,可以直接依赖数据库引擎提供的隐式字段 `ROWID` 自动生成每条记录的唯一索引号。虽然这不是直接生成字符串的方式,但在某些场景下非常实用。 假设有一个表结构如下: ```sql CREATE TABLE MyTable ( Name TEXT, Value INTEGER ); ``` 每当向表中插入新数据时,SQLite 自动维护 `ROWID` 列作为每一行的唯一标识符。 --- #### 方法四:UUID 库扩展 对于更复杂的跨平台需求,还可以引入第三方 C++ UUID 库(如 Boost.UUID),并通过模块化集成到 UE 工程中。不过这种方式通常适用于高级开发人员或特殊用途。 --- ### 总结 上述四种方法各有优劣,具体选择取决于实际应用场景和技术栈偏好。推荐优先考虑 **方法一** (`FGuid`) 和 **方法二** (时间戳+随机数),因为它们简单高效且完全兼容 UE 生态环境。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值