Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)

http://www.xuanyusong.com/archives/831


http://www.xuanyusong.com/archives/1454

如果大家对Unity中如何使用数据库还不是很了解那么请看我之前的这篇文章。Unity3D研究院之使用C#语言建立本地数据库(二十三)本篇文章我们讨论如何在Unity中打开一个第三方数据库配合Android与编辑器进行同步开发。如下图所示,这个是我目前工程的结构,为了方便调试MOMO使用预定义标签将编辑器与Android平台区分开,方便编辑器与Android平台同时调试。

下图如果看的不清楚,点击图片可查看大图。 不仅在Unity编辑器中可以显示数据库读取的内容,直接编译在真机中也可以显示数据库读取的内容。

 

按照上图所示我们把第三方数据库放在Plugins->Android->assets中,切记必须放在这里,否无无效,然后是代码。这个第三方数据库是MOMO以前做测试一个号码归属地的时候制作的。所以数据库的内容还是比较大的,蛤蛤。

DbAccess.cs

001 using UnityEngine;
002  
003 using System;
004 using System.Collections;
005 using Mono.Data.Sqlite;
006  
007 public class DbAccess
008  
009 {
010  
011     private SqliteConnection dbConnection;
012  
013     private SqliteCommand dbCommand;
014  
015     private SqliteDataReader reader;
016  
017     public DbAccess (string connectionString)
018  
019     {
020  
021         OpenDB (connectionString);
022  
023     }
024     public DbAccess ()
025     {
026  
027     }
028  
029     public void OpenDB (string connectionString)
030  
031     {
032         try
033          {
034             dbConnection = new SqliteConnection (connectionString);
035  
036             dbConnection.Open ();
037  
038             Debug.Log ("Connected to db");
039          }
040         catch(Exception e)
041         {
042             string temp1 = e.ToString();
043             Debug.Log(temp1);
044         }
045  
046     }
047  
048     public void CloseSqlConnection ()
049  
050     {
051  
052         if (dbCommand != null) {
053  
054             dbCommand.Dispose ();
055  
056         }
057  
058         dbCommand = null;
059  
060         if (reader != null) {
061  
062             reader.Dispose ();
063  
064         }
065  
066         reader = null;
067  
068         if (dbConnection != null) {
069  
070             dbConnection.Close ();
071  
072         }
073  
074         dbConnection = null;
075  
076         Debug.Log ("Disconnected from db.");
077  
078     }
079  
080     public SqliteDataReader ExecuteQuery (string sqlQuery)
081  
082     {
083  
084         dbCommand = dbConnection.CreateCommand ();
085  
086         dbCommand.CommandText = sqlQuery;
087  
088         reader = dbCommand.ExecuteReader ();
089  
090         return reader;
091  
092     }
093  
094     public SqliteDataReader ReadFullTable (string tableName)
095  
096     {
097  
098         string query = "SELECT * FROM " + tableName;
099  
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  

你可能感兴趣的:(Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二))