unity连接sqlite数据库 *** 作

unity连接sqlite数据库 *** 作,第1张

概述原文链接:http://www.unitymanual.com/bbs/thread-198-1-1.html 最近几天在讨论游戏本地数据存储方式,考虑到跨平台性。最开始打算用xml,但是考虑到xml文件多而杂,而且后期游戏更新。也不是很方便,于是提出了采用sqlite,可是没想到的是原本信心满满的我却遭到了闭门羹,呵呵.... 原来,不是用 以前做c#  winform应用那套dll, unit

原文链接:http://www.unitymanual.com/bbs/thread-198-1-1.html

最近几天在讨论游戏本地数据存储方式,考虑到跨平台性。最开始打算用xml,但是考虑到xml文件多而杂,而且后期游戏更新。也不是很方便,于是提出了采用sqlite,可是没想到的是原本信心满满的我却遭到了闭门羹,呵呵....

原来,不是用 以前做c#winform应用那套dll, unity 3d有自己对应的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;那么这些 *** 作做完了以后,如果你的代码写得没有 问题 ,那么你就可以成功了。
好啦 ,前面准工作完成 下面就直接看测试代码吧
首先是一个 sqlite的数据库 *** 作类,该类是我改编的 网上也有很多,不过好像是Js编写,于是自己动手改编成了c#希望能对大家有用,呵呵...

好了,上类sqliteDbHelper

using UnityEngine;using System.Collections;using Mono.Data.sqlite;<span >//导入sqlite数据集,也就是Plugins文件夹下的那个dll文件</span>using System;<span >//数据集 是formwork2.0 用vs开发要自己引用框架中的System.Data</span>using System.Data;
public class sqliteDbHelper{    /// <summary>    /// 声明一个连接对象    /// </summary>    private sqliteConnection dbConnection;    /// <summary>    /// 声明一个 *** 作数据库命令    /// </summary>    private sqliteCommand dbCommand;    /// <summary>    /// 声明一个读取结果集的一个或多个结果流    /// </summary>    private sqliteDataReader reader;    /// <summary>    /// 数据库的连接字符串,用于建立与特定数据源的连接    /// </summary>    /// <param name="connectionString">数据库的连接字符串,用于建立与特定数据源的连接</param>    public sqliteDbHelper (string connectionString)    {     <span >	</span>OpenDB(connectionString);        DeBUG.Log(connectionString);    }    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);      }    }    /// <summary>    /// 关闭连接    /// </summary>    public voID ClosesqlConnection ()    {      if (dbCommand != null)      {      <span >	</span>dbCommand.dispose();      }      dbCommand = null;      if (reader != null)      {        reader.dispose ();      }      reader = null;      if (dbConnection != null)      {        dbConnection.Close ();      }      dbConnection = null;      DeBUG.Log ("disconnected from db.");    }    /// <summary>    /// 执行查询sqlite语句 *** 作    /// </summary>    /// <param name="sqlquery"></param>    /// <returns></returns>    public sqliteDataReader Executequery (string sqlquery)    {     dbCommand = dbConnection.CreateCommand ();     dbCommand.CommandText = sqlquery;     reader = dbCommand.ExecuteReader ();     return reader;    }    /// <summary>    /// 查询该表所有数据    /// </summary>    /// <param name="tablename">表名</param>    /// <returns></returns>    public sqliteDataReader ReadFulltable (string tablename)    {     string query = "SELECT * FROM " + tablename;     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.Length; ++i)     {      query += "," + values;     }     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.Length; ++i)
<span >	</span> {            query += "," +cols+" ="+ colsvalues;         }         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 []colsvalues)    {      string query = "DELETE FROM "+tablename + " WHERE " +cols[0] +" = " + colsvalues[0];      for (int i = 1; i < colsvalues.Length; ++i)      {         query += " or " +cols+" = "+ colsvalues;      }       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.Length; ++i)         {             query += "," + cols;         }         query += ") VALUES (" + values[0];         for (int i = 1; i < values.Length; ++i)         {             query += "," + values;         }         query += ")";         return Executequery (query);     }    /// <summary>    /// 动态删除表    /// </summary>    /// <param name="tablename">表名</param>    /// <returns></returns>     public sqliteDataReader DeleteContents (string tablename)     {         string query = "DELETE FROM " + tablename;         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.Length; ++i)         {             query += "," + col + " " + colType;         }         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[] 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;         }         query += " FROM " + tablename + " WHERE " + col[0] + operation[0] + "'" + values[0] + "' ";         for (int i = 1; i < col.Length; ++i)         {             query += " AND " + col + operation + "'" + values[0] + "' ";         }         return Executequery (query);     }}
好了 sqlite数据 *** 作类写好后:本来应该按照编码规范来写因为我本身以前做c#的所有一般使用三层架构
Modle实例化对象类 ,DAl数据处理类,IDal数据接口类,Bll业务逻辑类
但是呢,目前只为测试 因此我就不一一详细介绍代码内容了,相信会c#的人都会三层架构,呵呵
ok,言归正传,下面将贴出unity3d 使用上面 sqliteDbHelper *** 作类
sqliteDbTest:
using UnityEngine;using System.Collections;using System;using Mono.Data.sqlite;using System.Data;
public class sqliteDbTest : MonoBehavIoUr {  <span >	</span>sqliteDbHelper db ;<span >	</span>int ID=1;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"});  db.ClosesqlConnection();   */  }   
<span >	</span>public  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+"@163.com'"});//),"'aaa"+ID+"'","'aaa"+ID+"@sohu.com'"});   DeBUG.Log("insert table ok");  }  if(GUILayout.button("search database"))        {            IDataReader sqReader = db.SelectWhere("mytable",new string[]    {"name",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),name);        GUI.Label(new Rect(100,200,emls);        //  GUILayout.Label(emls);     }  if(GUILayout.button("close database"))  {   db.ClosesqlConnection();   DeBUG.Log("close table ok");  }}}
上面的代码很简单 ,相信稍微懂点unity3d的,都能看懂 因此就小偷懒一般 没写注释了,呵呵

由此可以看出 分别实现了
1.动态创建数据库及表结构
2.动态创加入数据

3,.查询指定字段
4.关闭数据连接

总结

以上是内存溢出为你收集整理的unity连接sqlite数据库 *** 作全部内容,希望文章能够帮你解决unity连接sqlite数据库 *** 作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存