Unity3D连接本地SQLite进行数据的增删查改

早就在琢磨Unity3D连接SQLite这个东西,网上的相关资料很少,而且不完整,各种坑需要填。工作之余,抽出一点时间写下这篇博客,让其他童鞋少走一点弯路。

首先,就是准备相关的DLL文件,这些是必不可少的,笔者已经为你准备好了,很多其他博客上的那些DLL文件都是有问题或者是缺失的。

  https://pan.baidu.com/s/1TiUDy7Dz5tkFwT04YWbaAQ     提取码:89ft

plugins下是相关DLL和雨松写的SQLite辅助脚本,但是他的脚本存在一个坑,插入字符串的时候会报错,因为他脚本里少写了个单引号(被坑过),这里笔者已经做了修改, streamingAssets下是一个Sqlite文件,这些文件必须在这些指定的文件夹下,否则会出各种各样的问题(具体什么问题懒得描叙了,自己去试试,反正笔者是被坑了)。Test脚本中写了一些增删改查的示例。

然后就是连接的问题了,要注意,Unity3D连接SQLite在各平台下的路径是不同的,笔者自己只在Android和pc,编辑器下使用过,其他平台请参考      https://habr.com/post/181239/

下面是笔者很久以前写的,刚学Unity3D写单机游戏的时候写过的一个简陋的数据管理脚本,仅供参考。特别要注意的是,在安卓手机上每一次存取数据,都要重新拷贝一次,否则数据无法保存,所以笔者将他写在了path属性的get方法中。

​using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mono.Data.Sqlite;
using System.IO;

public class DataManager : MonoBehaviour {

    public static DataManager instance;

    /// <summary>
    /// 路径
    /// </summary>
    private string path
    {
        get
        {
            string appDBPath = "";
#if UNITY_EDITOR //编辑器下
            appDBPath = Application.streamingAssetsPath + "/HanYu.db";//通过路径找到第三方数据库
#elif UNITY_ANDROID//如果运行在Android设备中
        appDBPath =Application.persistentDataPath  + "/HanYu.db";//(手机的沙盒目录)
        if (!File.Exists(appDBPath))
        {
            WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/" + "HanYu.db");
            while (!loadDB.isDone) { }//等待下载完成
            File.WriteAllBytes(appDBPath, loadDB.bytes);//拷贝至规定的地方
        }
#elif UNITY_STANDALONE_WIN //PC
         appDBPath= Application.streamingAssetsPath + "/HanYu.db";    
#endif
            return "URI=file:" + appDBPath;
        }
    }
	// Use this for initialization
	void Awake ()
    {
        if (instance == null) instance = this;
    }

    /// <summary>
    /// 获取数据--0.等级 1.经验  2.金币
    /// </summary>
    /// <returns></returns>
    public int[] Read()
    {
        Debug.Log("读数据");
        SQLite DB = new SQLite(path);//打开数据库
        SqliteDataReader data = Reader(DB, "*");
        data.Read();//读取数据NO.3
        int[] array = new int[3];
        for (int i = 0; i < 3; i++)//数据库列数-2
            array[i] = data.GetInt32(i+2);
        DB.CloseSqlConnection();
        return array;
    }

    /// <summary>
    /// 获取玩家昵称
    /// </summary>
    /// <returns></returns>
    public string GetName()
    {
        SQLite DB = new SQLite(path);//打开数据库
        SqliteDataReader data = Reader(DB, "name");
        data.Read();//读取数据NO.3
        string str = data.GetString(0);
        DB.CloseSqlConnection();
        return str;
    }

    /// <summary>
    /// 设置玩家昵称
    /// </summary>
    /// <param name="value"></param>
    public void SetName(string value)
    {
        SQLite DB = new SQLite(path);//打开数据库
        DB.UpdateInto("User", new string[] { "name" }, new string[] { value }, "id", "2008");
        DB.CloseSqlConnection();
    }

    /// <summary>
    /// 修改数据--0.等级 1.经验  2.金币
    /// </summary>
    /// <param name="column"></param>
    /// <param name="value"></param>
    public void Write(int column,int value)
    {
        Debug.Log("写数据");
        SQLite DB = new SQLite(path);//打开数据库
        string cols = "";
        switch (column+2)
        {
            case 2:cols = "level";break;
            case 3:cols = "exp";break;
            case 4:cols = "coin";break;
            default:Debug.LogError("越界");break;
        }
        DB.UpdateInto("User", new string[] { cols }, new string[] { value.ToString() }, "id", "2008");
        DB.CloseSqlConnection();
    }

    private static SqliteDataReader Reader(SQLite DB,string key)
    {
        SqliteDataReader data = DB.SelectWhere("User", new string[] { key }, new string[] { "id" }, new string[] { "=" }, new string[] { "2008" });
        return data;
    }

}
​

另外一点要注意的是,每次使用数据库之后都要记得关闭,否则可能会导致数据库锁死。

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 安卓的SQLite数据库的增删查改操作通常需要使用SQL语句来实现。下面是一个简单的实现过程: 1. 创建数据库:使用SQLiteOpenHelper类创建数据库,实现onCreate()方法创建表。 2. 增加数据:使用SQLiteDatabase类的insert()方法插入数据。 3. 删除数据:使用SQLiteDatabase类的delete()方法删除数据。 4. 修改数据:使用SQLiteDatabase类的update()方法修改数据。 5. 查询数据:使用SQLiteDatabase类的query()方法查询数据,并使用Cursor对象读取查询结果。 这是一个简单的实现过程,具体的实现过程可能因项目不同而有所差别,但大致思路是一致的。 ### 回答2: 安卓本地SQLite数据库的增删查改操作是用于管理和操作本地SQLite数据库的一系列方法。以下是实现该过程的步骤: 1. 创建数据库:首先需要在安卓应用中创建一个SQLite数据库。可以通过继承SQLiteOpenHelper类来创建和管理数据库。在SQLiteOpenHelper的子类中可以定义数据库的名称、版本号和表结构。 2. 增加数据(Insert):使用SQLiteDatabase的insert方法可以向数据库中添加新的数据。该方法接受要插入的表名称、要插入的数据和要插入的列名称作为参数。可以通过ContentValues对象来存储要插入的数据,然后将ContentValues对象作为参数传递给insert方法。 3. 查询数据(Query):使用SQLiteDatabase的query方法可以从数据库中查询数据。该方法接受表名称、要查询的列名称、查询条件、查询参数等作为参数。可以通过Cursor对象来接收查询结果,并通过Cursor的moveToFirst等方法来遍历查询结果。 4. 更新数据(Update):使用SQLiteDatabase的update方法可以更新数据库中的数据。该方法接受表名称、更新的数据、更新条件、更新参数等作为参数。使用ContentValues对象来存储要更新的数据,并将ContentValues对象作为参数传递给update方法。 5. 删除数据(Delete):使用SQLiteDatabase的delete方法可以从数据库中删除数据。该方法接受表名称、删除条件、删除参数等作为参数。可以根据条件删除数据,也可以删除整个表中的所有数据。 以上是安卓本地SQLite数据库的增删查改操作的实现过程。通过使用SQLiteOpenHelper类和SQLiteDatabase类提供的方法,可以方便地对本地SQLite数据进行各种操作。 ### 回答3: 安卓的本地SQLite数据库操作分为增加(Insert)、删除(Delete)、查询(Select)和更新(Update)四个基本操作。 首先是增加操作,首先需要创建一个SQLiteOpenHelper类,继承自SQLiteOpenHelper,重写onCreate和onUpgrade方法,以便创建数据库和表。然后,在需要进行插入操作的地方,实例化该SQLiteOpenHelper类,并通过getWritableDataBase()方法获取一个可写的数据库对象,接着调用insert方法进行数据插入。 接下来是删除操作,通过getWritableDataBase()方法获取可写的数据库对象,然后调用delete方法进行数据删除。delete方法需要传入表名和删除条件。 然后是查询操作,同样需要获取可读的数据库对象,调用query方法进行查询。query方法需要传入表名、字段名、查询条件和排序等参数,返回一个Cursor对象。通过Cursor对象可以遍历查询结果,取得所需的数据。 最后是更新操作,同样需要获取可写的数据库对象,然后调用update方法进行数据更新。update方法需要传入表名、新数据和更新条件。 需要注意的是,数据库操作通常需要在一个事务中进行,以确保数据的完整性和一致性。在事务中的数据库操作失败时,可以进行回滚操作或者采取其他处理方式。 总结,安卓本地SQLite数据库的增删查改操作实现过程包括创建SQLiteOpenHelper类、获取可读/写的数据库对象,并分别调用对应的insert、delete、query和update方法来进行增加、删除、查询和更新操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值