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;
}
}
Unity中用SQLite来保存玩家数据
最新推荐文章于 2024-07-06 08:00:00 发布