Unity鏈接Sqlite數(shù)據(jù)庫

一鸿秆、SQLiteManager

SQLiteManager是一個(gè)支持多國語言基于Web的SQLite數(shù)據(jù)庫管理工具牡拇。它的特點(diǎn)包括多數(shù)據(jù)庫管理口四,創(chuàng)建和連接孵运;表格,數(shù)據(jù)窃祝,索引操作掐松;視圖,觸發(fā)器粪小,和自定義函數(shù)管理大磺。數(shù)據(jù)導(dǎo)入/導(dǎo)出;數(shù)據(jù)庫結(jié)構(gòu)導(dǎo)出探膊。

安裝SQLiteManager

在SVN的目錄下 _EXAMPLE\md\170614_Unity_ Database\Tools\

SQLiteManager的使用:

打開SQLiteManager杠愧,新建一個(gè)數(shù)據(jù)庫,文件格式為*.sqlite,最終要放在Unity編輯器的StreamingAssets目錄 Unity特殊文件夾的說明

數(shù)據(jù)庫文件在各平臺的路徑

--TIP:安卓平臺把打出的包.apk 改為.zip格式逞壁,解壓出來流济,會在 asset/下找到 數(shù)據(jù)庫文件


OD5WRTDZ_2)PNNRF58S_Y0E.png

二锐锣、SQL語法:

深入研究參考網(wǎng)址

基礎(chǔ)語句(主要用到的是第10 個(gè),有些在SQLiteManager里就可以提前操作)

1绳瘟、創(chuàng)建數(shù)據(jù)庫(create)
CREATE DATABASE database-name
create table if not exist students (ID integer, name text);
2雕憔、刪除數(shù)據(jù)庫(drop)
drop database dbname
drop table teachers;
3、備份sql server (backup)
— 創(chuàng)建 備份數(shù)據(jù)的 device
USE master
EXEC sp_addumpdevice ‘disk’, ‘testBack’, ‘c:\mssql7backup\MyNwind_1.dat’
— 開始 備份
BACKUP DATABASE pubs TO testBack
4糖声、創(chuàng)建新表(create)
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據(jù)已有的表創(chuàng)建新表:
A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5斤彼、刪除新表(drop)
drop table tabname
6、增加一個(gè)列(alter...column)
Alter table tabname add column col type
注:列增加后將不能刪除蘸泻。
DB2中列加上后數(shù)據(jù)類型也不能改變琉苇,唯一能改變的是增加varchar類型的長度。
7悦施、添加主鍵(alter)
Alter table tabname add primary key(col)
刪除主鍵(alter)
Alter table tabname drop primary key(col)
8并扇、創(chuàng)建索引
create [unique] index idxname on tabname(col….)
刪除索引
drop index idxname
注:索引是不可更改的,想更改必須刪除重新建抡诞。
9穷蛹、創(chuàng)建視圖
create view viewname as select statement
刪除視圖
drop view viewname
10、幾個(gè)簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2)values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like’%value1%’ —like的語法很精妙昼汗,查資料!
排序:select @ from table1 order by field1,field2 [desc]
總數(shù):select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最辛┟А:select min(field1) as minvalue from table1

三、Unity編輯器里的準(zhǔn)備

(在demo工程里都有)
Unity編輯器Plugins下需要的庫:
Mono.Data.Sqlite.dll
sqlite3.dll
System.Data.dll
Android平臺需要 Plugins/Android/libsqlite3.so
StreamingAssets/在SQLiteManager 里創(chuàng)建的數(shù)據(jù)庫名稱.sqlite

四乔遮、封裝數(shù)據(jù)庫連接的工具DataBaseTool

例子里的DataBaseTool腳本
(1)創(chuàng)建數(shù)據(jù)庫連接扮超。
(2)打開數(shù)據(jù)庫連接
(3)創(chuàng)建Command對象并設(shè)置sql語句
(4)調(diào)用ExecuteNonQuery ExecuteReader方法,執(zhí)行sql語句并獲得結(jié)果
(5)關(guān)閉連接。

五蹋肮、使用上述工具類進(jìn)行數(shù)據(jù)操作

參見例子demo里的 DataTest腳本

using UnityEngine;
using System.Collections.Generic;
using LitJson;
using UnityEngine.UI;
using System.IO;
public class DataTest : MonoBehaviour
{
  List<Dictionary<string, object>> result;
  string database_Name;
  string sql;
  void Start()
  {
    //StreamingAssets目錄下的數(shù)據(jù)庫文件
    database_Name = "mydatabase.sqlite";
    //這個(gè)地方可以連著寫sql語句,用分號隔開出刷,這樣數(shù)據(jù)庫連接就只用走一次
    sql = "insert into Player values('qaq','1001','24');delete from Player where Name='wangwu' ;select * from Player ";
    result = DataBaseTool.GetInstance(database_Name).ExcuteAllRresult(sql);
}

六、總結(jié)

DataBaseTool進(jìn)行了簡化

核心public List<Dictionary<string, object>> ExcuteAllRresult(string sql){}
構(gòu)造方法private DataBaseTool(string databaseName){}
Android平臺得注意數(shù)據(jù)庫的路徑public string AndriodPaltformSet(string databaseName){}

一些問題

1.數(shù)據(jù)庫不要實(shí)時(shí)更新坯辩,多用于存檔
2.設(shè)計(jì)表的時(shí)候空值的問題馁龟,查找的結(jié)果不會報(bào)錯(cuò),在SQLiteManager里看到為NULL
3.其他關(guān)于中途數(shù)據(jù)庫斷開連接的問題漆魔,可以自行嘗試坷檩,這些異常都會在 SqliteException 類里拋出 參考Try...Catch...的使用

在Unity中鏈接SQLite小型數(shù)據(jù)庫有其獨(dú)特的優(yōu)缺點(diǎn),以下是一個(gè)詳細(xì)的分析:

優(yōu)點(diǎn)
輕量級:

SQLite是一個(gè)輕量級的嵌入式數(shù)據(jù)庫改抡,不需要獨(dú)立的服務(wù)器進(jìn)程矢炼,非常適合小型項(xiàng)目和單機(jī)游戲。
簡單易用:

SQLite使用簡單阿纤,易于操作句灌,使用SQL語句進(jìn)行查詢、插入、更新和刪除胰锌,這對于有SQL基礎(chǔ)的開發(fā)者非常友好骗绕。
無須配置:

不需要額外的數(shù)據(jù)庫服務(wù)器配置,減少了開發(fā)和維護(hù)的復(fù)雜度资昧。只需將數(shù)據(jù)庫文件放入項(xiàng)目中即可使用酬土。
便于數(shù)據(jù)存儲與訪問:

適合存儲游戲狀態(tài)、設(shè)置格带、用戶數(shù)據(jù)等诺凡,方便進(jìn)行數(shù)據(jù)的持久化存儲和訪問。
跨平臺:

SQLite可以在多種平臺上運(yùn)行践惑,包括Windows、macOS嘶卧、Android和iOS尔觉,因此便于跨平臺游戲開發(fā)。
事務(wù)支持:

支持ACID(原子性芥吟、一致性侦铜、隔離性、持久性)事務(wù)钟鸵,能夠保證數(shù)據(jù)的完整性和一致性钉稍。

缺點(diǎn)
性能限制:

SQLite在處理大數(shù)據(jù)量時(shí)性能有限,不適合頻繁的寫操作棺耍,尤其在高并發(fā)場景下性能較差贡未。
多用戶支持有限:

SQLite適合單用戶或少量用戶操作,不支持復(fù)雜的并發(fā)環(huán)境蒙袍,可能導(dǎo)致數(shù)據(jù)沖突俊卤。
功能有限:

相較于其他數(shù)據(jù)庫(如MySQL、PostgreSQL)害幅,SQLite的功能較為簡單消恍,不支持存儲過程、觸發(fā)器等高級特性以现。
數(shù)據(jù)安全性:

SQLite的安全機(jī)制相對簡單狠怨,不支持復(fù)雜的用戶權(quán)限管理,適合低安全需求的應(yīng)用邑遏。
不適合網(wǎng)絡(luò)應(yīng)用:

不適用于需要網(wǎng)絡(luò)訪問的實(shí)時(shí)多人游戲佣赖,因?yàn)樗且粋€(gè)嵌入式數(shù)據(jù)庫,需要在本地存儲记盒。
總結(jié)
在Unity中使用SQLite小型數(shù)據(jù)庫非常適合開發(fā)單機(jī)茵汰、輕量級或跨平臺的游戲項(xiàng)目,能夠提供便捷的數(shù)據(jù)存儲和管理能力孽鸡。然而蹂午,開發(fā)者需要注意其性能和并發(fā)限制栏豺,并在合適的場景中選擇使用。對于需要高并發(fā)和復(fù)雜數(shù)據(jù)處理的應(yīng)用豆胸,可能需要考慮其他類型的數(shù)據(jù)庫解決方案奥洼。

性能分析

在Unity項(xiàng)目中鏈接數(shù)據(jù)庫的做法可以帶來多種影響,包括性能方面晚胡。以下是一些主要的分析點(diǎn):

  1. 數(shù)據(jù)庫類型和選擇
    SQLite:適合客戶端存儲小型數(shù)據(jù)灵奖,可以脫離網(wǎng)絡(luò)獨(dú)立運(yùn)行,適合單機(jī)游戲估盘。
    在線數(shù)據(jù)庫(如MySQL或PostgreSQL):適合需要多人在線實(shí)時(shí)交互的游戲瓷患,但需要網(wǎng)絡(luò)連接。
  2. 連接開銷
    每次連接數(shù)據(jù)庫都需要時(shí)間遣妥,尤其是在線數(shù)據(jù)庫擅编。頻繁的連接、斷開會增加延遲箫踩,影響游戲體驗(yàn)爱态。
    解決方案:使用連接池技術(shù),保持固定數(shù)量的數(shù)據(jù)庫連接境钟,可以減少重復(fù)連接帶來的開銷锦担。
  3. 數(shù)據(jù)讀取與寫入
    讀取和寫入數(shù)據(jù)庫的操作比內(nèi)存操作要慢。每次查詢或更新都需要IO操作慨削,可能導(dǎo)致幀率降低或延遲增大洞渔。
    解決方案:將數(shù)據(jù)庫操作放在異步線程中進(jìn)行,避免阻塞主線程缚态。同時(shí)痘煤,考慮使用緩存機(jī)制,減少數(shù)據(jù)庫訪問頻率猿规。
  4. 數(shù)據(jù)量與復(fù)雜度
    大量復(fù)雜的查詢(如多表連接衷快、嵌套查詢等)會對CPU造成負(fù)擔(dān),并潛在引發(fā)性能下降姨俩。
    解決方案:簡化查詢邏輯蘸拔,減少數(shù)據(jù)復(fù)雜性;使用合適的索引來加快查詢速度环葵。
  5. 操作頻率
    高頻率的數(shù)據(jù)庫操作(例如每幀都查詢數(shù)據(jù)庫)會導(dǎo)致性能下降调窍。
    解決方案:僅在必要時(shí)(如狀態(tài)變化時(shí))進(jìn)行數(shù)據(jù)庫操作,避免每幀調(diào)用张遭。
  6. 數(shù)據(jù)安全與穩(wěn)定性
    需要處理數(shù)據(jù)庫的異常和錯(cuò)誤邓萨,確保數(shù)據(jù)一致性。這可能增加開發(fā)工作量,但對于性能影響相對較小缔恳。
  7. 數(shù)據(jù)備份與更新
    大數(shù)據(jù)量的備份與更新操作也會影響性能宝剖。建議在玩家不活躍的時(shí)候(如菜單界面)進(jìn)行這些操作。
    總結(jié)
    綜上所述歉甚,在Unity中使用數(shù)據(jù)庫能提高數(shù)據(jù)管理的靈活性和效果万细,但不當(dāng)?shù)氖褂梅绞綍绊懶阅堋Mㄟ^優(yōu)化連接方式纸泄、合理使用異步處理赖钞、減少數(shù)據(jù)庫訪問頻率、簡化查詢以及使用緩存聘裁,可以有效緩解性能問題雪营。在設(shè)計(jì)數(shù)據(jù)庫交互時(shí),需權(quán)衡數(shù)據(jù)需求與性能之間的關(guān)系衡便。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末献起,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砰诵,更是在濱河造成了極大的恐慌,老刑警劉巖捌显,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茁彭,死亡現(xiàn)場離奇詭異,居然都是意外死亡扶歪,警方通過查閱死者的電腦和手機(jī)理肺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來善镰,“玉大人妹萨,你說我怎么就攤上這事§牌郏” “怎么了乎完?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長品洛。 經(jīng)常有香客問我树姨,道長,這世上最難降的妖魔是什么桥状? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任帽揪,我火速辦了婚禮,結(jié)果婚禮上辅斟,老公的妹妹穿的比我還像新娘转晰。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布查邢。 她就那樣靜靜地躺著蔗崎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侠坎。 梳的紋絲不亂的頭發(fā)上蚁趁,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音实胸,去河邊找鬼他嫡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛庐完,可吹牛的內(nèi)容都是我干的钢属。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼门躯,長吁一口氣:“原來是場噩夢啊……” “哼淆党!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讶凉,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤染乌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后懂讯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荷憋,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年褐望,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勒庄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘫里,死狀恐怖实蔽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谨读,我是刑警寧澤局装,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站劳殖,受9級特大地震影響贼邓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闷尿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一塑径、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧填具,春花似錦统舀、人聲如沸匆骗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碉就。三九已至,卻和暖如春闷串,著一層夾襖步出監(jiān)牢的瞬間瓮钥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工烹吵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碉熄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓肋拔,卻偏偏與公主長得像锈津,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子凉蜂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一琼梆、基礎(chǔ) 1、創(chuàng)建數(shù)據(jù)庫(create) CREATE DATABASE database-namecreate ...
    YBshone閱讀 643評論 0 1
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫窿吩。SQL是...
    西貝巴巴閱讀 1,822評論 0 10
  • 50個(gè)常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,235評論 0 7
  • 公眾號上一次更新是10天前纫雁,而且是陽光喔的經(jīng)典課程介紹煌往。最后一次發(fā)布自己的原創(chuàng)文字是9月18號,算下來有2個(gè)月都沒...
    野草胡閱讀 176評論 0 0
  • 最近一次發(fā)覺自己似乎老了悼粮,是在飯上新idol的時(shí)候闲勺,他居然比我小。 編曲編舞rap領(lǐng)導(dǎo)各種全能的男孩子扣猫,竟成為我這...
    三離閱讀 253評論 0 0