欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【Unity链接数据库01】Unity使用Oracle 数据库完成登录注册功能

【Unity链接数据库01】Unity使用Oracle 数据库完成登录注册功能

2024/10/25 6:33:50 来源:https://blog.csdn.net/leoysq/article/details/142420638  浏览:    关键词:【Unity链接数据库01】Unity使用Oracle 数据库完成登录注册功能

业务需求:

我现在需要在Unity 中创建一个登录功能我有以下业务需求:
1.用户可以注册账号密码
2.用户可以登录

3.使用Oracle 数据库表存储
4.我有一个服务器 地址已经安装了oracle 数据库 
5.创建一个数据库用户 ,账号密码 为Unity/ Unity

程序实现步骤:

  1. 概述
  2. 准备工作
    • 安装 Oracle 数据库并创建表空间
    • 创建 Oracle 数据库用户并授予权限
  3. 创建 Oracle 数据库表
  4. 在 Unity 中设置 Oracle 数据库连接
  5. 实现用户注册功能
  6. 实现用户登录功能
  7. 测试与验证
  8. 总结

1. 概述

在游戏或应用开发中,用户管理功能如注册和登录是基础的一部分。本教程将指导你如何使用 Unity 实现用户注册与登录功能,并将用户数据存储在 Oracle 数据库中。我们将一步步教你如何在 Unity 中连接 Oracle 数据库,创建用户表并实现基本的用户注册和登录功能。

2. 准备工作

2.1 安装 Oracle 数据库并创建表空间

首先,你需要在服务器上安装 Oracle 数据库,并创建一个表空间来存储用户数据。如果你已经安装好 Oracle 数据库,可以跳过这一部分。

安装完数据库以后:

你已经有一个 Oracle 数据库实例,并且你有一个管理员账号(例如 SYS 或 SYSTEM),你可以使用以下命令创建一个新用户 Unity,并授予其必要的权限。

接下来创建表空间,因为每个数据库用户下面的表数据都存在表空间中,一个表空间可以有无数用户来使用。【Oracle】 - 数据库的实例、表空间、用户、表之间关系_oracle 表空间 表 实例-CSDN博客

创建表空间并设置大小:

CREATE TABLESPACE unity_dataDATAFILE '/path_to_your_datafile/unity_data.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
  • unity_data: 表空间名称。
  • DATAFILE: 数据文件存储路径,确保该路径在服务器上有效。
  • SIZE: 初始大小为 100MB。
  • AUTOEXTEND: 表空间会自动扩展。

 如果不限制表空间 用下面代码

autoextend on next 100M maxsize unlimited ;
2.2 创建 Oracle 数据库用户并授予权限

在创建好表空间后,接下来需要创建一个用于连接的数据库用户,并为其授予适当的权限:

CREATE USER Unity IDENTIFIED BY UnityDEFAULT TABLESPACE unity_dataTEMPORARY TABLESPACE temp;GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW, CREATE PROCEDURE, UNLIMITED TABLESPACE TO Unity;
  • Unity: 新建的用户,密码也是 Unity
  • DEFAULT TABLESPACE unity_data: 默认表空间为 unity_data
  • 授予该用户连接和创建表的权限。
  • CREATE SESSION: 允许用户登录到数据库。
  • CREATE TABLE: 允许用户创建表。
  • CREATE SEQUENCE: 允许用户创建序列(例如用于自动生成主键)。
  • CREATE VIEW: 允许用户创建视图。
  • CREATE PROCEDURE: 允许用户创建存储过程。
  • UNLIMITED TABLESPACE: 允许用户使用无限的表空间。

3. 创建 Oracle 数据库表

在数据库中为用户信息创建一张表。这个表将用于存储注册用户的用户名和密码:

-- 使用 Unity 用户登录
CONNECT Unity/Unity;
-- 创建一个表格 存储用户账号密码
CREATE TABLE users (user_id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,username VARCHAR2(50) NOT NULL,password VARCHAR2(100) NOT NULL,PRIMARY KEY (user_id)
);
  • username: 用户名,唯一标识用户。
  • password: 密码,建议加密存储。
  • 这些表在后面可以继续用命令添加

GENERATED BY DEFAULT AS IDENTITY 是 Oracle 12c 引入的语法,用于创建自增列。具体来说,Oracle 12c Release 1 (12.1) 及以上版本支持这种语法。

如果数据库版本是11g 11.2.1 就不支持了! 需要用下面的语句分别实现自增触发,需要分步骤进行:

1.授予子用户(本案例的数据库用户是Unity)创建序列、触发器、表的权限

-- 授予创建表、序列、触发器的权限
GRANT CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER TO Unity;

2. 确保 Unity 账户拥有足够的权限

如果你已经授予了权限,但仍然遇到问题,请确保权限已经正确应用。你可以使用以下查询来检查 Unity 账户的权限:

SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'Unity';
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'Unity';

3.创建表-Unity 账户下创建一个表格,用来存储账号密码

CREATE TABLE Unity.UserInfo (UserID NUMBER PRIMARY KEY,Account VARCHAR2(50) NOT NULL,Password VARCHAR2(100) NOT NULL,PhoneNumber VARCHAR2(20),Gender CHAR(1) CHECK (Gender IN ('M', 'F'))
);

有了表以后,我们可以设置账户对这个表的权限

假设你有一个名为 Unity 的用户,并且你希望该用户能够在 Unity 模式下的 UserInfo 表中插入数据,你可以使用以下 SQL 语句:

GRANT INSERT ON Unity.UserInfo TO Unity;

执行这条语句后,Unity 用户将能够在 Unity.UserInfo 表中插入数据。

其他权限

除了 INSERT,你还可以授予其他权限,例如:

  • SELECT: 允许查询表中的数据。

  • UPDATE: 允许更新表中的数据。

  • DELETE: 允许删除表中的数据。

  • ALL: 授予所有可能的权限。

例如,授予 Unity 用户在 Unity.UserInfo 表上的所有权限:

GRANT ALL ON Unity.UserInfo TO Unity;

4.创建序列

CREATE SEQUENCE Unity.UserInfo_Seq
START WITH 1
INCREMENT BY 1;

5.创建触发器

CREATE OR REPLACE TRIGGER Unity.UserInfo_BIR
BEFORE INSERT ON Unity.UserInfo
FOR EACH ROW
BEGINIF :NEW.UserID IS NULL THENSELECT Unity.UserInfo_Seq.NEXTVAL INTO :NEW.UserID FROM DUAL;END IF;
END;
/

6.插入数据 

INSERT ALLINTO Unity.UserInfo (UserID, UserName, Email, CreatedDate) VALUES (2, 'Jane Smith', 'jane.smith@example.com', TO_DATE('2023-10-02', 'YYYY-MM-DD'))INTO Unity.UserInfo (UserID, UserName, Email, CreatedDate) VALUES (3, 'Alice Johnson', 'alice.johnson@example.com', TO_DATE('2023-10-03', 'YYYY-MM-DD'))
SELECT 1 FROM DUAL;

总结

通过授予 Unity 账户必要的权限,并确保权限正确应用,你应该能够在 Unity 账户下成功创建表、序列、触发器,并插入数据。

===================

4. 在 Unity 中设置 Oracle 数据库连接

为了在 Unity 中与 Oracle 数据库交互,我们可以使用 Oracle Data Provider for .NET (ODP.NET)。以下是如何在 Unity 中连接到 Oracle 数据库的步骤:

4.1 安装 ODP.NET 库

你需要在项目中引入 Oracle 的 .NET 数据提供程序(ODP.NET)。可以通过 NuGet 安装 Oracle.ManagedDataAccess 库。

下载下面的文件放在Asset/Plugin 下面

链接: https://pan.baidu.com/s/1CnABP3gf-dUgT92plGPzrw 提取码: 146m 

首先,你需要在 Unity 项目中安装 Oracle.ManagedDataAccess 库。你可以通过 NuGet 包管理器来安装这个库,或者手动下载并添加到 Unity 项目中。

4.2 配置数据库连接

在 Unity 中,编写 C# 代码来连接 Oracle 数据库。以下是连接 Oracle 数据库的基本代码:

using Oracle.ManagedDataAccess.Client;public class DatabaseManager
{private string connectionString = "User Id=Unity;Password=Unity;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=your-server-ip)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=your-service-name)))";public OracleConnection GetConnection(){OracleConnection connection = new OracleConnection(connectionString);connection.Open();return connection;}
}

修改 your-server-ipyour-service-name,以匹配你服务器的 IP 和数据库服务名。

5. 实现用户注册功能

在 Unity 中,我们可以通过用户界面收集用户名和密码,并将这些数据存储在 Oracle 数据库中。

5.1 编写注册代码
public class UserManager
{private DatabaseManager dbManager = new DatabaseManager();public bool Register(string username, string password){using (OracleConnection conn = dbManager.GetConnection()){string encryptedPassword = EncryptPassword(password); // 加密密码string query = "INSERT INTO users (username, password) VALUES (:username, :password)";OracleCommand cmd = new OracleCommand(query, conn);cmd.Parameters.Add(new OracleParameter("username", username));cmd.Parameters.Add(new OracleParameter("password", encryptedPassword));try{cmd.ExecuteNonQuery();return true;}catch (Exception ex){Console.WriteLine(ex.Message);return false;}}}private string EncryptPassword(string password){// 加密逻辑(例如使用哈希函数)return password; // 这是简化示例,实际需要加密}
}

加密密码以确保数据安全。

5.2 注册界面

在 Unity 中创建简单的注册界面,用户可以输入用户名和密码,并点击注册按钮:

public class RegisterUI : MonoBehaviour
{public InputField usernameInput;public InputField passwordInput;public UserManager userManager;public void OnRegisterButtonClicked(){string username = usernameInput.text;string password = passwordInput.text;if (userManager.Register(username, password)){Debug.Log("注册成功");}else{Debug.Log("注册失败");}}
}

6. 实现用户登录功能

用户登录需要从数据库中查询用户名和密码,并进行验证。

6.1 编写登录代码
public class UserManager
{public bool Login(string username, string password){using (OracleConnection conn = dbManager.GetConnection()){string query = "SELECT password FROM users WHERE username = :username";OracleCommand cmd = new OracleCommand(query, conn);cmd.Parameters.Add(new OracleParameter("username", username));OracleDataReader reader = cmd.ExecuteReader();if (reader.Read()){string storedPassword = reader.GetString(0);if (VerifyPassword(password, storedPassword)){return true; // 登录成功}}return false; // 登录失败}}private bool VerifyPassword(string enteredPassword, string storedPassword){// 验证密码逻辑return enteredPassword == storedPassword;}
}

6.2 登录界面

在 Unity 中创建一个简单的登录界面,用户可以输入用户名和密码,并点击登录按钮:

public class LoginUI : MonoBehaviour
{public InputField usernameInput;public InputField passwordInput;public UserManager userManager;public void OnLoginButtonClicked(){string username = usernameInput.text;string password = passwordInput.text;if (userManager.Login(username, password)){Debug.Log("登录成功");}else{Debug.Log("登录失败");}}
}

7. 测试与验证

在 Unity 中测试整个注册和登录流程。确保在注册时,用户数据能够正确存储到 Oracle 数据库中,并且在登录时能够正确验证用户名和密码。


8. 总结

通过本教程,你已经成功在 Unity 中实现了用户注册和登录功能,并使用 Oracle 数据库来存储用户数据。这个流程包括创建数据库表、连接 Oracle 数据库、以及通过简单的 UI 实现用户管理功能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com