今天我给大家分享一下关于unity 本地数据库的问题,因为以前在开发中一直使用IOS源生的数据库,通过传递消息的形式在与Unity3D中进行交互。本文我在详细说说如何使用C#语言来在MAC 操作系统下创建Unity本地数据库,我是C#控哇咔咔~~~
首先你需要得到Mono.Data.Sqlite.dll 文件 与System.Data.dll文件。如果你在Mac 操作系统下使用Unity那么很悲剧,找不到这两个文件,至少我没能找到。后来我在Windows下的Unity安装路径中找到了它。为了方便大家我将这两个文件上传至网盘中,如果没有这两个文件的朋友请下载。
下载地址:http://vdisk.weibo.com/s/abG7k
首先你需要得到Mono.Data.Sqlite.dll 文件 与System.Data.dll文件。如果你在Mac 操作系统下使用Unity那么很悲剧,找不到这两个文件,至少我没能找到。后来我在Windows下的Unity安装路径中找到了它。为了方便大家我将这两个文件上传至网盘中,如果没有这两个文件的朋友请下载。
下载地址:http://vdisk.weibo.com/s/abG7k
.zip文件下载完毕后直接解压,然后将Mono.Data.Sqlite.dll 文件 与System.Data.dll文件放在Unity工程中的Assets文件夹中。如下图所示,两个文件已经放置在Project视图当中。
Ok ,我们编写C#脚本,原始文章没有Unity数据库更新与删除的方法,我在这里加上更新与删除的方法,方便大家开发时使用。因为其实Unity中更新与删除数据库也是个比较重要的功能。
注意:下面脚本不要绑定在任何游戏对象身上,大家无需把它当作脚本可以当作一个工具类来使用。
- using UnityEngine;
- using System;
- using System.Collections;
- using Mono.Data.Sqlite;
- public class DbAccess
- {
- private SqliteConnection dbConnection;
- private SqliteCommand dbCommand;
- private SqliteDataReader reader;
- public DbAccess (string connectionString)
- {
- OpenDB (connectionString);
- }
- public DbAccess ()
- {
- }
- public void OpenDB (string connectionString)
- {
- try
- {
- dbConnection = new SqliteConnection (connectionString);
- dbConnection.Open ();
- Debug.Log (\"Connected to db\");
- }
- catch(Exception e)
- {
- string temp1 = e.ToString();
- Debug.Log(temp1);
- }
- }
- public void CloseSqlConnection ()
- {
- if (dbCommand != null) {
- dbCommand.Dispose ();
- }
- dbCommand = null;
- if (reader != null) {
- reader.Dispose ();
- }
- reader = null;
- if (dbConnection != null) {
- dbConnection.Close ();
- }
- dbConnection = null;
- Debug.Log (\"Disconnected from db.\");
- }
- public SqliteDataReader ExecuteQuery (string sqlQuery)
- {
- dbCommand = dbConnection.CreateCommand ();
- dbCommand.CommandText = sqlQuery;
- reader = dbCommand.ExecuteReader ();
- return reader;
- }
- 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];
- }
- Debug.Log(query);
- 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);
- }
- }