Función de inicio de sesión de producción de Unity 02-Crear y vincular base de datos (SQlite)

Práctica internacional: primer vistazo al efecto

1.SQlite es una base de datos integrada

Hay muchas razones para usar SQLite al desarrollar juegos en Unity, estas son algunas de las principales:

  1. Base de datos integrada: SQLite es un motor de base de datos integrado, lo que significa que no requiere un proceso de servidor independiente. Esto hace que trabajar con SQLite sea muy conveniente y pueda usarse fácilmente en diferentes plataformas y sistemas operativos.
  2. Fácil de usar: SQLite es fácil de aprender y usar, con una sintaxis SQL concisa y funciones potentes. Esto permite a los desarrolladores crear e implementar juegos más rápido y, al mismo tiempo, reducir la necesidad de sistemas de bases de datos complejos.
  3. Compatibilidad: SQLite tiene compatibilidad multiplataforma y se puede utilizar en diferentes plataformas como Windows, Mac, Linux, Android e iOS. Esto significa que el uso de SQLite puede reducir las diferencias entre juegos en diferentes plataformas y mejorar la coherencia del juego.
  4. Seguridad: SQLite admite transacciones e integridad de datos, lo que la convierte en una opción de base de datos segura. También proporciona opciones de cifrado para proteger los datos confidenciales almacenados en la base de datos.
  5. Escalabilidad y portabilidad: SQLite tiene buena escalabilidad y puede manejar grandes cantidades de datos y acceso simultáneo. Esto significa que el uso de SQLite puede satisfacer diversas necesidades en el desarrollo de juegos, incluido el almacenamiento de grandes cantidades de datos del juego y el manejo de un alto acceso simultáneo de usuarios.
  6. Código abierto y gratuito: SQLite es de código abierto y su uso y modificación son gratuitos. Además, SQLite también cuenta con buena documentación y soporte comunitario para ayudar a los desarrolladores a resolver los problemas que encuentren.

2. Cómo instalar SQLite en el servidor o computadora local 

 Descarga del sitio web oficial de la página de descarga de SQLite

Descarga según sistema operativo

Cree una carpeta en la unidad C y descomprima los archivos descargados en ella.

 sqlite3.def es solo para admitir archivos a los que se puede acceder mediante la ventana de comandos CMD de la computadora local

3. Cómo usar SQLite en Unity 

Crea una carpeta (nómbrala tú mismo, el principio es que puedes encontrarla)

Busque estos dos archivos en su computadora y cópielos a la carpeta Complementos que acaba de crear. 

  1. Mono.Data.Sqlite.dll

  2. sqlite3.dll

4. ¡Reinicie VS y haga referencia al ensamblaje! usando Mono.Data.Sqlite;

5. Aprenda la primera clase de este ensamblado, SQLiteConnection

SQLiteConnection es una clase en .NET Framework y es una de las principales interfaces utilizadas por ADO.NET para interactuar con bases de datos SQLite. A través de esta clase, puede ejecutar consultas SQL, modificar datos en la base de datos, manejar transacciones en la base de datos y más.

Si necesita utilizar SQLiteConnection, primero debe asegurarse de que su proyecto haya introducido el paquete SQLite .NET correcto. Puede agregar este paquete a través de NuGet. En Visual Studio, haga clic derecho en el proyecto -> "Administrar paquetes NuGet..." -> Busque "System.Data.SQLite" -> "Instalar".

Las principales propiedades y métodos de la clase SQLiteConnection son:

  • ConnectionString: una cadena utilizada para definir una conexión de base de datos.
  • Abrir(): abre la conexión de la base de datos.
  • Cerrar (): cierra la conexión a la base de datos.
  • Ejecutar (comando SqlCommand): ejecuta un comando SQL y devuelve el número de filas afectadas.
  • BeginTransaction(): inicia una transacción de base de datos.
  • Commit(): confirma la transacción de la base de datos.
  • Rollback(): revertir transacción de base de datos.

Caso práctico: registro de usuario

Registro de usuario y almacenamiento de cuenta y contraseña en base de datos.

 Dos guiones:

1. Obtenga la cadena de contraseña de la cuenta ingresada por el usuario en la interfaz de usuario
2. ¡Cree un enlace de datos SQLite! ¡Crea una mesa! ¡Inserte la contraseña de la cuenta obtenida en la base de datos!

Construcción de escena:

1. Obtenga la cadena de contraseña de la cuenta ingresada por el usuario en la interfaz de usuario

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 frame

    private 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. ¡Cree un enlace de datos SQLite! ¡Crea una mesa! ¡Inserte la contraseña de la cuenta obtenida en la base de datos!

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;
    }
}

 PD: Cuando termine, la base de datos debe cerrarse y borrarse =====================

 

Este código es el método utilizado para cerrar la conexión de la base de datos. Específicamente, MyConnectionDB.Close()significa cerrar la conexión de base de datos actual y liberar cualquier recurso asociado con la conexión. En su lugar MyConnectionDB = null;, establezca el objeto de conexión de la base de datos en nulo para que el recolector de basura pueda reciclarlo en el momento adecuado.

Cerrar las conexiones de la base de datos es importante para mejorar el rendimiento de la aplicación y evitar fugas de recursos. Si la conexión de la base de datos no se cierra correctamente, el grupo de conexiones puede estar demasiado ocupado y afectar el rendimiento de la aplicación, o los recursos del sistema pueden ser insuficientes y la aplicación puede experimentar excepciones.

Una vez que haya terminado de usar la conexión de la base de datos, debe cerrarla rápidamente para permitir que otras aplicaciones accedan a la base de datos a través del grupo de conexiones. Al mismo tiempo, establecer el objeto en nulo también ayuda al recolector de basura a reciclar rápidamente los recursos no utilizados para mejorar el rendimiento y la estabilidad de la aplicación.

En resumen, el propósito de este código es establecer el objeto de conexión en nulo después de cerrar la conexión de la base de datos para que el recolector de basura pueda recuperar recursos a tiempo.

efecto final:

Supongo que te gusta

Origin blog.csdn.net/leoysq/article/details/133239275
Recomendado
Clasificación