Unity中Sqlite数据库

Unity中Sqlite数据库

#1SQLite数据库简介

++1.1、什么是SQLite

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

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

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

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


++1.2SQLite安装

++++下载地址:

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

--SQLiteManager


++1.3、创建数据库

++++New SQLite Database

 


++1.4、创建数据库表格

 


++1.5、数据预览与操作

 


++1.6、执行SQL语句

 


#2SQL语法(增删改查)

++2.1SQL INSERT INTO语句

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

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

++++语法2INSERT 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.2SQL DELETE语句

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

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

++++示例1

    --DELETE FROM Person WHERE LastName = ‘Wilson’

++++示例2

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


++2.3SQL UPDATE语句

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

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

++++示例:

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


++2.4SQL SELECT语句

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

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

++++示例:

    --SELECT LastName,FirstName FROM Persons


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




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

++4.1、准备工作

++++导入mono.data.sqlite.dllAssets文件夹

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


++4.2SQLiteConnection

++++使用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.3SQLiteCommand

++++使用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.FieldCounti++){

            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.4SQLiteDataReader

++++使用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 =0i<reader.FieldCount;  i++){

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

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

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

        }

    }

}


++执行SQL语句三种方式

++++1int ExecuteNonQuery()

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

++++2object ExecuteScalar()

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

++++3SqliteDataReader 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 tableNamestring[] row){

    OpenDataBase(); //打开数据库

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

    for(int i =1row.Lengthi++){

        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;

 


++6.2Application.dataPath

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


++6.3Application.streamingAssetsPath

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


++6.4Application.persistentDataPath

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

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

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

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



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

++7.1、发布到PC

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

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


 

++7.2、发布到Android

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

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

 

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

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

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


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

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

 

 

++++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(dbPathdbBytes.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知识点0001https://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--_--


  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Unity连接SQLite数据库,需要安装SQLiteUnity插件。以下是连接SQLite数据库文件的步骤: 1. 下载SQLiteUnity插件,例如SQLite4Unity3d或Unity-SQLite。 2. 将插件导入Unity项目,可以通过Unity的“Assets”菜单选择“Import Package”选项来导入。 3. 将SQLite数据库文件放入Unity项目的“Assets”文件夹或其子文件夹。 4. 在Unity创建一个C#脚本,用于连接SQLite数据库。以下是一个示例代码: ``` using UnityEngine; using System.Data; using Mono.Data.Sqlite; public class SQLiteTest : MonoBehaviour { private IDbConnection _connection; private IDbCommand _command; private IDataReader _reader; public string databaseName; void Start() { string connectionString = "URI=file:" + Application.dataPath + "/" + databaseName; _connection = new SqliteConnection(connectionString); _connection.Open(); Debug.Log("Database connected."); _command = _connection.CreateCommand(); _command.CommandText = "SELECT * FROM table_name"; _reader = _command.ExecuteReader(); while (_reader.Read()) { Debug.Log("ID: " + _reader.GetInt32(0) + ", Name: " + _reader.GetString(1)); } _reader.Close(); _reader = null; _command.Dispose(); _command = null; _connection.Close(); _connection = null; } } ``` 其,databaseName是SQLite数据库文件的名称,应与实际文件名相同。这个脚本将连接到SQLite数据库并执行一个查询,将结果输出到Unity的控制台。 5. 将这个脚本附加到Unity场景的一个游戏对象上,运行场景即可连接到SQLite数据库。 请注意,SQLiteUnity插件可能具有不同的API和用法,具体取决于您选择的插件。此示例代码仅供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值