在U3D中使用Sqlite做配置数据存取的靠谱做法

来源:互联网 发布:java和python都掌握 编辑:程序博客网 时间:2024/04/27 23:44

这几天为了做这个,在网上查了很多资料,其实都是不靠谱的,大多数人都是复制粘贴来教育别人,误导子民。。。。


在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

0 0
原创粉丝点击