sqlite 怎么加入unitysqlite

7791人阅读
【Unity】(101)
【SQLite】(5)
unity3d有自己对应的sqlite.dll分别需要三个文件
1.Mono.Data.Sqlite.dll
在unity安装文件“Unity\Editor\Data\MonoBleedingEdge\lib\mono”可以找到,注意mono文件夹下面 有对应版本号,可以根据自己的项目来决定选择。
2.System.Data.dll& &同上位置一样可以找到 ,不过建议使用2.0版本
3.sqlite3.dll& &就在\Unity\Editor下可以找到
除此之外,还需要把这3个文件放在你的项目的这个路径下面:\Assets\Plugins\,没有Plugins文件夹就必须创建这个文件夹,然后将这三个dll文件放在该文件夹下面。当然,如果你想能够在PC上面发布成可执行文件,还需要改动一些地方。在unity3d中的Play Setting -&Other Setting 中将Api Compatibility的等级改为.NET 2.0;那么这些操作做完了以后,如果你的代码写得没有问题,那么你就可以成功了。
好了,上类 SqliteDbHelper:
using UnityE
using System.C
//导入sqlite数据集,也就是Plugins文件夹下的那个dll文件
using Mono.Data.S
//数据集 是formwork2.0 用vs开发要自己引用框架中的System.Data
using System.D
public class SqliteDbHelper
/// &summary&
/// 声明一个连接对象
/// &/summary&
private SqliteConnection dbC
/// &summary&
/// 声明一个操作数据库命令
/// &/summary&
private SqliteCommand dbC
/// &summary&
/// 声明一个读取结果集的一个或多个结果流
/// &/summary&
private SqliteDataR
/// &summary&
/// 数据库的连接字符串,用于建立与特定数据源的连接
/// &/summary&
/// &param name=&connectionString&&数据库的连接字符串,用于建立与特定数据源的连接&/param&
public SqliteDbHelper (string connectionString)
OpenDB (connectionString);
Debug.Log(connectionString);
public void OpenDB (string connectionString)
dbConnection = new SqliteConnection (connectionString);
dbConnection.Open();
Debug.Log (&Connected to db&);
catch(Exception e)
string temp1 = e.ToString();
Debug.Log(temp1);
/// &summary&
/// 关闭连接
/// &/summary&
public void CloseSqlConnection ()
if (dbCommand != null)
dbCommand.Dispose();
dbCommand =
if (reader != null)
reader.Dispose ();
if (dbConnection != null)
dbConnection.Close ();
dbConnection =
Debug.Log (&Disconnected from db.&);
/// &summary&
/// 执行查询sqlite语句操作
/// &/summary&
/// &param name=&sqlQuery&&&/param&
/// &returns&&/returns&
public SqliteDataReader ExecuteQuery (string sqlQuery)
dbCommand = dbConnection.CreateCommand ();
mandText = sqlQ
reader = dbCommand.ExecuteReader ();
/// &summary&
/// 查询该表所有数据
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &returns&&/returns&
public SqliteDataReader ReadFullTable (string tableName)
string query = &SELECT * FROM & + tableN
return ExecuteQuery (query);
/// &summary&
/// 动态添加表字段到指定表
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&values&&字段集合&/param&
/// &returns&&/returns&
public SqliteDataReader InsertInto (string tableName, string[] values)
string query = &INSERT INTO & + tableName + & VALUES (& + values[0];
for (int i = 1; i & values.L ++i)
query += &, & +
query += &)&;
return ExecuteQuery (query);
/// &summary&
/// 动态更新表结构
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&cols&&字段集&/param&
/// &param name=&colsvalues&&对于集合值&/param&
/// &param name=&selectkey&&要查询的字段&/param&
/// &param name=&selectvalue&&要查询的字段值&/param&
/// &returns&&/returns&
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.L ++i) {
query += &, & +cols+& =&+
query += & WHERE &+selectkey+& = &+selectvalue+& &;
return ExecuteQuery (query);
/// &summary&
/// 动态删除指定表字段数据
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&cols&&字段&/param&
/// &param name=&colsvalues&&字段值&/param&
/// &returns&&/returns&
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.L ++i)
query += & or & +cols+& = &+
Debug.Log(query);
return ExecuteQuery (query);
/// &summary&
/// 动态添加数据到指定表
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&cols&&字段&/param&
/// &param name=&values&&值&/param&
/// &returns&&/returns&
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.L ++i)
query += &, & +
query += &) VALUES (& + values[0];
for (int i = 1; i & values.L ++i)
query += &, & +
query += &)&;
return ExecuteQuery (query);
/// &summary&
/// 动态删除表
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &returns&&/returns&
public SqliteDataReader DeleteContents (string tableName)
string query = &DELETE FROM & + tableN
return ExecuteQuery (query);
/// &summary&
/// 动态创建表
/// &/summary&
/// &param name=&name&&表名&/param&
/// &param name=&col&&字段&/param&
/// &param name=&colType&&类型&/param&
/// &returns&&/returns&
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.L ++i)
query += &, & + col + & & + colT
query += &)&;
Debug.Log(query);
return ExecuteQuery (query);
/// &summary&
/// 根据查询条件 动态查询数据信息
/// &/summary&
/// &param name=&tableName&&表&/param&
/// &param name=&items&&查询数据集合&/param&
/// &param name=&col&&字段&/param&
/// &param name=&operation&&操作&/param&
/// &param name=&values&&值&/param&
/// &returns&&/returns&
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.L ++i)
query += &, & +
query += & FROM & + tableName + & WHERE & + col[0] + operation[0] + &'& + values[0] + &' &;
for (int i = 1; i & col.L ++i)
query += & AND & + col + operation + &'& + values[0] + &' &;
return ExecuteQuery (query);
好了 sqlite数据操作类写好后:本来应该按照编码规范来写&&因为我本身以前做c#的所有一般使用三层架构
Modle实例化对象类 ,DAl数据处理类,IDal数据接口类,Bll业务逻辑类
但是呢,目前只为测试 因此我就不一一详细介绍代码内容了,相信会c#的人都会三层架构,呵呵
ok,言归正传,下面将贴出unity3d 使用上面sqliteDbHelper操作类
SqliteDbTest:
using UnityE
using System.C
using Mono.Data.S
using System.D
public class SqliteDbTest : MonoBehaviour {
void Start ()
db = new SqliteDbHelper(&Data Source=./sqlite.db&);
Debug.Log(db.ToString());
SqliteDbAccess db = new SqliteDbAccess(&data source=mydb1.db&);
db.CreateTable(&momo&,new string[]{&name&,&qq&,&email&,&blog&},
new string[]{&text&,&text&,&text&,&text&});
db.CloseSqlConnection();
string name = &&;
public string emls = &&;
void OnGUI()
if(GUILayout.Button(&create table&))
db.CreateTable(&mytable&,new string[]{&id&,&name&,&email&},new string[]{&int&,&varchar(20)&,&varchar(50)&});
Debug.Log(&create table ok&);
if(GUILayout.Button(&insert data&))
db.InsertInto(&mytable&,
new string[] { && + (++id), &'随风去旅行&+id+&'&,&'zhangj_live&+id+&@'&});//),&'aaa&+id+&'&,&'aaa&+id+&@'&});
Debug.Log(&insert table ok&);
if(GUILayout.Button(&search database&))
IDataReader sqReader = db.SelectWhere(&mytable&, new string[]
{&name&,&email&},new string[]{&id&},new string[]{&=&},new string[]{&2&});
while (sqReader.Read())
//Debug.Log(
name= &name=&+sqReader.GetString(sqReader.GetOrdinal(&name&));// +
emls = &email=& + sqReader.GetString(sqReader.GetOrdinal(&email&));
if (name != &&)
GUI.Label(new Rect(100, 100, 100, 100), name);
GUI.Label(new Rect(100, 200, 100, 100), emls);
GUILayout.Label(emls);
if(GUILayout.Button(&close database&))
db.CloseSqlConnection();
Debug.Log(&close table ok&);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:941765次
积分:17889
积分:17889
排名:第560名
原创:180篇
转载:10篇
评论:51条
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'这也是我第一次在Unity3d中使用Sqlite来作为配置表文件,当然了,SQLite有优秀的读写性能。
如果这个项目用着稳定的话,我会一直使用下去。
Android平台:
1,下载libsqlite3.so到assets-plugins-android下面
2,在Unity目录下找到Mono.Data.Sqlite.dll,这样便可以在Android真机上读到数据库文件
PC-Mac-iOS平台:
1,在Unity目录下找到Mono.Data.Sqlite.dll,sqlite3.dll这两个DLL文件
Mono.Data.Sqlite.dll
sqlite3.dll
必须与你当前开发的Mono版本匹配
在Android上使用Sqlite的原理是:
使用Mono.Data.Sqlite.dll,作为链接,在C#中使用SQLite的功能,
然后libsqlite3.so为sqlite3的c编译的NDK文件,在Android手机中可以读取加载
Android系统自带sqlite功能,可以通过c#直接与安卓src通信来实现数据的存储。
如果是unity64,请使用64位的sqlite3.dll,如果是32的unity,使用32位的sqlite3.dll
具体的下载地址可以到sqlite3的官方下载:
http://www.sqlite.org/download.html
阅读(...) 评论()中国领先的IT技术网站
51CTO旗下网站
Unity3D教程:与Sqlite数据库直连
本文将为您介绍Unity 3D如何与Sqlite数据进行连接的过程,操作环境为Windows 7下。
作者:jiezhixing008来源:9RIA天地会| 09:54
环境介绍:
Windows7,Unity3D,SQLite Expert Personal 3
开发语言:
JavaScript
需要的dll文件:
Mono.Data.Sqlite.dll和sqlite3.dll,dll文件位置,截图:
Unity3D教程:Unity3D与Sqlite数据库直连
一定要在这个目录下,请保持一致。
如果需要将编译好的程序发布成功的话,需要改一些地方,具体见下面的截图:
要改动的地方已用红色标记,注意这个要改成.NET2.0,这样才能够发布的。系统默认的不是.NET2.0,这一点要注意!!!
下面来看下代码吧,先看下如何创建数据库的代码,这一篇代码是不用挂到任何对象上面去的,你只用把它当成一个工具即可。如下所示:
&&&&&&&/*&
*本代码是为了在Windows环境下运行unity3d和Sqlite数据库而写的;实现的基本功能是unity3d能够与数据库之间进行基本的通信,比如说:在数据库中的数据被改变了以后,unity3d中得到的数据也会在刷新了之后跟着改变;这只是一个基本的核心的技术,为的是能够应用在大型的unity3d项目中,能够存储场景中的项目的属性,在需要改变对象的属性或增加、减少等对象时能够很方便的用得上。要实现本代码。首先需要一些dll文件,一个是Mono.Data.SQLiteClient.dll,另外一个是sqlite3.dll,这些文件都能够在unity3d的安装目录中找得到。除此之外,还需要把这两个文件放在你的项目的这个路径下面:\Assets\Plugins\,没有Plugins文件夹就必须创建这个文件夹,然后将这两个dll文件放在该文件夹写。当然,如果你想能够在PC上面发布成可执行文件,还需要改动一些地方。在unity3d中的Play Setting -&Other Setting 中将Api Compatibility的等级改为.NET 2.0;那么这些操作做完了以后,如果你的代码写得没有问题,那么你就可以成功了。
细解释代码:
*&*/&import&&&&&&&&&&System.D&&&import&&&&&&&&&&Mono.Data.S&&class&dbAccess&{&&&&&&&&&&private&var&connection&:&S&&&&&&&&&&&&&private&var&dbcon&:&IDbC&&&&&&&&&&&&&private&var&dbcmd&:&IDbC&&&&&&&&&&&&&&&&&&&&&private&var&reader&:&IDataR&&&&&&&&&&&&&function&OpenDB(p&:&String){&&&&&connection&=&&URI=file:&&+&p;&&&&&&dbcon&=&new&SqliteConnection(connection);&&&&&dbcon.Open();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&function&BasicQuery(q&:&String,&r&:&boolean){&&&&&&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&&&&&&mandText&=&q;&&&&&&&&&&reader&=&dbcmd.ExecuteReader();&&&&&&&&&&if(r){&&&&&&&&&&return&&&&&&&&&&&}&&&&&}&&&&&&&&&&&&&&&function&ReadFullTable(tableName&:&String){&&&&&&&&&var&query&:&S&&&&&&&&&query&=&&SELECT&*&FROM&&&+&tableN&&&&&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&&&&&mandText&=&&&&&&&&&&reader&=&dbcmd.ExecuteReader();&&&&&&&&&var&readArray&=&new&ArrayList();&&&&&&&&&while(reader.Read()){&&&&&&&&&&&&&var&lineArray&=&new&ArrayList();&&&&&&&&&&&&&for&(var&i&=&0;&i&&&reader.FieldC&i++)&&&&&&&&&&&&&&&&&lineArray.Add(reader.GetValue(i));&&&&&&&&&&&&&&readArray.Add(lineArray);&&&&&&&&&&}&&&&&&&&&return&readA&&&&&&}&&&&&&&&&&function&DeleteTableContents(tableName&:&String){&&&&&var&query&:&S&&&&&query&=&&DELETE&FROM&&&+&tableN&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&mandText&=&&&&&&reader&=&dbcmd.ExecuteReader();&&&&&}&&&&&function&CreateTable(name&:&String,&col&:&Array,&colType&:&Array){&&&&&&&&&&var&query&:&S&&&&&&&&&query&&=&&CREATE&TABLE&&&+&name&+&&(&&+&col[0]&+&&&&&+&colType[0];&&&&&&&&&for(var&i=1;&i&col.&i++){&&&&&&&&&&&&&query&+=&&,&&&+&col&+&&&&&+&colT&&&&&&&&&}&&&&&&&&&query&+=&&)&;&&&&&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&&&&&&mandText&=&&&&&&&&&&&reader&=&dbcmd.ExecuteReader();&&&&&&}&&&&&function&InsertIntoSingle(tableName&:&String,&colName&:&String,&value&:&String){&&&&&&&&&&var&query&:&S&&&&&&&&&query&=&&INSERT&INTO&&&+&tableName&+&&(&&+&colName&+&&)&&&+&&VALUES&(&&+&value&+&&)&;&&&&&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&&&&&&mandText&=&&&&&&&&&&&reader&=&dbcmd.ExecuteReader();&&&&&&}&&&&&function&InsertIntoSpecific(tableName&:&String,&col&:&Array,&values&:&Array){&&&&&&&&&&var&query&:&S&&&&&&&&&query&=&&INSERT&INTO&&&+&tableName&+&&(&&+&col[0];&&&&&&&&&for(var&i=1;&i&col.&i++){&&&&&&&&&&&&&query&+=&&,&&&+&&&&&&&&&&}&&&&&&&&&query&+=&&)&VALUES&(&&+&values[0];&&&&&&&&&for(i=1;&i&values.&i++){&&&&&&&&&&&&&query&+=&&,&&&+&&&&&&&&&&}&&&&&&&&&query&+=&&)&;&&&&&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&&&&&mandText&=&&&&&&&&&&reader&=&dbcmd.ExecuteReader();&&&&}&&&&&function&InsertInto(tableName&:&String,&values&:&Array){&&&&&&&&&&var&query&:&S&&&&&&&&&query&=&&INSERT&INTO&&&+&tableName&+&&&VALUES&(&&+&values[0];&&&&&&&&&for(var&i=1;&i&values.&i++){&&&&&&&&&&&&&query&+=&&,&&&+&&&&&&&&&&}&&&&&&&&&query&+=&&)&;&&&&&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&&&&&mandText&=&&&&&&&&&&reader&=&dbcmd.ExecuteReader();&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&function&SingleSelectWhere(tableName&:&String,&itemToSelect&:&String,&wCol&:&String,&wPar&:&String,&wValue&:&String){&&&&&&&&&&var&query&:&S&&&&&&&&&query&=&&SELECT&&&+&itemToSelect&+&&&FROM&&&+&tableName&+&&&WHERE&&&+&wCol&+&wPar&+&wV&&&&&&&&&&&&&&&&&dbcmd&=&dbcon.CreateCommand();&&&&&&&&&mandText&=&&&&&&&&&&reader&=&dbcmd.ExecuteReader();&&&&&&&&&var&readArray&=&new&Array();&&&&&&&&&while(reader.Read()){&&&&&&&&&&&&&readArray.Push(reader.GetString(0));&&&&&&&&&&}&&&&&&&&&return&readA&&&&&&}&&&&&function&CloseDB(){&&&&&&&&&reader.Close();&&&&&&&&&&reader&=&null;&&&&&&&&&dbcmd.Dispose();&&&&&&&&&dbcmd&=&null;&&&&&&&&&dbcon.Close();&&&&&&&&&dbcon&=&null;&&&&&}&}&
7、如何在Unity3D中使用这个数据库的代码:
&&&&&&&&&&&&&&&&public&var&DatabaseName&:&String&=&&TestDB.sqdb&;&&&&public&var&TableName&:&String&=&&TestTable&;&&var&db&:&dbA&&function&Start(){&&&&&&&&&&&&db&=&new&dbAccess();&&&&&&db.OpenDB(DatabaseName);&&&&&&&&&&&&var&tableName&=&TableN&&&&&&var&columnNames&=&new&Array(&firstName&,&lastName&);&&&&&&var&columnValues&=&new&Array(&text&,&text&);&&&&&&try&{db.CreateTable(tableName,columnNames,columnValues);&&&&&&}&&&&&&catch(e){&&&&&&&&&&&&&&&&}&&}&&&&var&firstName&:&String&=&&First&Name&;&&var&lastName&:&String&=&&Last&Name&;&&var&DatabaseEntryStringWidth&=&100;&&var&scrollPosition&:&Vector2;&&var&databaseData&:&ArrayList&=&new&ArrayList();&&&&&&function&OnGUI(){&&&&&&GUI.Box(Rect&(25,25,Screen.width&-&50,&Screen.height&-&50),&Data&);&&&&&&GUILayout.BeginArea(Rect(50,&50,&Screen.width&-&100,&Screen.height&-&100));&&&&&&&&&&&&&&&&GUILayout.BeginHorizontal();&&&&&&&&&&&&&&firstName&=&GUILayout.TextField(firstName,&GUILayout.Width&(DatabaseEntryStringWidth));&&&&&&&&&&&&&&lastName&=&GUILayout.TextField(lastName,&GUILayout.Width&(DatabaseEntryStringWidth));&&&&&&&&&&&&&&&&&&&&&&&&GUILayout.EndHorizontal();&&&&&&&&&&if&(GUILayout.Button(&Add&to&database&)){&&&&&&&&&&&&&&&&&&&&&&&&&&&&InsertRow(firstName,lastName);&&&&&&&&&&&&&&&&&&&&&&&&&&&&databaseData&=&ReadFullTable();&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&GUILayout.BeginHorizontal();&&&&&&&&&&&&&&if&(GUILayout.Button&(&Read&Database&))&&&&&&&&&&&&&&&&&&&&&&&&&&databaseData&=&ReadFullTable();&&&&&&&&&&&&&&if&(GUILayout.Button(&Clear&))&&&&&&&&&&&&&&&&&&databaseData.Clear();&&&&&&&&&&GUILayout.EndHorizontal();&&&&&&&&&&GUILayout.Label(&Database&Contents&);&&&&&&&&&&scrollPosition&=&GUILayout.BeginScrollView(scrollPosition,&GUILayout.Height(100));&&&&&&&&&&&&&&for&(var&line&:&ArrayList&in&databaseData){&&&&&&&&&&&&&&&&&&GUILayout.BeginHorizontal();&&&&&&&&&&&&&&&&&&for&(var&s&in&line){&&&&&&&&&&&&&&&&&&&&&&GUILayout.Label(s.ToString(),&GUILayout.Width(DatabaseEntryStringWidth));&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&GUILayout.EndHorizontal();&&&&&&&&&&&&&&}&&&&&&&&&&GUILayout.EndScrollView();&&&&&&&&&&if&(GUILayout.Button(&Delete&All&Data&)){&&&DeleteTableContents();&&&&&&&&&&&&&&databaseData&=&ReadFullTable();&&&&&&&&&&}&&&&&&GUILayout.EndArea();&&}&&&&function&InsertRow(firstName,&lastName){&&&&&&var&values&=&new&Array((&'&+firstName+&'&),(&'&+lastName+&'&));&&&&&&db.InsertInto(TableName,&values);&&}&&&&function&ReadFullTable(){&&&&&&return&db.ReadFullTable(TableName);&&}&&&&function&DeleteTableContents(){&&&&&&db.DeleteTableContents(TableName);&&}&
运行结果:
这是在Unity3D中运行的结果,数据的操作结果如下:
我们看见了数据的操作能够成功,经过测试,其他的Button也都能出现相对应的效果,那我们再看看这个到底有没有生成我们想要的数据库文件:
文件当中数据:经测试,我们在对数据库中的数据进行操作的时候,我们的Unity3D中的数据也会发生相应的改变了!
原文链接:/forum.php?mod=viewthread&tid=168629&fromuid=308561
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点原创热点头条头条
24H热文一周话题本月最赞
讲师:51267人学习过
讲师:108833人学习过
讲师:17572人学习过
精选博文论坛热帖下载排行
Linux出色的网络功能堪称当今操作系统中的佼佼者,无论在功能还是在支持能力上都有令人满意的表现。Linux内置的多个服务器,几乎包含了目前...
订阅51CTO邮刊using Mono.Data.SqliteC
using System.D
using UnityE
class DbAccessHelper
private IDbConnection dbC
private IDbCommand dbC
private IDataReader dbR
public DbAccessHelper(string path)
OpenDb(path);
/// &summary&
/// 打开数据库
/// &/summary&
/// &param name=&path&&路径&/param&
private void OpenDb(string path)
dbConn = new SqliteConnection(&URI=file:& + path);
dbConn.Open();
Debug.Log(&连接数据库成功!&);
/// &summary&
/// 创建表
/// &/summary&
/// &param name=&name&&表明&/param&
/// &param name=&col&&数据&/param&
/// &param name=&colType&&数据类型&/param&
/// &returns&&/returns&
public bool CreateTable(string name, string[] col, string[] colType)
string commPath = &CREATE TABLE & + name + &(& + col[0] + & & + colType[0];
for (int i = 1; i & col.L i++)
commPath += &,& + col[i] + & & + colType[i];
commPath += &)&;
ExecuteCommand(commPath);
Debug.Log(&创建表成功!&);
/// &summary&
/// 插入多条数据
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&values&&数据&/param&
/// &returns&&/returns&
public bool InsertInto(string tableName, string[] values)
string commPath = &INSERT INTO & + tableName + & VALUES (& + values[0];
for (int i = 1; i & values.L i++)
commPath += &,& + values[i];
commPath += &)&;
ExecuteCommand(commPath);
Debug.Log(&插入数据成功!&);
/// &summary&
/// 插入单条数据
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&colName&&列名&/param&
/// &param name=&value&&数据&/param&
public bool InsertIntoSingle(string tableName, string colName, string value)
string commPath = &INSERT INTO & + tableName + &(& + colName + &) & + &VALUES (& + value + &)&;
ExecuteCommand(commPath);
Debug.Log(&插入单条数据成功!&);
/// &summary&
/// 根据列插入数据
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&colnames&&列名&/param&
/// &param name=&values&&数据&/param&
/// &returns&&/returns&
public bool InsertIntoSpecific(string tableName, string[] colnames, string[] values)
string commPath = &INSERT INTO & + tableName + &(& + colnames[0];
for (int i = 1; i & colnames.L i++)
commPath += &,& + colnames[i];
commPath += &) VALUES (& + values[0];
for (int i = 1; i & values.L i++)
commPath += &,& + values[i];
ExecuteCommand(commPath);
/// &summary&
/// 更新表中数据
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&colNames&&列名&/param&
/// &param name=&colValues&&更新的数据&/param&
/// &param name=&selectKey&&主键&/param&
/// &param name=&selectValue&&主键值&/param&
public bool UpdateInto(string tableName, string[] colNames, string[] colValues, string selectKey, string selectValue)
string commPath = &UPDATE & + tableName + & SET & + colNames[0] + &=& + colValues[0];
for (int i = 1; i & colNames.L i++)
commPath += &,& + colNames[i] + &=& + colValues[i];
commPath += & WHERE & + selectKey + &=& + selectV
ExecuteCommand(commPath);
Debug.Log(&更新数据成功!&);
/// &summary&
/// 执行删除数据语句
/// &/summary&
/// &param name=&tableName&&表名&/param&
/// &param name=&colNames&&列名&/param&
/// &param name=&values&&某列对应的数据&/param&
/// &returns&&/returns&
public void Delete(string tableName, string[] colNames, string[] values)
string commPath = &DELETE FROM & + tableName + & WHERE & + colNames[0] + &=& + values[0];
for (int i = 1; i & colNames.L i++)
commPath += & OR & + colNames[i] + &=& + values[i];
ExecuteCommand(commPath);
Debug.Log(&删除成功!&);
public IDataReader SelectWhere(string tableName, string[] item, string[] colNames, string[] operations, string[] values)
string commPath = &SELECT & + item[0];
for (int i = 1; i & item.L i++)
commPath += &,& + item[i];
commPath += & FROM & + tableName + & WHERE & + colNames[0] + operations[0] + values[0];
for (int i = 1; i & colNames.L i++)
commPath += & OR & + colNames[i] + operations[i] + values[i];
return ExecuteCommand(commPath);
/// &summary&
/// 执行命令
/// &/summary&
/// &param name=&commPath&&&/param&
/// &returns&&/returns&
private IDataReader ExecuteCommand(string commPath)
dbCommand = dbConn.CreateCommand();
mandText = commP
dbReader = dbCommand.ExecuteReader();
catch (Exception e)
Debug.LogError(e);
return dbR
/// &summary&
/// 关闭数据库
/// &/summary&
public void CloseDatabase()
dbReader.Close();
dbReader =
dbCommand.Dispose();
dbCommand =
dbConn.Close();
Debug.Log(&关闭数据库!&);
上面这个类就是封装了SQLite的打开数据库、关闭数据库、增、删、改、查等相应功能,如果有其他需求可以自己增加功能
下面我们可以测试一下功能是否正常使用。
using UnityE
using System.C
using System.D
using System.IO;
public class TestSqlite : MonoBehaviour
private string dbP
private DbAccessHelper dbAccessH
private string[] name = new string[3];
private int[] age= new int[3];
private float[] exp =new float[3];
private int i = 0;
private int size = 0;
void OnGUI()
if (GUILayout.Button(&连接数据库&))
CreateDataBase();
else if (GUILayout.Button(&创建数据表&))
CreateTable();
else if (GUILayout.Button(&插入数据&))
InsertData();
else if (GUILayout.Button(&插入单条数据&))
InsertSigleData();
else if (GUILayout.Button(&根据列插入多条数据&))
InsertSpecificData();
else if (GUILayout.Button(&更新数据&))
UpdateData();
else if (GUILayout.Button(&删除数据&))
DeleteData();
else if (GUILayout.Button(&查找数据&))
FindData();
GUILayout.Label(&name: & + name[0] + & age: & + age[0] + & exp: & + exp[0]);
GUILayout.Label(&name: & + name[1] + & age: & + age[1] + & exp: & + exp[1]);
GUILayout.Label(dbPath);
GUILayout.Label(size.ToString());
/// &summary&
/// 创建数据库
/// &/summary&
void CreateDataBase()
#if UNITY_EDITOR
dbPath = Application.dataPath + &/TestDb.db&;
#elif UNITY_STANDALONE_WIN
dbPath = Application.dataPath + &/TestDb.db&;
#elif UNITY_ANDROID
dbPath = Application.persistentDataPath + &/TestDb.db&;
if (!File.Exists(dbPath))
//拷贝数据库
StartCoroutine(CopyDataBase());
#elif UNITY_IPHONE
dbPath = Application.persistentDataPath + &/TestDb.db&;
if (!File.Exists(dbPath))
//拷贝数据库
StartCoroutine(CopyDataBase());
dbAccessHelper = new DbAccessHelper(dbPath);
IEnumerator CopyDataBase()
#if UNITY_ANDROID
WWW www = new WWW(&jar:file://& + Application.streamingAssetsPath + &/TestDb.db&);
#elif UNITY_IPHONE
WWW www = new WWW(Application.streamingAssetsPath + &/TestDb.db&);
#elif UNITY_EDITOR || UNITY_STANDALONE_WIN
WWW www = new WWW(Application.dataPath + &/TestDb.db&);
size = www.
File.WriteAllBytes(dbPath, www.bytes);
void CreateTable()
//建立数据库连接
CreateDataBase();
//创建数据表
dbAccessHelper.CreateTable(&Role&, new string[] {&id&, &name&, &age&, &lv&, &exp&},
new string[] {&int&, &text&, &int&, &int&, &float&});
//关闭数据库
dbAccessHelper.CloseDatabase();
void InsertData()
CreateDataBase();
dbAccessHelper.InsertInto(&Role&, new string[] {&2&, &'张三'&, &18&, &12&, &2.2&});
dbAccessHelper.CloseDatabase();
void InsertSigleData()
CreateDataBase();
dbAccessHelper.InsertIntoSingle(&Role&, &id&, &3&);
dbAccessHelper.CloseDatabase();
void InsertSpecificData()
CreateDataBase();
dbAccessHelper.InsertIntoSpecific(&Role&, new string[] {&id&, &name&}, new string[] {&4&, &12&});
dbAccessHelper.CloseDatabase();
void UpdateData()
CreateDataBase();
dbAccessHelper.UpdateInto(&Role&, new string[] {&lv&, &exp&}, new string[] {&10&, &100&}, &id&, &1&);
dbAccessHelper.CloseDatabase();
void DeleteData()
CreateDataBase();
dbAccessHelper.Delete(&Role&, new string[] { &id&, &id& }, new string[] { &2&, &3& });
dbAccessHelper.CloseDatabase();
void FindData()
CreateDataBase();
IDataReader reader = dbAccessHelper.SelectWhere(&Role&, new string[] {&name&, &age&, &exp&}, new string[] {&id&, &name&},
new string[] {&=&, &=&}, new string[] {&1&, &'12'&});
while (reader.Read())
name[i] = reader.GetString(reader.GetOrdinal(&name&));
age[i] = reader.GetInt32(reader.GetOrdinal(&age&));
exp[i] = reader.GetFloat(reader.GetOrdinal(&exp&));
dbAccessHelper.CloseDatabase();
拷贝上述测试代码到unity中运行即可
在Unity中使用SQLite必须下载相应的SQLite库文件,如何不知道如何下载请留言我会发链接
本文已收录于以下专栏:
相关文章推荐
所需dll放到Plugins目录下
DbAccess.cs
using UnityE
using System.C
using M...
一、什么是SQLite?
SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中,以嵌入式作为它的设计目标,它占用资源非常的低,因此适合在嵌入式设备如And...
原文地址:http://blog.csdn.net/qinyuanpei/article/details/
一、什么是SQLite?
SQLite是一款轻型的数据库...
声明断代码片段:
//数据库连接池
private static SqliteConnection dbC
//数据库语句执行器
private stat...
各位朋友大家好,欢迎大家关注我的博客,我是秦元培,我是博客地址是http://blog.csdn.net/qinyuanpei。在经历了一段时间的忙碌后,博主终于有时间来研究新的东西啦,今天博客向和大...
主要的三大类 sqliteConnection sqliteCommand sqliteReader
主要的三个方法 ExecuteNoQuery  ExecuteReader ExexuteScal...
1,需要用到这几个dll文件:Mono.Data.Sqlite.dll和sqlite3.dll和Mono.Data.SQLiteClient.dll
2,将这几个dll文件放在Plugins下,必须...
首先在项目中添加两个动态链接库Mono.Data.Sqlite.dll和System.Data.dll创建数据库管理脚本,该脚本用来直接操作数据库的操作,可以看作是对数据库操作的sql语句的封装。us...
mono.data.sqlite.dll
System.data.dll
sqlite3.dll
到Assets/Plugins文件夹
【Windows电脑】
mono.data.sqlite....
本文提供一个方便简单的单例类,有需要的地方继承就可以实现单例了,当前此处是没有继承MonoBehaviour的,废话不多说,上代码:using UnityE
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 unity sqlite 加密 的文章

 

随机推荐