Jtro的技术分享:Unity中使用Sql数据库实现用户登录与注册

2017.10.21 用户登录功能使用十分普遍,现在要做的就是让用户输入用户名和密码,连接数据库,然后实现登录,这个版本只是一个使用本地数据库,现在我也只能做到登录的功能。注册的功能后续会了再加。-_-|| 2017.10.22 没想到这么快就把注册功能赶出来了,哈哈。。。。 直接把注册的代码放这里吧:
//用户注册确定按钮
public void ConfirmBtn()
Debug.Log (ReginsterIDText .text);
string s = "select ID from Works where ID = '" + ReginsterIDText .text + "'";
if (ContainName (ReginsterIDText .text)) {
ResginsterState.text = "用户已经存在";
} else {
ResginsterState.text = "可以注册";
Debug.Log ("没有这个人可以注册");
string[] Colvalues = {ReginsterIDText .text ,ReginsterPasswordText .text };
InsertValues ("Works",Colvalues);
Debug.Log ("用户注册确认按钮");
注册的方法:说白了就是插入数据
protected void InsertValues (string tableName,string [] ColValues)
string queryString = "INSERT INTO " + tableName + " VALUES ('" + ColValues[0];
for (int i = 1; i < ColValues.Length; i++) {
queryString += "','" + ColValues [i];
queryString += "')";
try {
command.CommandText = queryString;
command.ExecuteNonQuery ();
} catch (System.Exception ex) {
Debug.Log (ex);
}
好了,直接上工程吧,首先新建工程,名字什么的无所谓了。新建一个画布,在画布里面新建image、2个输入文本框,一个text 一个按钮。做完了之后如图所示:

新建成这样的.PNG
然后新建2个文件夹:Plugins和StreamingAssets.
Plugins文件夹里面导入Mono.Data.Sqlite文件,sqlite3文件,如果你的unity版本是5.5.0+的版本,还需要添加System.Data文件。
sqlite3文件: http://pan.baidu.com/s/1bpvsI4J
其他的两个文件都可以在Unity的安装文件夹中搜索到。
然后StreamingAssets文件夹中放的就是数据库文件了。首先数据库怎么建立呢?同样,分享一个建立数据库的软件: http://pan.baidu.com/s/1mhAtsTU 安装后打开这个软件,新建一个sql数据表。 里面包含用户名和密码。 设置好如图所示:

数据库表.PNG
保存你建立的数据库,回到unity中。
新建一个脚本,名为“denglu”这里把源码贴出,方便大家粘贴测试:
using UnityEngine;
using System.Collections;
using Mono.Data.Sqlite;
using UnityEngine.UI;
public class denglu : MonoBehaviour {
//数据库连接对象,通过该对象与数据库文件所在的路径
//进行连接,进而打开数据库文件
SqliteConnection con;
//数据库文件所在的路径
string path;
//数据库命令
SqliteCommand command;
SqliteDataReader reader;
//以下是登录练习的成员数据
public InputField input_name;
public InputField input_pwd;
public Text show;
new string name;
string pwd;
object obj;
void Start()
//要连接的数据库文件路径
/* path = "Data Source = " + Application.streamingAssetsPath
+ "/shunity.sqlite";*/
path = "Data Source = " + Application.streamingAssetsPath
+ "/User.sqlite";
//通过路径创建出连接对象
con = new SqliteConnection(path);
//打开数据库文件
con.Open();
command = con.CreateCommand();
//Test();
void Test()
#region 第一种执行方法,用在增/删/改
//数据库语句
// command.CommandText = "insert into hero values('张三',10,20,1)";
//该方法用在增/删/改语句
// int count = command.ExecuteNonQuery();
#endregion
#region 第二种执行方法,该方法用在查询结果只有一个的情况
// command.CommandText = "select *from hero";
// object obj = command.ExecuteScalar();
// Debug.Log(obj);
#endregion
#region 第三种方法
command.CommandText = "select *from hero";
reader = command.ExecuteReader();
//如果读取了下一行,返回值为true,否则为false
while (reader.Read())
//把每一行的每一列读取出来
for (int i = 0; i < reader.FieldCount; i++)
Debug.Log(reader.GetName(i));
//print(reader.GetValue(i).ToString() + " ");
print("\n");
#endregion
public void OnLoginClick()
if (ContainName() == false)
show.text = "你输入的名字不正确";
else if (CorrectPwd() == false)
show.text = "你输入的密码不正确";
show.text = "登录成功";
bool ContainName()
name = input_name.text;
command.CommandText = "select pwd from usertable where uname = '" + name + "'";
obj = command.ExecuteScalar();
if (obj != null)
return true;
return false;
bool CorrectPwd()
pwd = input_pwd.text;
if (ContainName())
if (pwd == obj.ToString())
return true;