Unity資料儲存Sqlite的使用

2022-09-20 10:12:12 字數 4462 閱讀 7487

之前的專案中基本都是使用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...