【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: 密码,建议加密存储。
  • 这些表在后面可以继续用命令添加

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 实现用户管理功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 数据库常用命令与操作指南

Oracle 数据库是企业级系统中常用的数据库管理系统,掌握基础的命令可以让你在日常管理中更加高效。本指南将介绍几条常用的 Oracle 数据库命令,涵盖用户权限管理、修改用户密码、删除用户、以及其他日常操作。 目录 授权用户操作权限使用最高权限登录 O…

Spark SQL性能优化高频面试题及答案

目录 高频面试题及答案1. 如何通过分区(Partitioning)优化Spark SQL查询性能?2. 什么是数据倾斜(Data Skew)?如何优化?3. 如何使用广播(Broadcast)优化Join操作?4. 如何优化Spark SQL的Shuffle操作?5. 如何通过缓存(Cache)优化Spark SQL的性能?6. 如何使用合适的…

ChatGPT 4o 使用指南 (9月更新)

首先基础知识还是要介绍得~ 一、模型知识: GPT-4o:最新的版本模型,支持视觉等多模态,OpenAI 文档中已经更新了 GPT-4o 的介绍:128k 上下文,训练截止 2023 年 10 月(作为对比,GPT-4…

深度学习自编码器 - 去噪自编码器篇

序言 在深度学习的广阔天地中,自编码器作为一种强大的无监督学习工具,通过重构输入数据的方式,不仅实现了数据的有效压缩,还探索了数据的内在表示。而去噪自编码器( Denoising Autoencoder, DAE \text{Denoising Auto…

软件设计师——操作系统

📔个人主页📚:秋邱-CSDN博客☀️专属专栏✨:软考——软件设计师🏅往期回顾🏆:C: 类和对象(上)🌟其他专栏🌟:C语言_秋邱 一、操作系统…

mxnet 的显存分配机制

mxnet 的显存分配机制 MXNet 的显存分配机制在性能优化和资源管理方面起着至关重要的作用。它通过高效的内存管理和调度机制来分配和释放显存,确保在训练深度学习模型时最大限度地利用 GPU 的资源。MXNet 的显存分配机制类似于其他深度学习框架(如 PyTo…

VGG16模型实现新冠肺炎图片多分类

1. 项目简介 本项目的目标是通过深度学习模型VGG16,实现对新冠肺炎图像的多分类任务,以帮助医疗人员对患者的影像进行快速、准确的诊断。新冠肺炎自爆发以来,利用医学影像如X光和CT扫描进行疾病诊断已成为重要手段之一。随着数据量的增加&am…

华为---以太网静态路由配置使用下一跳通信正常,而使用出接口无法通信

目录 1. 实验环境 2. 结果测试 3. 分析验证 3.1 以太网静态路由配置使用下一跳跨网段通信抓包分析 3.2 以太网静态路由配置使用出接口跨网段通信抓包分析 3.3 以太网静态路由配置使用出接口无法跨网段通信问题解决办法 1. 实验环境 以太网静态路由配置使用下一跳跨网段通…

网络丢包定位记录(二)

网卡驱动丢包 查看:ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量,还包括too-long-frames错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。 …

Maven的详细解读和配置

目录 一、Maven 1.1 引言 1.2 介绍 1.3 下载安装 1.3.1 解压 1.3.2 配置环境变量 1.3.3 测试 1.4 仓库[了解] 1.5 Maven配置 1.5.1 修改仓库位置 1.5.2 设置镜像 二、IDEA - MAVEN 2.1 idea关联maven 2.2 为新项目设置 2.2 创建java项目[重点] 2.3 java项目结构…

Go-知识-定时器

Go-知识-定时器 1. 介绍2. Timer使用场景2.1 设定超时时间2.2 延迟执行某个方法 3. Timer 对外接口3.1 创建定时器3.2 停止定时器3.3 重置定时器3.4 After3.5 AfterFunc 4. Timer 的实现原理4.1 Timer数据结构4.1.1 Timer4.1.2 runtimeTimer 4.2 Timer 实现原理4.2.1 创建Timer…

特征工程与交叉验证在机器学习中的应用

数据入口:学生考试表现影响因素数据集 - Heywhale.com 本数据集提供了关于影响学生考试成绩的多种因素的全面概述。数据集包含了有关学习习惯、出勤率、家长参与、资源获取等方面的信息。 数据说明 字段名说明Hours_Studied每周学习的小时数Attendance出勤率&…

Go语言的垃圾回收(GC)机制的迭代和优化历史

Go语言的垃圾回收(GC)机制自Go语言发布以来经历了多次重要的迭代和优化,以提高性能和减少程序运行时的停顿时间。 以下是一些关键的版本和相应的GC优化: Go版本GC耗时情况主要改进点Go 1.0-1.4可能达到几百毫秒至秒级使用简单的标…

《重生之我在java世界做任务升级》

ps:此乃我学习《Head First Java》之后的一本心得体会,现其分享给各位行走在Java道路上的道友 第一章:进入java的世界 尊敬的java玩家,欢迎来到JavaWorld,我将根据您的外貌特征为您创建游戏角色。 一眨眼,我仿佛进入了…

实时流处理框架(如Flink、Spark Streaming)

实时流处理框架(如Flink、Spark Streaming) 内部原理 Flink的核心概念: Checkpoint机制:Flink通过Checkpoint机制实现容错。Checkpoint会定期将系统的状态(包括算子的状态)持久化到外部存储(如…

(笔记自用)位运算总结+LeetCode例题:颠倒二进制位+位1的个数

一.位运算总结: 在解题之前理解一下为什么需要位运算?它的本质是什么? 力扣上不少位运算相关的题,并且很多题也会用到位运算的技巧。这又是为什么? 位运算的由来 在计算机里面,任何数据最终都是用数字来表示的&…

[Linux]:信号(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 信号的阻塞 1.1 基本概念 信号被操作系统发送给进程之后,进程…

【Linux学习】基本指令其一

命令行界面 命令行终端是一个用户界面,允许用户通过输入文本命令与计算机系统进行交互。 比如Windows下, 键入winR,然后输入cmd,就可以输入文本指令与操作系统交互了。 Windows有另一个命令行界面Powershell,它的功能比cmd更强大…

电商ISV 电商SaaS 是什么

Independent Software Vendors的英文缩写,意为“独立软件开发商” 软件即服务(SaaS) 指一种基于云技术的软件交付模式 订阅收费 这些公司叫做ISV软件供应商,通过SaaS服务交付收费 为什么会有电商ISV 从商家角度划分:有独立品牌商家、大商…

【nvm管理多版本node】下载安装以及常见问题和解决方案

nvm管理多版本node nvm 下载安装下载安装 nvm 常用命令其他常用命令 常见问题 nvm 下载安装 下载 nvm下载地址 每个版本下都有Assets,根据需要下载一个。 node下载地址 根据自己需要,可以下载可执行文件或者压缩包 安装 按提示安装即可。 安装过程中&#xff…