首先,我们要从unity的安装路径中复制mono.data.sqlite.dll和sqlite3.dll两个动态链接库到untiy的plugins目录下,如下图所示:

使用navicat for sqlite创建一个sqlite数据库文件,放到Resources文件夹目录中,如下图所示:

新建一个DbAccess脚步,添加以下脚步:

using UnityEngine;

using System;

using System.Collections;

using Mono.Data.Sqlite;

using System.IO;

public class DbAccess  {

private SqliteConnection dbConnection;//sql连接

private SqliteCommand dbCommand=null;//sql命令

private SqliteDataReader dbReader;//sql读取器

public DbAccess(string connectionString)

{

string appDBPath = "";

if(Application.platform == RuntimePlatform.WindowsEditor)//如果是windows编辑器中

{

appDBPath = Application.dataPath+"//"+connectionString;

}

else if(Application.platform == RuntimePlatform.Android)--如果是安卓平台

{

appDBPath = Application.persistentDataPath +"/" + connectionString;

if (!File.Exists(appDBPath))

{

WWW loader = new WWW("jar:file://" + Application.dataPath + "/" + connectionString);//把数据库复制到安卓可写路径中,注:sqlite不能在安装包中读取数据

File.WriteAllBytes(appDBPath,loader.bytes);

}

}

OpenDB("Data Source="+appDBPath);

}

private void OpenDB(string connectionString)

{

try

{

dbConnection = new SqliteConnection(connectionString);

dbConnection.Open();

Debug.Log("connect to db");

}

catch (System.Exception ex)

{

Debug.Log(ex.Message);

}

}

public void CloseSqlConnection()//关闭数据库连接

{

if (dbCommand!=null)

dbCommand.Dispose();

dbCommand = null;

if (dbReader!=null)

dbReader.Dispose();

dbReader = null;

if (dbConnection!=null)

dbConnection.Close();

dbConnection = null;

}

public SqliteDataReader ExecuteQuery(string sqlQuery)//执行查询

{

dbCommand = dbConnection.CreateCommand();

dbCommand.CommandText = sqlQuery;

dbReader = dbCommand.ExecuteReader();

return dbReader;

}

public SqliteDataReader ReadFullTable(string tableName)//读取整个表

{

string query = "SELECT * FROM " + tableName+";";

return ExecuteQuery(query);

}

public SqliteDataReader InsertInto(string tableName,string[] values)//在表中插入数据

{

string query = "INSERT INTO " + tableName + " VALUES('" + values[0];

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

{

query += "','" + values[i];

}

query += "')";

return ExecuteQuery(query);

}

public SqliteDataReader UpdateInto(string tableName,string[] cols,string colsValues,string selectKey,string selectValue)//替换表中数据

{

string query = "UPDATE " + tableName + " SET " + cols[0] + " = " + colsValues[0];

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

{

query += ", " + cols[i] + " =" + colsValues[i];

}

query += " WHERE " + selectKey + " = " + selectValue + " ";

return ExecuteQuery(query);

}

public SqliteDataReader Delete(string tableName, string[] cols, string[] colsvalues)//删除表中数据

{

string query = "DELETE FROM " + tableName + " WHERE " + cols[0] + " = " + colsvalues[0];

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

{

query += " or " + cols[i] + " = " + colsvalues[i];

}

return ExecuteQuery(query);

}

public SqliteDataReader InsertIntoSpecific (string tableName, string[] cols, string[] values)//插入特定值

{

if (cols.Length != values.Length) {

throw new SqliteException ("columns.Length != values.Length");

}

string query = "INSERT INTO " + tableName + "(" + cols[0];

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

query += ", " + cols[i];

}

query += ") VALUES (" + values[0];

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

query += ", " + values[i];

}

query += ")";

return ExecuteQuery (query);

}

public SqliteDataReader DeleteContents (string tableName)//删除表

{

string query = "DELETE FROM " + tableName;

return ExecuteQuery (query);

}

public SqliteDataReader CreateTable (string name, string[] col, string[] colType)//创建表

{

if (col.Length != colType.Length) {

throw new SqliteException ("columns.Length != colType.Length");

}

string query = "CREATE TABLE " + name + " (" + col[0] + " " + colType[0];

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

query += ", " + col[i] + " " + colType[i];

}

query += ")";

return ExecuteQuery (query);

}

public SqliteDataReader SelectWhere (string tableName, string[] items, string[] col, string[] operation, string[] values)//集成所有操作后执行

{

if (col.Length != operation.Length || operation.Length != values.Length) {

throw new SqliteException ("col.Length != operation.Length != values.Length");

}

string query = "SELECT " + items[0];

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

query += ", " + items[i];

}

query += " FROM " + tableName + " WHERE " + col[0] + operation[0] + "'" + values[0] + "' ";

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

query += " AND " + col[i] + operation[i] + "'" + values[0] + "' ";

}

return ExecuteQuery (query);

}

}

使用事例:

数据库的Dialog表中有一下数据:

DbAccess db = new DbAccess("/Resources/DazzleParkour.sqlite");

using (SqliteDataReader reader = db.SelectWhere("Dialog", new string[] { "id,Name,FileName,Scale" }, new string[] { "Scale" }, new string[] { "=" }, new string[] { "1" }))//读取出Scale等于1的数据

{

while (reader.Read())// 循环遍历数据

{

int name = reader.GetInt32(reader.GetOrdinal("id"));

Debug.Log(name);

}

reader.Close();

db.CloseSqlConnection();

}

最后打印的数据如下

在打包时,注意要把playersetting里的api解析等级改为.Net 2.0

unity3d sqlite数据库的读写方法的更多相关文章

  1. 基于三层架构下的公共数据访问方法(Sqlite数据库)

    作者总结了一下,使用Winform的三层架构做窗体应用程序,在数据访问方面,有用到纯sql语句方法.参数方法.存储过程方法. 那么什么是三层架构呢? UI---存放Form窗体---(用户所关心的) ...

  2. ASP.net与SQLite数据库通过js和ashx交互(连接和操作)

    ASP.net与SQLite数据库通过js和ashx交互(连接和操作): 废话(也是思路):用的是VS2010,打算做网站前后台.由于不喜欢前台语言里加些与html和css和js的其他内容,想实现前后 ...

  3. 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密

    在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...

  4. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  5. 讨论SQLite数据库损坏与修复

      版权声明:博客将逐步迁移到 http://cwqqq.com https://blog.csdn.net/cwqcwk1/article/details/45541409 昨晚,朋友和我反馈SQL ...

  6. Sqlite 数据库出现database disk image is malformed报错的解决方法

    软件用的是Sqlite数据库,昨天还好好的,今天开机登录软件报错:database disk image is malformed 用Sqlite Expert Personal 重建索引,发现其中一 ...

  7. VS中引用第三方库的方法(配置sqlite数据库)

    我们在编写程序时,,不可避免的会使用第三方的库文件,很少使用源文件(.cpp),大部分是使用对类进行声明的头文件和封装了类的链接库(静态lib或动态dll),比如我们写程序用的iostream这个库, ...

  8. C#连接SQLite数据库方法

    --结合Enterprise Library连接,操作SQLite 企业库是我们常用的框架之一,可以从http://entlib.codeplex.com/下载Enterprise Library 5 ...

  9. 使用安卓读取sqlite数据库方法记录

    最近要实现android读取sqlite数据库文件,在这里先做一个英汉字典的例子.主要是输入英语到数据库中查询相应的汉语意思,将其答案输出.数据库采用sqlite3. 如图: 实现过程完全是按照参考文 ...

随机推荐

  1. [NOIP2008] 传球游戏

    1011. [NOIP2008] 传球游戏 http://cogs.pro/cogs/problem/problem.php?pid=1011 ★   输入文件:ballg.in   输出文件:bal ...

  2. [Xcode 实际操作]六、媒体与动画-(8)使用CATransaction Reveal制作渐显动画

    目录:[Swift]Xcode实际操作 本文将演示如何制作渐显动画. 图片的不透明度逐渐发生了变化,从而产生作渐显动画的效果. 在项目导航区,打开视图控制器的代码文件[ViewController.s ...

  3. python之格式化字符串( format )

    用法: 它通过 { } 和 : 来代替传统 % 方式 1.使用位置参数 要点:从以下例子可以看出位置参数不受顺序约束,且可以为 { }, 只要 format 里有相对应的参数值即可,参数索引从0开,传 ...

  4. MySQL (case when then else end)和常用函数用法

    case when then else end 相当于Java的if-else if-else,可以用来在select语句中将要显示的内容替换成另一个内容 更多用法:https://www.cnblo ...

  5. 洛咕11月月赛部分题解 By cellur925

    听说是你谷史上最水月赛?我不听我最菜 T1:终于结束的起点 月天歌名好评 给你一个模数 \(M\),请你求出最小的 \(n > 0\),使得\(fib(n)\) \(mod\) \(m=0\), ...

  6. Jmeter 的 vars 和 props 用法

    meter 的 JSR223 控件是 代替 BeanShell 的新一代脚本控件,支持多种脚本语言,尤其是其中的 Groovy,更是重点推荐使用的脚本语言,本文研究其中的 vars 和 props 两 ...

  7. C-晾衣服

    链接:https://ac.nowcoder.com/acm/contest/892/C 题意: 鸡尾酒从杭州回来,囤积了许多衣服,洗好之后,他发现晾衣服是一件麻烦的事. 晾衣绳的长度只有L,而鸡尾酒 ...

  8. Codeforces 190C(模拟)

    坑点 不记它难解我心头之恨-- WA1:不要读错题Orz,顺序是按它给定的.那就是个类似栈的东西,重点在于输出. 然而我输出很快就模拟对了-- WA2:数据:1 int.我日了不看数据我真的去de模拟 ...

  9. php:两个文件夹递归地比较,没有的文件自动复制过去

    仿站时,通常默认模板文件和新的模板文件大部分都是一样的,下面代码可以用于比较文件是否缺失(和默认模板做比较) 如果缺失自动复制过去~~ <?php /** * used:新模板和default模 ...

  10. 【手撸一个ORM】第五步、Expression(表达式目录树)转换为Where子句

    说明 在SQL中,查询.修改比较常用到WHERE子句,在这里根据使用场景不同,定义了两个类,一个用于查询,一个用于修改(插入)操作.原因是: 查询操作支持一级导航属性查询,如student.Schoo ...