美文网首页
简单的Unity3d下sql本地数据库账号登入注册(加入正则表达

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

作者: Unity与iOS的灵魂小白 | 来源:发表于2017-05-31 11:11 被阅读238次

       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本地数据库账号登入注册(加入正则表达

          本文链接:https://www.haomeiwen.com/subject/wlxlyttx.html