这几天为了做这个,在网上查了很多资料,其实都是不靠谱的,大多数人都是复制粘贴来教育别人,误导子民。。。。
在iphone和android下都亲自调试过了,我这个比较靠谱:
怎么使用sqlite网上到处都是,现在只讲两点网上没怎概括到的坑。
一、怎么让手机能使用sqlite
二、怎么在打包时将db文件放在合适位置,然后代码里怎么加载到合适的路径。
三、怎么把策划的csv转换成sqlite db
操作方法:
在Assets目录下新建Plugins,把Mono.Data.dll、Mono.Data.sqlite.dll、System.Data.dll放到这层目录下,然后在这层目录下建立Android,再将libsqlite3.so放到Android目录下,最后再在这个Android目录下创建assets目录,然后将.db文件放于此,如果是苹果包则在Assets目录下创建StreamingAssets目录,把db放到这个下面,我试过各种路径存放和试剥离不需要的dll,都不行,必须按我这个方法搞,我搞了几天才摸索出来的啊,至于怎么把csv转换到db里去,方法如下:
D:\sqlite3>sqlite3.exe CangLong.db
sqlite> .separator ','
sqlite> .import Skill.csv Skill
加载部分的代码:
void Start ()
{
Instance = this;
if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.OSXEditor)
{
LocalDBFullPath = Application.dataPath + "/Plugins/Android/assets/" + DBTableStruct.DBName;
}
else
{
if (Application.platform == RuntimePlatform.Android)
{
LocalDBFullPath = Application.persistentDataPath + "/" + DBTableStruct.DBName;
if (!File.Exists(LocalDBFullPath))
{
WWW loadDB = new WWW("jar:file://" + Application.dataPath + "!/assets/" + DBTableStruct.DBName);
while (!loadDB.isDone) { }
File.WriteAllBytes(LocalDBFullPath,loadDB.bytes);
}
}
else
{
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
LocalDBFullPath = Application.dataPath +"/Raw/" + DBTableStruct.DBName;
if(!File.Exists(LocalDBFullPath))
{
NGUIDebug.Log("Not Exists db !!!!!!");
return;
}
}
else
{
LocalDBFullPath = "";
}
}
}
//NGUIDebug.Log (LocalDBFullPath);
LoadDbToCache(LocalDBFullPath);
}
我的环境是:unity 4.3 sqlite3 android
sqlite3下载:http://pan.baidu.com/s/1jGoRlP0
我已经打配置好的文件放在网盘,自己下载:
http://pan.baidu.com/s/1ntDN7nz