之前的專案中基本都是使用playerprefs來儲存資料,但是由於後期資料結構複雜的情況下,比如儲存乙個list的結構資料,通常是自己控制寫法新增逗號,分號來將資料分隔開。如果**寫錯了,整個資料就會錯位導致資料錯亂,維護起來非常麻煩。由於伺服器的資料儲存都是使用資料庫sql,因此打算在前端也使用資料庫儲存資料。
要在unity中使用sqlite需要將mono.data.sqlite.dll,system.data.dll, sqlite3.dll 三個檔案放入plugins資料夾下。
mono.data.sqlite.dll
在unity的editor安裝目錄下「 editor\data\mono\lib\mono\2.0\ mono.data.sqlite.dll」
system.data.dll
在unity的editor安裝目錄下「 editor\data\mono\lib\mono\2.0\ system.data.dll」
資料庫一般是增刪改查這幾項功能。
/// /// 資料庫連線///
private sqliteconnection sqlconnection;
/// /// 資料庫命令
///
private sqlitecommand sqlcommand;
/// /// 資料庫讀取
///
private sqlitedatareader sqldatareader;
/// /// 建立資料庫連線///
public sqldata()
catch (system.exception e)
}
/// /// 執行sql語句///
///
///
public sqlitedatareader executereader(string command)
/// /// 建立**///
///
///
public void sql_createtable(listcol, listcoltype)
stringbuilder stringbuilder = stringutil.getsharestringbuilder();
for (int i = 0; i < col.count; i++)
}executenonquery(stringbuilder.tostring());
}
/// /// 插入///
///
///
///
public void sql_insert_string(string key, string value)
/// /// 刪除///
///
///
public void sql_delete(string key)
/// /// 更新///
///
///
///
public void sql_update_string(string key, string value)
/// /// 查詢///
///
///
public bool sql_select(string key)
catch (system.exception e)
return false;
}
/// /// **是否存在///
///
///
public bool existtable(string tablename)
public string getdatapath(string databasepath)
由於資料在**中,因此我們需要使用乙個hashtable來儲存這些資料,一開始先載入資料庫,然後讀取出裡面的所有資料將其存入hashtable中,後面增刪改查的時候不僅針對hashtable進行操作,還要針對資料庫進行操作。
private hashtable datahashtable = new hashtable();
我們儲存資料的時候不一定都是string型別,同時還需要int,long,float等型別,因此需要預先設定好資料庫的列名,同時還需要乙個資料型別欄位來表明儲存的資料型別,具體如下
private enum edatatype
public void loaddata()stringbuilder stringbuilder = stringutil.getsharestringbuilder();
sqlitedatareader datareader = executereader(stringbuilder.tostring());
while (datareader.read())
}datareader.close();
}
public void setvalue_string(string key, string value)else
datahashtable[key] = value;
}
public void deletevalue(string key)sql_delete(key);
}
/// /// 關閉資料庫///
public void close()
if (sqldatareader != null)
if (sqlconnection != null)
}
using system;using system.collections.generic;
namespace sql
public class sqlmanager
return _instance;}}
private sqlplayerdata playerdatabase;
private dictionarysqldatas = new dictionary();
public void onawake()
public void ondestroy()
enumerator.dispose();
}public void setstring(esqltype esqltype, string key, string values)
}public void setint(esqltype esqltype, string key, int value)
}public void setlong(esqltype esqltype, string key, long value)
}public void setfloat(esqltype esqltype, string key, float value)
}public string getstring(esqltype esqltype, string key, string defaultvalue = "")
return defaultvalue;
}public int getint(esqltype esqltype, string key, int defaultvalue = 0)
return defaultvalue;
}public float getfloat(esqltype esqltype, string key, float defaultvalue = 0)
return defaultvalue;
}public long getlong(esqltype esqltype, string key, long defaultvalue = 0)
return defaultvalue;
}public void deletevalue(esqltype esqltype, string keys)}}
}
由於使用的時候需要呼叫的函式名太長,可以新建乙個工具類封裝一下
using unityengine;namespace sql
private void ondestroy()
// use this for initialization
void start()
}}
執行unity,發現**資料已經生成
同時通過c#,也將資料讀取了出來
具體原始碼可以通過github檢視:
Unity 資料儲存
資料data 計算機裡的一切都是data 操作乙個資料的話宣告就好了,比如 int 1 但操作一大堆資料就需要資料結構 data structure 初始設定時必須分配好array的大小 宣告時不用規定大小,故不確定大小時用list。queue是一種 first in first out 的資料結構...
android 資料儲存SQLite
sqlite是一種輕量級的關係型資料庫,它的運算速度非常的快,占用資源很少,特別適合在移動裝置上使用 建立資料庫 下面我們建立乙個名為book和category的資料庫 建立mydatabasehelper類繼承自sqliteopenhelper類 如下 public class mydatabas...
資料儲存之SQLite
sqlite這部分玩過資料庫的只要學習一下常用的函式以及用法,sql語法這塊基本都差不多了解一下基本ok。以前做c 對資料庫還是蠻自信的。一 sqlite使用準備 新增框架 引入標頭檔案 二 sqlite 例子 viewcontroller.m sqlite created by cyw on 15...