简单的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 ("账号未注册");

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容