Unity中用SQLite来保存玩家数据

using UnityEngine;
using Mono.Data.Sqlite;
using System.Data;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System;


public class UserData
{
    public string username;
    public string password;
}
public class SQLiteManager : MonoBehaviour
{
    private string dbPath;
    private string connectionString;

    public static SQLiteManager instance;
    public void Awake()
    {
        if(instance == null)
        {
            instance=this;
        }
        else
        {
            Destroy(gameObject);
        }
    }

    void Start()
    {
        // 检查数据库是否存在,如果不存在则创建
        if (!CheckIfDBExists())
        {
            CreateDatabase();
            Debug.Log("创建数据库");

        }
        else
        {
            connectionString = "URI=file:" + dbPath;
            Debug.Log("找到数据库");


        }
        Debug.Log("数据库路径"+dbPath);
        // 可以在这里执行其他数据库操作
    }

    // 检查数据库文件是否存在
    bool CheckIfDBExists()
    {
        dbPath = Application.persistentDataPath + "/mydatabase.db";
        return File.Exists(dbPath);
    }

    // 创建数据库
    void CreateDatabase()
    {
        dbPath = Application.persistentDataPath + "/mydatabase.db";
        connectionString = "URI=file:" + dbPath;

        using (var conn = new SqliteConnection(connectionString))
        {
            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "CREATE TABLE IF NOT EXISTS CustomerInfo (UserID INTEGER PRIMARY KEY AUTOINCREMENT, UserName TEXT, Password TEXT)";
                cmd.ExecuteNonQuery();
                Debug.Log("创建成功");

            }

            conn.Close();
        }
    }

    public bool AddData(string username, string password)
    {
        bool success = false;

        using (var conn = new SqliteConnection(connectionString))
        {
            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "INSERT INTO CustomerInfo (UserName, Password) VALUES (@username, @password)";
                cmd.Parameters.AddWithValue("@username", username);
                cmd.Parameters.AddWithValue("@password", password);

                int rowsAffected = cmd.ExecuteNonQuery();

                // 检查受影响的行数
                if (rowsAffected > 0)
                {
                    success = true;
                    Debug.Log("Data added successfully.");
                }
                else
                {
                    Debug.Log("Failed to add data.");
                }
            }

            conn.Close();
        }

        return success;
    }
    // 查询数据
    public UserData QueryData(string username)
    {
        UserData userData = new UserData();
        using (var conn = new SqliteConnection(connectionString))
        {
            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "SELECT * FROM CustomerInfo WHERE UserName = @username";
                cmd.Parameters.AddWithValue("@username", username);

                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        int id = reader.GetInt32(0);
                        string name = reader.GetString(1);
                        string password = reader.GetString(2);

                       userData.username = name;
                       userData.password = password;
                    }
                }
            }

            conn.Close();
        }
        return userData;
    }
    // 查询用户名和密码是否匹配,匹配返回 true,否则返回 false
    public bool CheckLogin(string username, string password)
    {
        bool match = false;

        using (var conn = new SqliteConnection(connectionString))
        {
            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "SELECT COUNT(*) FROM CustomerInfo WHERE UserName = @username AND Password = @password";
                cmd.Parameters.AddWithValue("@username", username);
                cmd.Parameters.AddWithValue("@password", password);

                int count = Convert.ToInt32(cmd.ExecuteScalar());

                // 如果查询结果的 count 大于 0,则表示用户名和密码匹配
                if (count > 0)
                {
                    match = true;
                  
                }
            }

            conn.Close();
        }

        return match;
    }
    // 注册新用户,如果成功返回 true,否则返回 false
    public bool RegisterUser(string username, string password)
    {
        bool success = false;

        // 先检查用户名是否已经存在
        if (!CheckUsernameExist(username))
        {
            // 用户名不存在,可以注册
            using (var conn = new SqliteConnection(connectionString))
            {
                conn.Open();

                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "INSERT INTO CustomerInfo (UserName, Password) VALUES (@username, @password)";
                    cmd.Parameters.AddWithValue("@username", username);
                    cmd.Parameters.AddWithValue("@password", password);

                    int rowsAffected = cmd.ExecuteNonQuery();

                    // 注册成功,影响的行数大于 0
                    if (rowsAffected > 0)
                    {
                        success = true;
                        Debug.Log("Registration successful.");
                    }
                    else
                    {
                        Debug.Log("Registration failed.");
                    }
                }

                conn.Close();
            }
        }
        else
        {
            Debug.Log("Username already exists. Registration failed.");
        }

        return success;
    }

    // 检查用户名是否已经存在,存在返回 true,不存在返回 false
    private bool CheckUsernameExist(string username)
    {
        bool exist = false;

        using (var conn = new SqliteConnection(connectionString))
        {
            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "SELECT COUNT(*) FROM CustomerInfo WHERE UserName = @username";
                cmd.Parameters.AddWithValue("@username", username);

                int count = Convert.ToInt32(cmd.ExecuteScalar());

                if (count > 0)
                {
                    exist = true;
                }
            }

            conn.Close();
        }

        return exist;
    }

    // 删除数据,并返回是否成功
    public bool DeleteData(string username,string password)
    {
        bool success = false;

        using (var conn = new SqliteConnection(connectionString))
        {
            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "DELETE FROM CustomerInfo WHERE UserName = @username AND Password = @password";
                cmd.Parameters.AddWithValue("@username", username);
                cmd.Parameters.AddWithValue("@password", password);

                int rowsAffected = cmd.ExecuteNonQuery();

                // 检查受影响的行数
                if (rowsAffected > 0)
                {
                    success = true;
                    Debug.Log("Data deleted successfully.");
                }
                else
                {
                    Debug.Log("No data found with the specified username.");
                }
            }

            conn.Close();
        }

        return success;
    }
    // 修改用户密码,并返回是否成功
    public bool ChangePassword(string username, string newPassword)
    {
        bool success = false;

        using (var conn = new SqliteConnection(connectionString))
        {
            conn.Open();

            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = "UPDATE CustomerInfo SET Password = @newPassword WHERE UserName = @username";
                cmd.Parameters.AddWithValue("@newPassword", newPassword);
                cmd.Parameters.AddWithValue("@username", username);

                int rowsAffected = cmd.ExecuteNonQuery();

                // 检查受影响的行数
                if (rowsAffected > 0)
                {
                    success = true;
                    Debug.Log("Password changed successfully.");
                }
                else
                {
                    Debug.Log("No data found with the specified username.");
                }
            }

            conn.Close();
        }

        return success;
    }

}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值