简单的Unity3d下sql本地数据库账号登入注册(加入正则表达式)功能


   sql本地数据库 是在unity3d初学阶段必会的技能 在练习自我项目的时候 时常用到本地注册登入功能 这篇文章就简单的介绍下如何使用 混合正则表达式注册

按步骤来 本demo例子 用的是面向过程介绍的 所以没有封装性

1. 第一步 创建Plugins文件夹 导入sal必要插件Mono.Data.Sqlite.dll 和System.Data.dll 

2. 自我封装一个小型可以增删改查的SqlManager 提供一个单例供外部调用

3. 下面开始步骤


一、sqlManager 小型封装

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System ;

using Mono.Data.Sqlite;

public class SqliteMangeToCSharp : MonoBehaviour {

//统一存在在Application.dataPath大文件夹下

// sqlite单例

public static SqliteMangeToCSharp _instance ;

public static SqliteMangeToCSharp GetInstance()

{

if (_instance == null) {

_instance = new SqliteMangeToCSharp ();

}

return _instance ;

}

// 数据库连接类

SqliteConnection con ;

// 创建表类

public SqliteCommand command ;

// 创建的数据库名和表名、存的数据

public string DatabaseName ;

bool isOpen = false;

void Awake()

{

}

void Start()

{

// 创数据库名 和表、存储数据类型

//string path = "/Data/lzy.db";

//string tableName = "LZY(age integer primary key autoincrement,name text,score integer)";

//CreateDatabase(path,tableName);

// 增加数据

//string tableNameAndData = "LZY(name,score) values('刘籽繇,59)";

//InsertData(tableNameAndData,path);

// 查找数据

// 2.1 查找所有数据

// 2.2 根据条件查找数据

// 2.1

//string tableNameDataAll = "LZY";

//selectTaleDataAll(tableNameDataAll,path);

// 2.2

//string tableNameDataAndCondition = "USER where name="+" '"+NameField.text + "'";

//selectTableDataCondition(tableNameDataAndCondition,path);

// 删除数据

// 1.1 删除数据库

// 1.2 根据条件删除数据

// 1.1

//string dataName = "LZY" ;

//dropTableData(dataName);

// 1.2

// TableName 是表名

// //string tableNameData ="LZY where name = '刘籽繇'";

//deleteTableData(tableNameData);

// 修改数据

//string tableNmaeDataUpdate = "LZY set name = '小' where name='小龙'";

//updateTableData(tableNmaeDataUpdate);

}

#region

// 创建数据库 创建表

// path 是创建数据库所在的路径和名字 如Assess文件夹下Data文件夹下数据库名为data.db

// tableName 是创建表的名字和参数列表

public void CreateDatabase(string path,string tableName)

{

con = new SqliteConnection("Data Source="+Application.dataPath+path);

// 打开数据库

con.Open();

isOpen = true;

// 创建表

DatabaseName = "create table if not exists"+" "+tableName ;

command = new SqliteCommand(DatabaseName,con);

//执行命令

Order();

}

#endregion

#region

// 增加数据

// TableNameAndData 是表的名字和插入的具体数据 path是路径比如说 /Data/user.db

public void InsertData(string tableNameAndData,string path)

{

con = new SqliteConnection("Data Source="+Application.dataPath+path);

// 打开数据库

con.Open();

string sqlStr = "insert into"+" "+tableNameAndData;

command = new SqliteCommand(sqlStr,con);

Order();

}

#endregion

#region

// 2.2

// tableNameDataAndCondition是表明与查找的条件

// path是数据库的路径

// Example

// string UserNameOne = "USER where name="+" '"+NameField.text + "'";

// 开始查找 count =1 代表找到了一条相关的 代表已经注册 返回0代表没有注册

//int count = SqliteManage.Instance.selectTableDataCondition(UserNameOne,path);

public int selectTableDataCondition(string tableNameDataAndCondition,string path)

{

string sqlStr = "SELECT * FROM"+" "+tableNameDataAndCondition;

con = new SqliteConnection ("Data Source=" + Application.dataPath + path);

// 打开数据库 非常重要

con.Open ();

command = new SqliteCommand(sqlStr,con);

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

Order();

// 关闭数据库

CloseDatabase ();

// 根据count的返回值来判断当前账号存不存在 count等于1就代表有此账号

return count ;

}

#endregion

#region

//string UserName = "USER where name="+" '"+NameField.text+"'";

public SqliteDataReader selectTaleDataAll(string TableName,string path)

{

con = new SqliteConnection("Data Source="+Application.dataPath+path);

// 打开数据库

con.Open();

string sqlStr = "SELECT * FROM"+" "+TableName;

command = new SqliteCommand(sqlStr,con);

SqliteDataReader reader = command.ExecuteReader ();

// 在验证用户密码的时候用到

//if (name == reader.GetString (1) && psw == reader.GetString (2))

return reader;

}

#endregion

#region

// 1.1删除数据库

// DataName 是数据库名

public void DropTableData(string DataName)

{

string sqlStr= "drop database"+" "+DataName ;

command = new SqliteCommand(sqlStr,con);

Order();

}

#endregion

#region

// 修改指定的数据 比如说存了 age name 现在可以选择修改名字和年龄

// TableNameDataUpdate是表名 和要修改的数据 和新数据

public void updateTableData(string TableNameDataUpdate)

{

string sqlStr = "update"+" "+TableNameDataUpdate ;

command = new SqliteCommand(sqlStr,con);

Order();

}

#endregion

#region

// 关闭数据库操作

public void CloseDatabase()

{

if (con != null) {

con.Close ();

}

}

#endregion

#region

// 创 增 删 改 所要执行的命令

public void Order()

{

command.ExecuteNonQuery();

command.Dispose();

}

#endregion

}

二、注册界面代码 密码设置没有添加正则表达式判定 只有账号添加了


using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System.Collections.Generic ;

using System ;

using UnityEngine.UI ;

using Mono.Data.Sqlite;

public class RegistereBg : MonoBehaviour {

public static RegistereBg _instance;

public static RegistereBg getInstance()

{

if (_instance == null)

{

_instance = new RegistereBg ();

}

return _instance;

}

#region 验证所需属性////// 正则表达式邮箱验证规则

///public  string regularEmail = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?";   

 ////// 正则表达式手机验证规则 13是13开头 然后后面是0-9任意数字 一共除了13后面还有9位数字

///public  string regularPhone = "13[0-9]{9}";////// 正则表达式密码验证规则  要有字母与数组结合 最小8位 最大15位

///public  string regularPwd = "^[0-9A-Za-z]{6,15}$";

[Tooltip("是不是邮箱或者手机号码 密码规则对不对")]

public  bool userNameIsRegular = false;public  bool pwdIsRegular = false;

#endregion


#region 所需拿到的ui控件

public InputField nameField ;

public InputField pwdField ;

#endregion

#region

// 创建数据库的路径以及名字

public string path = "/SqlData/user.db" ;

// 创建表 表的名字 以及参数

string tableName = "USER(uid integer primary key autoincrement,name text,password text)";

#endregion

#region 注册成功要重新回到登入界面

public GameObject login_bg ;

#endregion

void Awake()

{

// 游戏运行 注册界面不显示

gameObject.SetActive(false) ;

login_bg = GameObject.FindWithTag ("login_bg");

}

// Use this for initialization

void Start ()

{

// 创建数据库

SqliteMangeToCSharp.GetInstance ().CreateDatabase (path,tableName);

}

// Update is called once per frame

void Update () {

}

#region 验证输入合不合法的回调

//先验证是不是手机 不是接着再验证是不是邮箱

public string BeginRegularPlayer(string sender,string regularPhone,string regularEmail)

{

if (System.Text.RegularExpressions.Regex.IsMatch(sender, regularPhone))

{

Debug.Log ("验证手机");

return "isPhone" ;

}

else

{

if (System.Text.RegularExpressions.Regex.IsMatch (sender, regularEmail)) {

return "isEmail";

} else

{

return "NULL";

}

}

}

//密码验证

public  bool BeginRegularPwd(string sender,string regularPwd){

if (System.Text.RegularExpressions.Regex.IsMatch (sender, regularPwd))

{

return true;

}

else

{

return false;

}

}

#endregion

#region 注册按钮的调用方法

public void RegisBtn()

{

// 1. 先判断输入的账号合不合法

// 2. 合法就判断该账号存不存在 不存在就注册

string isLegal = BeginRegularPlayer (nameField.text,regularPhone,regularEmail) ;

if (isLegal == "isPhone" || isLegal == "isEmail") {

Debug.Log ("账号输入合法 可以注册");

} else

{

Debug.Log ("不合法 重新输入 也没有必接下来的步骤了");

return;

}

// 2.

string UserNameOne = "USER where name="+" '"+nameField.text + "'";

int count = SqliteMangeToCSharp.GetInstance ().selectTableDataCondition (UserNameOne,path);

if (count > 0) {

// 已经被注册 提示出现

Debug.Log ("注册失败 已经被注册");

} else

{

SqliteMangeToCSharp.GetInstance ().InsertData (string.Format("USER(name,password) values('{0}','{1}')",nameField.text,pwdField.text),path);

Debug.Log("注册成功");

gameObject.SetActive(false) ;

// login_bg.SetActive (true);

}

}

#endregion

}

三、登入界面账号密码验证


using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI ;

using Mono.Data.Sqlite;

public class LoginBg : MonoBehaviour {

public GameObject registere_bg ;

#region

public InputField nameField;

public InputField pwdField;

////// 正则表达式邮箱验证规则

public  string regularEmail = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?";

////// 正则表达式手机验证规则 13是13开头 然后后面是0-9任意数字 一共除了13后面还有9位数字

///public  string regularPhone = "13[0-9]{9}";

// 创建数据库的路径以及名字

public string path = "/SqlData/user.db" ;

#endregion

void Awake()

{

gameObject.SetActive (false);

registere_bg = GameObject.FindWithTag ("registereBg");

}

void Start () {

}

// Update is called once per frame

void Update () {

}

// 登入界面注册按钮的回调

public void RegisBtn()

{

registere_bg.SetActive (true);

}

// 登入按钮的回调

public void LoginBtn()

{

string isLegal = RegistereBg.getInstance().BeginRegularPlayer (nameField.text,regularPhone,regularEmail) ;

if (isLegal == "isPhone" || isLegal == "isEmail") {

Debug.Log ("账号输入合法");

} else

{

Debug.Log ("不合法 重新输入 ");

return;

}

// 2.

string UserNameOne = "USER where name="+" '"+nameField.text + "'";

int count = SqliteMangeToCSharp.GetInstance ().selectTableDataCondition (UserNameOne,path);

// 账号存在 去验证密码

if (count > 0)

{

// 查找是否有这个账号 且密码是否一致

string UserName = "USER where name="+" '"+nameField.text+"'";

Debug.Log (count);

SqliteDataReader reader = SqliteMangeToCSharp.GetInstance().selectTaleDataAll (UserName,path);

Debug.Log (count);

while (reader.Read ()) {

string name = nameField.text;

string psw = pwdField.text;

if (name == reader.GetString (1) && psw == reader.GetString (2)) {

Debug.Log ("登入成功");

//reader.Close ();

} else {

Debug.Log ("密码错误");

}

}

}

else {

Debug.Log ("账号未注册");

}

}

}

你可能感兴趣的:(简单的Unity3d下sql本地数据库账号登入注册(加入正则表达式)功能)