Unity3D使用SQLite——Android应用开发时问题的解决办法
来源:互联网 发布:bms核心算法 编辑:程序博客网 时间:2024/06/18 17:59
相信有很多同学在使用Unity3D开发Android应用的时候都会使用到SQLite本地数据库,但是也肯定会遇到种种问题,在网上一顿狂搜,说多了都是泪。下面我直接进入正题说明一下我在使用Unity时遇见的几点问题和解决办法。
一、PC端小问题
首先我是在PC端进行Unity测试SQLite的使用,按照我转发的这篇博客一步步进行的, http://blog.csdn.net/perseverancep/article/details/72898486。在这里我就遇见了第一个问题,虽然不是在开发Android应用时遇到的,但是也有收获,解决办法进入上面的博客去查看。
二、第一个异常
下面我按照上面博客的内容尝试着进行Andoird的SQLite调试,在查看LOG时,出现了下面的错误:
Unable to find sqlite3
Unity : InvalidOperationException: Database is not open
Unity : at Mono.Data.Sqlite.SqliteCommand.InitializeForReader () [0x00000] in <filename unknown>:0
Unity : at Mono.Data.Sqlite.SqliteCommand.ExecuteReader (CommandBehavior behavior) [0x00000] in <filename unknown>:0
Unity : at Mono.Data.Sqlite.SqliteCommand.ExecuteReader () [0x00000] in <filename unknown>:0
Unity : at (wrapper remoting-invoke-with-check) Mono.Data.Sqlite.SqliteCommand:ExecuteReader () Unity : at SQLiteHelper.ExecuteQuery (System.String queryString) [0x00000] in <filename unknown>:0
Unity : at SQLiteHelper.ReadFullTable (System.String tableName) [0x00000] in <filename unknown>:0
Unity : at SQLiteHelper.InsertValues (System.String tableName, System.String[] values) [0x00000] in <filename unknown>:0
Unity : at DataBaseDAL.WifiDataDAL.InsertWifiData (System.String bssid, System.String ssid, System.String password) [0x00000] in <filename unknown>:0
Unity : at WifiPanel+<ConnectingWifi>c__Iterator1.MoveNext () [0x00000] in <filename unknown>:0
Unity : at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnu于是各种查询,知道需要下载一个libsqlite.so库文件放,放到Unity工程自己建的/Assets/Plugins/Android文件夹中
三、第二个自己的问题
先贴一段代码:
public SQLiteHelper(string connectionString){try{//构造数据库连接dbConnection=new SqliteConnection(connectionString);//打开数据库dbConnection.Open();}catch(Exception e){Debug.Log(e.Message);}}public WifiDataDAL(){//创建名为sqlite4unity的数据库,存在数据库不创建直接连接Debug.Log("开始初始化");sql = new SQLiteHelper("URI=file:"+Application.persistentDataPath+"/WifiData.db");if (sql == null) {Debug.Log ("初始化失败");} else {sql.CreateTable ("wifidata2",new string[]{"bid","id","pas"},new string[]{"TEXT","TEXT","TEXT"});}}
问题说明:
我一直以为.db数据库文件是我通过SQLiteStudio创建好后放到Unity工程中的Assets文件夹就可以了。我上面的代码是连接数据库后,创建一个名字叫做wifidata2的表。然后我使用SQLiteStudio加载 WifiData.db数据库文件,并没有看到刚刚建的表,顿时心里一凉。
问题解决:
后来知道,WifiData.db文件其实并不是我放在Unity工程里的Assets文件夹的文件,执行上面的代码也没报错,但是就是没看到我创建的表格。于是就使用adb命令(Android),adb shell 进入设备的根目录,再用linux指令find -name WifiData.db,发现了这个文件。终于知道在执行上面的代码后,在Android应用相应的目录又建立了一个新的名字叫做WifiData.db的数据库文件,于是用运行cmd,pull /路径/文件名 . 把文件拉出来用SQLiteStudio打开数据库文件就看到了刚刚创建的表格。注:我也是Android新手,遇到这个问题也是捉急啊。查看的.db数据库文件根本不是同一个文件,是两个不同路径下的文件。
四、数据写入时的异常
先贴源码(遇到异常)
public void InsertWifiData(string bssid,string ssid,string password){Debug.Log ("进到数据库了");sql.InsertValues("wifidata2",new string[]{bssid,ssid,password});}WifiDataDAL.Instance.InsertWifiData(m_bssid,m_ssid,m_password);
上面的源码是向表格中插入一条数据,但是查看Log出现下面的错误:Unity
SqliteException: SQLite error
unrecognized token: "5c"
at Mono.Data.Sqlite.SQLite3.Prepare (Mono.Data.Sqlite.SqliteConnection cnn, System.String strSql, Mono.Data.Sqlite.SqliteStatement previous, UInt32 timeoutMS, System.String& strRemain) [0x00000] in <filename unknown>:0
at Mono.Data.Sqlite.SqliteCommand.BuildNextCommand () [0x00000] in <filename unknown>:0
解决办法:
更改后的源码
WifiDataDAL.Instance.InsertWifiData("'"+m_bssid+"'","'"+m_ssid+"'","'"+m_password+"'");
再每个字符串要加上单引号,我数据库的字段属性是VARCHAR。SQLite的单引号是转义字符。执行上面的代码我的数据成功插入数据库。小结:
在Unity里面使用SQLite应用到Android时记住dll文件不能少,Mono.Data、Mono.Data.Sqlite、System.Data这三个文件放到/Assets/Plugins文件夹下,并且libsqlite.so文件不能少,放到/Assets/Plugins/Android文件夹下。
libsqlite.so放到上面图中的Android文件夹中。这些文件就可以了, http://download.csdn.net/detail/perseverancep/9875217
还有注意的就是adb pull和push的使用,方便调试和查看数据库内容以及工程中自己写的测试代码了,就不多说了。
遇到问题再继续更新学习!
- Unity3D使用SQLite——Android应用开发时问题的解决办法
- Android应用开发技巧之更方便的使用Sqlite
- Android 开发应用SQLite数据库的简单使用(三)
- Unity3D+SQLite的使用
- android应用开发笔记---SQLite使用
- Unity3D——android开发中遇到的问题
- Unity3d开发——Sqlite数据库
- Android开发——SQLite数据库框架Sugar的使用
- Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题
- 【Unity】Unity3D在Android平台使用嵌入式数据库Sqlite,解决无法找到数据库文件的问题
- android开发--sqlite的使用
- Android开发更改应用图标无效的问题 最终解决办法
- Android开发:SQLite应用
- Android开发—数据库应用—使用数据库(SQLite)--查看模拟器目录
- Android开发之sqlite数据库的应用
- Android开发当中SQLite数据库的应用
- Unity3D使用Sqlite遇到的各种问题及其解决方案
- android应用sqlite遇到的问题
- FreeSWITCH源码分析之mod_xml_curl
- 方差与协方差
- 布隆过滤器--海量数据处理利器
- 学会Retrofit+OkHttp+RxAndroid三剑客的使用,让自己紧跟Android潮流的步伐
- ClassNotFoundException问题解决
- Unity3D使用SQLite——Android应用开发时问题的解决办法
- vue安装教程(自己安装过程及遇到的一些坑)
- 代码笔记(个人笔记,看懂就看,看不懂就不看)
- 抽象工厂模式(Abstract Factory)(对象创建型模式)
- 实现容器的底层技术-每天5分钟玩转 Docker 容器技术(30)
- 包管理工具
- Shell脚本中各种符号的意思
- 微信小程序开发:图片绝对定位以及数据遍历的步骤
- Maven 官网下载