Unity中Sqlite数据库

#1、SQLite数据库简介

++1.1、什么是SQLite

++++1、SQLite是一款轻型的数据库。

++++2、SQLite的设计目标是嵌入式的。

++++3、SQLite占用资源非常的低。

++++4、SQLite能够支持Windows/Linux/Unix等等主流的操作系统。


++1.2、SQLite安装

++++下载地址:

--http://rj.baidu.com/soft/detail/22353.html?ald

--SQLiteManager


++1.3、创建数据库

++++【New SQLite Database】

 Unity中Sqlite数据库


++1.4、创建数据库表格

 Unity中Sqlite数据库


++1.5、数据预览与操作

 Unity中Sqlite数据库


++1.6、执行SQL语句

 Unity中Sqlite数据库


#2、SQL语法(增删改查)

++2.1、SQL INSERT INTO语句

++++作用: INSERT INTO 语句用于向表格中插入新的行。

++++语法1:INSERT INTO 表名称VALUES(值1,值2,...)

++++语法2:INSERT INTO table_name(列1,列2,...) VALUES(值1,值2,...)

++++示例1:

    --INSERT INTO Persons VALUES(‘Gates’, ‘Bill’, ‘Xuanwumen 10’, ‘Beijing’)

++++示例2:

    --INSERT INTO Persons(LastName, Address) VALUES(‘Wilson’, ‘Champs-Elysees’)


++2.2、SQL DELETE语句

++++作用: DELETE语句用于删除表中的行。

++++语法: DELETE FROM Person WHERE LastName =‘Wilson’

++++示例1:

    --DELETE FROM Person WHERE LastName = ‘Wilson’

++++示例2:

    --DELETE FROM table_name(删除表格所有内容)


++2.3、SQL UPDATE语句

++++作用: Update语句用于修改表中的数据。

++++语法: UPDATE 表名称 SET 列名称=新值 WHERE 列名称=某值

++++示例:

    --UPDATE Person SET FirstName = ‘Fred’ WHERE LastName=’Wilson’


++2.4、SQL SELECT语句

++++作用: SELECT语句用于从表中选取数据。

++++语法: SELECT 列名称 FROM 表名称

++++示例:

    --SELECT LastName,FirstName FROM Persons


#3、SQLite数据库图形化界面使用

Unity中Sqlite数据库

Unity中Sqlite数据库


#4、 在Unity中使用SQLite数据库

++4.1、准备工作

++++导入mono.data.sqlite.dll到Assets文件夹

++++代码添加库: using Mono.Data.Sqlite;

Unity中Sqlite数据库

++4.2、SQLiteConnection

++++使用SQLiteConnection对象,进行数据库连接,此操作可以创建空的数据库。

++++数据连接:

//数据库连接路径

string path = “data source=” + Application.streamingAssetsPath + “/UserDatabase.sqlite”;

 

void OpenDataBase(string connectionString){

    try{

        conn = new SqliteConnection(connectionString);

        conn.Open();

    }catch(System.Exception exc){

        Debug.Log(exc);

    }

}


++4.3、SQLiteCommand

++++使用SqliteCommand数据指令对象进行数据库操作。

++++使用SqliteDataReader数据读取对象,进行数据库内容读取。

++++建表:

//建表

void CreateTable(){

    //判断数据库中是否有UserTable这个表

    SqliteCommand cmd = conn.CreateCommand();

    cmd.CommandText = “select count(*) from sqlite_master where type=’table’ and name=’UserTable’”;

    SqliteDataReader reader = cmd.ExecuteReader();

 

    //判断数据库中是否存在这张表

    bool isExsit = false;

    while(reader.Read()){

        for(inti= 0; i<reader.FieldCount; i++){

            if(reader.GetValue(i).ToString() == “1”){

                isExsit=true;

            }

        }

    }

 

    //如果表不存在则建表

    reader.Dispose();

    reader.Close();

    reader= null;

 

    if(!isExist){

        Debug.Log(“表不存在,建表”);

        cmd.CommandText= “Create Table UserTable(uname text, pwd text)”;

        cmd.ExecuteNonQuery();

    }

    cmd.Dispose();

    cmd= null

    CloseDataBase();  //数据库操作完成之后要将数据库关闭

}

 

++++插入数据:

//向UserTable表中插入数据

SqliteCommand cmd = conn.CreateCommand();

cmd.CommandText = “insert into UserTable values(‘ “+unameInput.text+“ ’,‘ “+passwordInput.text+” ’)”;

 

try{

    cmd.ExecuteNonQuery()

 

}catch(System.Exception exc){

    Debug.Log(exc);

}


++++4.4、SQLiteDataReader

++++使用SqliteDataReader数据读取对象,进行数据库内容读取。

//创建查询的sql语句

string query =  “select pwd from UserTable where uname=”+” ‘ “+uname+” ’ ”;

SqliteCommand cmd = conn.CreateCommand();

cmd.CommandText = query;

SqliteDataReader reader = cmd.ExecuteReader();  //执行查询操作

 

bool result = false;  //标记表中是否有此条数据

while(reader.Read()){

    for(int i =0; i<reader.FieldCount;  i++){

        if(reader.GetValue(i).ToString() == pwd){

            //reader.GetValue(i)返回表中某一列所对应的值

            result = true; //如果有,就修改标记值

        }

    }

}


++执行SQL语句三种方式

++++1、int ExecuteNonQuery()

--返回受影响的行数(常用于执行增删改操作)

++++2、object ExecuteScalar()

--返回查询到的第一个值(常用于只查询一个结果时)

++++3、SqliteDataReader ExecuteReader()

    --返回所有查询的结果(SqliteDataReader对象)


#5、 封装数据库管理类

++5.1、为何要封装?

++++1、方便项目管理

++++2、方便开发人员的快捷的使用

++++3、防止高度保密数据外泄


++5.2、要封装哪些方法?

++++1、连接数据库

++++2、通过Sql语句查询数据

++++3、通过表名查询全表数据

...

++++4、关闭数据库连接,释放资源


++5.3、连接数据库

public class DataBase{

    SqliteConnection conn; //数据库链接对象

 

    public DataBase(string connectionPath){

        ConnectionDB(connectionPath);

    }

 

    //连接数据库

    void ConnectionDB(string connectionPath){

        try{

            conn = new SpliteConnection(connectionPath);

            Debug.Log(“连接数据库”);

        }catch(System.Exception exp){

            Debug.Log(exp);

            throw;

        }

    }

 

    DataBase _db; //Use this for initialization

 

    void Start(){

        string path=null;

    #if UNITY_IPHONE

        path = “data source=” + Application.persistentDataPath +  “/UserData.db”;

    #elif UNITY_STANDALONE_WIN

        path = “data source=” + Application.streamingAssetsPath +  “/UserData.db”;

    #elif UNITY_ANDROID

        path =  “url=file:”  + Application.persistentDataPath +  “/UserData.db”;

    #endif

        _db = new DataBase(path);

    }

}


++5.4、通过Sql语句插入数据

//向某个表中插入数据

public void InsertDatabase(string tableName, string[] row){

    OpenDataBase(); //打开数据库

    string sql=“insert into” + tableName +“values(” + row[0];

    for(int i =1; i < row.Length; i++){

        sql += ‘’,” + row[i];

    }

    sql +=  “)”;

    cmd =conn.CreateCommand();

    cmd.CommandText = sql;

    cmd.ExecuteNonQuery();

 

    CloseDataBase();  //关闭数据库

}


++5.5、通过Sql语句查询

//通过Sql语句查询,返回查询结果

public SqliteDataReader SelectFromDataBase(string sql){

    try{

        cmd = conn.CreateCommand();

        cmd.CommandText = sql;

        reader = cmd.ExecuteReader();

        return reader;

 

    }catch(System.Exception exp){

        Debug.Log(exp);

        return null;

    }

}


++5.6、通过表名查询所有数据

//通过表名查询所有数据

public SqliteDataReader SelectFullFromDataBase(string tableName){

    OpenDataBase();

 

    try{

        string sql =  “select * from” + tableName;

        cmd.CommandText = sql;

        reader = cmd.ExecuteReader();

        return reader;

 

    }catch(System.Exception exp){

        Debug.Log(exp);

       return null;

    }

}


#6、 不同平台选择不同的存储路径

++6.1、平台-路径(数据库存储路径)

---编辑器

---PC/iOS

---Android

 

++++编辑器:

--本地路径:

  ---存储路径: Application.dataPath

  ---语法:connectionStr = “Data Source=” + Application.dataPath + “/” + databaseName;

--流路径:

  ---存储路径: Application.streamingAssetsPath

  ---语法: connectionStr = “Data Source=” + Application.streamingAssetsPath + “/” + databaseName;

--沙盒路径:

  ---存储路径: Application.persistentDataPath

  ---语法: connectionStr = “Data Source=” + Application.persistentDataPath + “/” + databaseName;

 

++++PC/iOS

--流路径:

  ---存储路径: Application.streamingAssetsPath

  ---语法: connectionStr = “Data Source” + Application.streamingAssetsPath + “/” + databaseName;

--沙盒路径:

  ---存储路径: Application.persistentDataPath

  ---语法: connectionStr = “Data Source=” + Application.persistentDataPath + “/” + databaseName;

 

++++Android

--沙盒路径:

  ---存储路径: Application.persistentDataPath

  ---语法: connectionStr = “URl=file:” + Application.persistentDataPath + “/” + databaseName;

 Unity中Sqlite数据库


++6.2、Application.dataPath

++++在直接使用Application.dataPath来读取文件进行操作,移动端是没有访问权限的。


++6.3、Application.streamingAssetsPath

++++直接使用Application.streamingAssetsPath来读取文件进行操作,此方法在pc/Mac电脑中可实现对文件实施“增删查改”等操作,但在移动端只支持读取操作。


++6.4、Application.persistentDataPath

++++使用Application.persistentDataPath来操作文件,该文件存在手机沙盒中,因为不能直接存放文件。

  --1、通过服务器直接下载保存到该位置,也可以通过Md5码对比下载更新新的资源。

  --2、没有服务器的,只有间接通过文件流的方式从本地读取并写入Application.persistentDataPath文件下,然后再通过Application.persistentDataPath来读取操作。

++++注:在Pc/Mac电脑以及Android跟Ipad、iphone都可对文件进行任意操作,另外在IOS上该目录下的东西可以被iCloud自动备份。



#7、 应用程序发布到PC和移动平台

++7.1、发布到PC端

++++1、Mac端数据库文件会封装到MacApp中。

++++2、Windows端数据库文件会放到伴随文件夹Project_Name_Data中

Unity中Sqlite数据库

 

++7.2、发布到Android端

++++发布到Android端需要添加libsqlite3.so文件,和相应的Mono.Data.Sqlite.dll、sqlite3.dll、System.Data.dll类库。

++++注意: 所有文件放到Plugins文件夹下,libsqlite3.so放在Android文件夹下。

 Unity中Sqlite数据库

++++Android发布的特殊性在于连接本地Sqlite数据库的时候,如果没有找到数据库文件,无法创建空的数据库。鉴于此,解决方案有两种:

--1、加载libsqlite.so之后,Android会恢复自动创建数据库功能。在编写代码时,可以通过判断是否有数据库文件来判断是否存在数据库文件,从而通过重新建表重新插入数据实现。但这种方案对于数据库内容较多的项目来说,增添了太多代码量,所以一般不使用这种方案。除非是表格内容较少时。

--2、同样需要上述的三个类库和libsqlite.so文件,但不需要重新建表和重新插入数据内容。当Android端安装应用程序时,需要一个“.apk”的安装文件,此文件内保存着我们从Unity开发平台导入的*.sqlite文件,所以我们可以通过www来下载该sqlite文件,从而通过IO流写入到Android本地的persistentDataPath沙盒路径。该文件保存着所有表格和数据,无需再次创建和插入,通常使用的都是这种方式,较为便捷。


++7.3、Android端连接本地数据库

++++准备: 把本地数据库放在Plugins->Android->assets中。

 Unity中Sqlite数据库

 

++++Android端连接本地数据库

#if UNITY_EDITOR  //如果运行在编辑器中

string dbPath = Application.dataPath+ “/Plugins/Android/assets/” +“User.sqlite”; //通过路径找到本地数据库

DataBase db = new DataBase(“data source=” +dbPath); //获取DataBase对象

 

#elif UNITY_ANDROID  //如果运行在Android设备中

string dbPath = Application.persistentDataPath+“/User.sqlite”;  //将本地数据库拷贝至Android可找到的地方

 

//如果已知路径没有地方放数据库,那么我们从Unity中拷贝

if(!File.Exists(dbPath)){

    WWW dbBytes = new WWW(“jar:file://” +Application.dataPath+ “!/assets/” +“User.sqlite”);  //用www先从Unity中下载到数据库

    File.WriteAllBytes(dbPath, dbBytes.bytes); //拷贝至规定的地方

    DataBase db = new DataBase(“url=file:” +dbPath);

}

#endif

 

++++注意:

--二进制文件需要放在 Plugins->Android->assets中,然后根据下面的路径就可以在Android中读取。

--string Path = “jar:file://” + Application.dataPath + “!/assets/” + “xxxx您的文件”;



#立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

++立钻哥哥推荐的拓展学习链接(Link_Url):

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685

++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752

++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879

++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034

++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693

++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882

++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013

++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068

++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198

++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281

++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403

++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273

++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162

++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559

++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902

++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267

++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183

++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175

++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141

++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122

++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979

++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945

++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913

++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838

++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687

++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641

++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811

++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461

++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012

++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071

++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/


--_--VRunSoft : lovezuanzuan--_--


相关文章:

  • 2021-12-27
  • 2021-05-19
  • 2022-12-23
  • 2021-04-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-22
  • 2021-10-26
  • 2022-02-09
  • 2022-02-09
  • 2022-02-09
相关资源
相似解决方案