今天我给大家分享一下关于unity 本地数据库的问题,因为以前在开发中一直使用IOS源生的数据库,通过传递消息的形式在与Unity3D中进行交互。本文我在详细说说如何使用C#语言来在MAC 操作系统下创建Unity本地数据库,我是C#控哇咔咔~~~

      首先你需要得到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中更新与删除数据库也是个比较重要的功能。

注意:下面脚本不要绑定在任何游戏对象身上,大家无需把它当作脚本可以当作一个工具类来使用。


  1. using UnityEngine;
  2.  
  3. using System;
  4. using System.Collections;
  5. using Mono.Data.Sqlite;
  6.  
  7. public class DbAccess
  8.  
  9. {
  10.  
  11.     private SqliteConnection dbConnection;
  12.  
  13.     private SqliteCommand dbCommand;
  14.  
  15.     private SqliteDataReader reader;
  16.  
  17.     public DbAccess (string connectionString)
  18.  
  19.     {
  20.  
  21.         OpenDB (connectionString);
  22.  
  23.     }
  24.     public DbAccess ()
  25.     {
  26.  
  27.     }
  28.  
  29.     public void OpenDB (string connectionString)
  30.  
  31.     {
  32.         try
  33.          {
  34.             dbConnection = new SqliteConnection (connectionString);
  35.  
  36.             dbConnection.Open ();
  37.  
  38.             Debug.Log (\"Connected to db\");
  39.          }
  40.         catch(Exception e)
  41.         {
  42.             string temp1 = e.ToString();
  43.             Debug.Log(temp1);
  44.         }
  45.  
  46.     }
  47.  
  48.     public void CloseSqlConnection ()
  49.  
  50.     {
  51.  
  52.         if (dbCommand != null) {
  53.  
  54.             dbCommand.Dispose ();
  55.  
  56.         }
  57.  
  58.         dbCommand = null;
  59.  
  60.         if (reader != null) {
  61.  
  62.             reader.Dispose ();
  63.  
  64.         }
  65.  
  66.         reader = null;
  67.  
  68.         if (dbConnection != null) {
  69.  
  70.             dbConnection.Close ();
  71.  
  72.         }
  73.  
  74.         dbConnection = null;
  75.  
  76.         Debug.Log (\"Disconnected from db.\");
  77.  
  78.     }
  79.  
  80.     public SqliteDataReader ExecuteQuery (string sqlQuery)
  81.  
  82.     {
  83.  
  84.         dbCommand = dbConnection.CreateCommand ();
  85.  
  86.         dbCommand.CommandText = sqlQuery;
  87.  
  88.         reader = dbCommand.ExecuteReader ();
  89.  
  90.         return reader;
  91.  
  92.     }
  93.  
  94.     public SqliteDataReader ReadFullTable (string tableName)
  95.  
  96.     {
  97.  
  98.         string query = \"SELECT * FROM \" + tableName;
  99.  
  100.         return ExecuteQuery (query);
  101.  
  102.     }
  103.  
  104.     public SqliteDataReader InsertInto (string tableName, string[] values)
  105.  
  106.     {
  107.  
  108.         string query = \"INSERT INTO \" + tableName + \" VALUES (\" + values[0];
  109.  
  110.         for (int i = 1; i < values.Length; ++i) {
  111.  
  112.             query += \", \" + values[i];
  113.  
  114.         }
  115.  
  116.         query += \")\";
  117.  
  118.         return ExecuteQuery (query);
  119.  
  120.     }
  121.  
  122.     public SqliteDataReader UpdateInto (string tableName, string []cols,string []colsvalues,string selectkey,string selectvalue)
  123.     {
  124.  
  125.         string query = \"UPDATE \"+tableName+\" SET \"+cols[0]+\" = \"+colsvalues[0];
  126.  
  127.         for (int i = 1; i < colsvalues.Length; ++i) {
  128.  
  129.              query += \", \" +cols[i]+\" =\"+ colsvalues[i];
  130.         }
  131.  
  132.          query += \" WHERE \"+selectkey+\" = \"+selectvalue+\" \";
  133.  
  134.         return ExecuteQuery (query);
  135.     }
  136.  
  137.     public SqliteDataReader Delete(string tableName,string []cols,string []colsvalues)
  138.     {
  139.             string query = \"DELETE FROM \"+tableName + \" WHERE \" +cols[0] +\" = \" + colsvalues[0];
  140.  
  141.             for (int i = 1; i < colsvalues.Length; ++i) {
  142.  
  143.                 query += \" or \" +cols[i]+\" = \"+ colsvalues[i];
  144.             }
  145.         Debug.Log(query);
  146.         return ExecuteQuery (query);
  147.     }
  148.  
  149.     public SqliteDataReader InsertIntoSpecific (string tableName, string[] cols, string[] values)
  150.  
  151.     {
  152.  
  153.         if (cols.Length != values.Length) {
  154.  
  155.             throw new SqliteException (\"columns.Length != values.Length\");
  156.  
  157.         }
  158.  
  159.         string query = \"INSERT INTO \" + tableName + \"(\" + cols[0];
  160.  
  161.         for (int i = 1; i < cols.Length; ++i) {
  162.  
  163.             query += \", \" + cols[i];
  164.  
  165.         }
  166.  
  167.         query += \") VALUES (\" + values[0];
  168.  
  169.         for (int i = 1; i < values.Length; ++i) {
  170.  
  171.             query += \", \" + values[i];
  172.  
  173.         }
  174.  
  175.         query += \")\";
  176.  
  177.         return ExecuteQuery (query);
  178.  
  179.     }
  180.  
  181.     public SqliteDataReader DeleteContents (string tableName)
  182.  
  183.     {
  184.  
  185.         string query = \"DELETE FROM \" + tableName;
  186.  
  187.         return ExecuteQuery (query);
  188.  
  189.     }
  190.  
  191.     public SqliteDataReader CreateTable (string name, string[] col, string[] colType)
  192.  
  193.     {
  194.  
  195.         if (col.Length != colType.Length) {
  196.  
  197.             throw new SqliteException (\"columns.Length != colType.Length\");
  198.  
  199.         }
  200.  
  201.         string query = \"CREATE TABLE \" + name + \" (\" + col[0] + \" \" + colType[0];
  202.  
  203.         for (int i = 1; i < col.Length; ++i) {
  204.  
  205.             query += \", \" + col[i] + \" \" + colType[i];
  206.  
  207.         }
  208.  
  209.         query += \")\";
  210.  
  211.         return ExecuteQuery (query);
  212.  
  213.     }
  214.  
  215.     public SqliteDataReader SelectWhere (string tableName, string[] items, string[] col, string[] operation, string[] values)
  216.  
  217.     {
  218.  
  219.         if (col.Length != operation.Length ¦¦ operation.Length != values.Length) {
  220.  
  221.             throw new SqliteException (\"col.Length != operation.Length != values.Length\");
  222.  
  223.         }
  224.  
  225.         string query = \"SELECT \" + items[0];
  226.  
  227.         for (int i = 1; i < items.Length; ++i) {
  228.  
  229.             query += \", \" + items[i];
  230.  
  231.         }
  232.  
  233.         query += \" FROM \" + tableName + \" WHERE \" + col[0] + operation[0] + \"'\" + values[0] + \"' \";
  234.  
  235.         for (int i = 1; i < col.Length; ++i) {
  236.  
  237.             query += \" AND \" + col[i] + operation[i] + \"'\" + values[0] + \"' \";
  238.  
  239.         }
  240.  
  241.         return ExecuteQuery (query);
  242.  
  243.     }
  244.  
  245. }