簡單的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 ("賬號未注冊");

}

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容