Função de login de produção do Unity 02-Criar e vincular banco de dados (SQlite)

Prática internacional: primeiro observe o efeito

1.SQlite é um banco de dados incorporado

Existem muitos motivos para usar SQLite ao desenvolver jogos em Unity, aqui estão alguns dos principais:

  1. Banco de dados incorporado: SQLite é um mecanismo de banco de dados incorporado, o que significa que não requer um processo de servidor separado. Isso torna o trabalho com SQLite muito conveniente e pode ser facilmente usado em diferentes plataformas e sistemas operacionais.
  2. Fácil de usar: SQLite é fácil de aprender e usar, com sintaxe SQL concisa e funções poderosas. Isso permite que os desenvolvedores criem e implantem jogos com mais rapidez, reduzindo a necessidade de sistemas de banco de dados complexos.
  3. Compatibilidade: SQLite possui compatibilidade multiplataforma e pode ser usado em diversas plataformas como Windows, Mac, Linux, Android e iOS. Isso significa que o uso do SQLite pode reduzir as diferenças nos jogos em diferentes plataformas e melhorar a consistência do jogo.
  4. Segurança: SQLite oferece suporte a transações e integridade de dados, o que o torna uma escolha de banco de dados segura. Ele também fornece opções de criptografia para proteger dados confidenciais armazenados no banco de dados.
  5. Escalabilidade e portabilidade: SQLite possui boa escalabilidade e pode lidar com grandes quantidades de dados e acesso simultâneo. Isso significa que o uso do SQLite pode atender a diversas necessidades no desenvolvimento de jogos, incluindo o armazenamento de grandes quantidades de dados de jogos e o gerenciamento de alto acesso simultâneo de usuários.
  6. Código aberto e gratuito: SQLite é de código aberto e gratuito para uso e modificação. Além disso, o SQLite também possui boa documentação e suporte da comunidade para ajudar os desenvolvedores a resolver os problemas que encontram.

2. Como instalar o SQLite no servidor ou computador local 

 Download do site oficial da página de download do SQLite

Baixe de acordo com o sistema operacional

Crie uma pasta na unidade C e descompacte os arquivos baixados nela.

 sqlite3.def serve apenas para suportar arquivos que podem ser acessados ​​​​pela janela de comando CMD do computador local

3. Como usar SQLite no Unity 

Crie uma pasta (nomeie você mesmo, o princípio é que você pode encontrá-la)

Pesquise esses dois arquivos em seu computador e copie-os para a pasta Plugins que você acabou de criar. 

  1. Mono.Data.Sqlite.dll

  2. sqlite3.dll

4. Reinicie o VS e faça referência à montagem! usando Mono.Data.Sqlite;

5. Aprenda a primeira aula deste assembly, SQLiteConnection

SQLiteConnection é uma classe do .NET Framework e é uma das principais interfaces utilizadas pelo ADO.NET para interagir com bancos de dados SQLite. Por meio desta classe, você pode executar consultas SQL, modificar dados no banco de dados, manipular transações no banco de dados e muito mais.

Se você precisar usar SQLiteConnection, primeiro você precisa garantir que seu projeto introduziu o pacote SQLite .NET correto. Você pode adicionar este pacote via NuGet. No Visual Studio, clique com o botão direito no projeto -> "Gerenciar pacotes NuGet..." -> Pesquise "System.Data.SQLite" -> "Instalar".

As principais propriedades e métodos da classe SQLiteConnection são:

  • ConnectionString: Uma string usada para definir uma conexão de banco de dados.
  • Open(): abre a conexão com o banco de dados.
  • Close(): Fecha a conexão com o banco de dados.
  • Execute (comando SqlCommand): Execute um comando SQL e retorne o número de linhas afetadas.
  • BeginTransaction(): inicia uma transação de banco de dados.
  • Commit(): confirma a transação do banco de dados.
  • Rollback(): transação de rollback do banco de dados.

Caso prático: cadastro de usuário

Cadastro de usuário e armazenamento de conta e senha em banco de dados

 Dois roteiros:

1. Obtenha a sequência de senha da conta inserida pelo usuário na interface da IU
2. Crie um link de dados SQLite! Crie uma mesa! Insira a senha da conta obtida no banco de dados!

Construção de cena:

1. Obtenha a sequência de senha da conta inserida pelo usuário na interface da IU

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. Crie um link de dados SQLite! Crie uma mesa! Insira a senha da conta obtida no banco de dados!

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 Quando terminar, o banco de dados deve ser fechado e limpo ====================

 

Este código é o método usado para fechar a conexão com o banco de dados. Especificamente, MyConnectionDB.Close()significa fechar a conexão atual com o banco de dados e liberar quaisquer recursos associados à conexão. Em vez disso MyConnectionDB = null;, defina o objeto de conexão com o banco de dados como nulo para que o coletor de lixo possa reciclá-lo no momento apropriado.

Fechar conexões com o banco de dados é importante para melhorar o desempenho do aplicativo e evitar vazamentos de recursos. Se a conexão com o banco de dados não for fechada corretamente, o pool de conexões poderá ficar muito ocupado e afetar o desempenho do aplicativo, ou os recursos do sistema poderão ser insuficientes e o aplicativo poderá enfrentar exceções.

Depois de terminar de usar a conexão com o banco de dados, você deverá fechá-la imediatamente para permitir que outros aplicativos acessem o banco de dados por meio do pool de conexões. Ao mesmo tempo, definir o objeto como nulo também ajuda o coletor de lixo a reciclar prontamente os recursos não utilizados para melhorar o desempenho e a estabilidade do aplicativo.

Resumindo, o objetivo deste código é definir o objeto de conexão como nulo após fechar a conexão com o banco de dados para que o coletor de lixo possa recuperar recursos a tempo.

efeito final:

Acho que você gosta

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