Unity 制作登录功能02-创建和链接数据库(SQlite)

国际惯例:先看效果

1.SQlite是一种嵌入型数据库

在Unity开发游戏时使用SQLite有多种原因,以下是其中一些主要原因:

  1. 嵌入式数据库:SQLite是一个嵌入式数据库引擎,这意味着它不需要单独的服务器进程。这使得使用SQLite非常方便,并且可以轻松地在不同的平台和操作系统上使用。
  2. 易于使用:SQLite易于学习和使用,具有简洁的SQL语法和强大的功能。这使得开发者可以更快地构建和部署游戏,同时减少了对复杂的数据库系统的需求。
  3. 兼容性:SQLite具有跨平台的兼容性,可以在Windows、Mac、Linux、Android和iOS等不同平台上使用。这意味着使用SQLite可以减少游戏在不同平台上的差异,提高游戏的一致性。
  4. 安全性:SQLite支持事务和数据完整性,这使得它成为一种安全的数据库选择。它还提供了加密选项,可以保护存储在数据库中的敏感数据。
  5. 可扩展性、移植:SQLite具有很好的可扩展性,可以处理大量的数据和并发访问。这意味着使用SQLite可以满足游戏开发中的各种需求,包括存储大量的游戏数据和处理高并发的用户访问。
  6. 开源和免费:SQLite是开源的,可以免费使用和修改。此外,SQLite还具有很好的文档和社区支持,可以帮助开发者解决遇到的问

2.如何在服务器或者本地计算机安装SQLite 

SQLite Download Page 官网下载

根据操作系统下载

C盘创建文件夹,把下载的文件解压放进去

 sqlite3.def 只是为了支持本地计算机的CMD命令窗口可以访问的文件

3.如何在Unity中使用SQLite 

创建文件夹 (自己命名,原则就是自己能找到)

在自己电脑上搜这两个文件,复制到自己刚刚创建的文件夹Plugins 

  1. Mono.Data.Sqlite.dll

  2. sqlite3.dll

4.重启VS, 引用程序集即可!using Mono.Data.Sqlite;

5.学习该程序集的第一个类SQLiteConnection

SQLiteConnection是.NET Framework中的一个类,它是ADO.NET用于与SQLite数据库进行交互的主要接口之一。通过这个类,你可以执行SQL查询,修改数据库中的数据,处理数据库中的事务等等。

如果你需要使用SQLiteConnection,首先你需要确保你的项目已经引入了正确的SQLite .NET 包。你可以通过NuGet来添加这个包。在Visual Studio中,右击项目 -> "Manage NuGet Packages..." -> 搜索 "System.Data.SQLite" -> "Install"。

SQLiteConnection类的主要属性和方法有:

  • ConnectionString:用于定义数据库连接的字符串。
  • Open():打开数据库连接。
  • Close():关闭数据库连接。
  • Execute(SqlCommand command):执行一个SQL命令并返回受影响的行数。
  • BeginTransaction():开始一个数据库事务。
  • Commit():提交数据库事务。
  • Rollback():回滚数据库事务。

实战案例:用户注册

用户注册并存储账号密码到数据库

 两个脚本:

1.获取用户在UI界面输入的账号密码字符串
2.创建一个数据链接SQLite!创建一个表!把获取的账号密码插入数据库!

场景搭建:

1.获取用户在UI界面输入的账号密码字符串

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;public class UserLogin : MonoBehaviour
{// 该脚本获取场景中输入框组件2.获取用户输入内容 public TMP_InputField userInputFieldAccount;public TMP_InputField userInputFieldPassword;public GameObject inputkuang;public static string UserAccount;public static string UserPassword;void Start(){userInputFieldAccount.onEndEdit.AddListener(OnUserInputChanged);userInputFieldPassword = inputkuang.GetComponent<TMP_InputField>();userInputFieldPassword.onEndEdit.AddListener(OnUserInputPassword);}private void OnUserInputPassword(string password){Debug.Log("用户输入的密码是:" + password);UserPassword = password;}// Update is called once per frameprivate void OnUserInputChanged(string Account){// 当用户输入值发生改变时调用该方法Debug.Log("用户输入的注册:" + Account);UserAccount = Account;}public void Login()//该函数用来在外部登录按钮面板中触发{Debug.Log("面板上的函数触发成功,用户点击了注册按钮" + UserAccount + "  " + UserPassword);do{           ConnectDataSQL.GetUserInput(UserAccount, UserPassword);//调用另一个类的方法:插入数据库并存储Debug.Log("注册成功");        } while (false);}
}

2.创建一个数据链接SQLite!创建一个表!把获取的账号密码插入数据库!

using UnityEngine;
using System.Data;
using Mono.Data.Sqlite;public class ConnectDataSQL : MonoBehaviour
{private const string databaseName = "leoyang.db"; // 数据库文件名称static SqliteConnection MyConnectionDB;//创建一个数据库链接事件对象string UserAccount;string UserPassword;private void Start(){// 定义数据库连接字符串string connectionString = "URI=file:" + Application.dataPath + "/" + databaseName;// 创建数据库连接//传入创建或者访问SQLITE数据库的路径MyConnectionDB = new SqliteConnection(connectionString);if (MyConnectionDB.State == ConnectionState.Closed)//检测当前数据库链接状态是否关闭{MyConnectionDB.Open();//打开数据库Debug.Log("数据库链接完毕已打开");}else{Debug.Log("数据库连接失败");}// 创建数据库用户表(如果不存在)CreateTable(MyConnectionDB);     }// 创建用户表的方法private void CreateTable(SqliteConnection oneConnect){string sqlCreateTable = "CREATE TABLE IF NOT EXISTS UserTable (" +"Id INTEGER PRIMARY KEY AUTOINCREMENT," +"Username TEXT NOT NULL," +"Password TEXT NOT NULL" +");";SqliteCommand SQcommand = new SqliteCommand(sqlCreateTable, oneConnect);//数据库创建命令SQcommand.ExecuteNonQuery();SQcommand.Dispose();SQcommand = null;}public static void GetUserInput(string UserAccount, string UserPassword)//用户点击注册开始插入数据库{if (UserPassword!=null&&UserAccount!=null){InsertUser(UserAccount,UserPassword);}}// 插入用户输入的账号和密码的方法public static void InsertUser(string username, string password){string sqlCreateTable = "INSERT INTO UserTable (Username, Password) VALUES (@Username, @Password)";if (MyConnectionDB.State != ConnectionState.Open){MyConnectionDB.Open();Debug.Log("我为您重新打开了数据库");}else{SqliteCommand Insertuser = new SqliteCommand(sqlCreateTable, MyConnectionDB);Insertuser.Parameters.AddWithValue("@Username", username);Insertuser.Parameters.AddWithValue("@Password", password);//在 try 块中的代码执行期间,如果发生了异常,则会跳过后续的代码,并进入与异常类型匹配的 catch 块中进行处理。如果异常类型没有与任何 catch 块匹配,那么将会跳过所有的 catch 块,但仍然可以选择执行 finally 块。try{Insertuser.ExecuteNonQuery();Debug.Log("插入注册成功.");}catch (SqliteException yichang){Debug.LogError("插入注册失败 " + yichang.Message);}finally{// 释放资源和清理操作Insertuser.Dispose();Insertuser = null;MyConnectionDB.Close();}}Debug.Log("注册成功.");}// 读取用户表中的数据的方法// 每次执行完数据库命令后,通常需要调用 ExecuteNonQuery() 方法来执行命令,然后使用 Dispose() 方法释放相关资源,// 最后将对象置为 null。 public void ClearDB()//关闭数据库{MyConnectionDB.Close();MyConnectionDB = null;}
}

 PS 用完数据库要关闭和清空====================

 

这段代码是用于关闭数据库连接的方法。具体来说,MyConnectionDB.Close()表示关闭当前数据库连接,并释放与该连接关联的任何资源。而MyConnectionDB = null;则将数据库连接对象置为null,以便垃圾回收器可以在适当的时候将其回收。

关闭数据库连接对于提高应用程序性能和防止资源泄漏非常重要。如果没有正确关闭数据库连接,可能会导致连接池被占用过多而影响应用程序性能,或者导致系统资源不足而导致应用程序出现异常。

在使用完数据库连接后,应该及时关闭它,以便让其他应用程序能够通过连接池访问数据库。同时,将对象置为null也有助于垃圾回收器及时回收不再使用的资源,以提高应用程序的性能和稳定性。

总之,本段代码的作用是在关闭数据库连接后,将连接对象置为null,以便垃圾回收器可以及时回收资源。

最终效果:

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

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

相关文章

专题五:优先级队列

"你了解我&#xff0c;最干净的轮廓&#xff0c; 握住小小风车和放肆的梦~" 堆是一个不错的数据结构&#xff0c;而在计算机中&#xff0c;无法表示二叉分支结构&#xff0c;因此我们经常会看到使用线性表来作为堆的存储容器。在接触堆的时候&#xff0c;我们是把它…

admin后台管理

admin后台管理 django 提供了比较完善的后台管理数据库的接口&#xff0c;可供开发过程中调用和测试使用 django 会搜集所有已注册的模型类&#xff0c;为这些模型类提拱数据管理界面&#xff0c;供开发者使用 admin配置步骤 创建后台管理帐号- 该账号为管理后台最高权限账号…

【数据结构初阶】六、线性表中的队列(链式结构实现队列)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】五、线性表中的栈&#xff08;顺序表实现栈&#xff09;_高高的胖子的博客-CSDN博客 1 . 队列&#xff08;Queue&#xff09; 队列的概念和结构&#xff1a; 队列…

No147.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Docker Dockerfile解析

Dockerfile是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 官网&#xff1a;Dockerfile reference | Docker Docs 构建三步骤&#xff1a; 编写Dockerfile文件docker build命令构建镜像docker run依镜像运行容…

Unity之Hololens如何实现3D物体交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

在Windbg中设置断点追踪打开软件远程调试开关的模块

目录 1、Windbg动态调试 2、在Windbg中设置断点 2.1、在函数入口处设置断点 2.2、在函数内部某一行上设置断点 3、设置断点跟踪对打开远程调试开关接口的调用 3.1、编写演示代码 3.2、在Windbg中设置调用SetRemoteDebugOn接口的断点进行跟踪 4、最后 VC常用功能开发汇总…

python tempfile模块:生成临时文件和临时目录

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 tempfile 模块专门用于创建临时文件和临时目录&#xff0c;它既可以在 UNIX 平台上运行良好&#xff0c;也可以在 Windows 平台上运行良好。 tempfile 模块中常用…

idea Springboot 图书管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 图书管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#…

react create-react-app v5配置 px2rem (暴露 eject方式)

环境信息&#xff1a; create-react-app v5 “react”: “^18.2.0” “postcss-plugin-px2rem”: “^0.8.1” 配置步骤&#xff1a; 我这个方式是 npm run eject 暴露 webpack配置的方法 1.安装 postcss-plugin-px2rem 和 lib-flexible cnpm install postcss-plugin-px2rem…

在MySQL中使用VARCHAR字段进行日期筛选

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

V4L2 驱动架构介绍

V4L2 简介 Video for Linux two(Video4Linux2)简称 V4L2&#xff0c;是 V4L 的改进版。V4L2 是 linux操作系统下用于视频和音频数据采集设备的驱动框架&#xff0c;为驱动和应用程序提供了一套统一的接口规范。 在 Linux 下&#xff0c;所有外设都被看成一种特殊的文件&#xf…