unity3d sqlite3.dll在哪
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3d sqlite3.dll在哪相关的知识,希望对你有一定的参考价值。
参考技术A 1,需要用到这几个dll文件:Mono.Data.Sqlite.dll和sqlite3.dll和Mono.Data.SQLiteClient.dll2,将这几个dll文件放在Plugins下,必须放这里。
3,在Player Setting里的 OtherSettings里有个Optimization 下边的API Compatbility Level 选择.NET 2.0。
4,添加个SQLiteHelper类。这个网上有,当然也可以自己写 - -!
5,数据库要放在 StreamingAssets这个文件夹下。
5,剩下的就是操作了
随便写点代码:
[code]csharpcode:
01 using UnityEngine;
02 using System.Collections;
03 using System.Collections.Generic;
04 using System;
05 using System.Data;
06 using Mono.Data.SqliteClient;
07 using System.Text;
08 using System.IO;
09
10 public class DBHelp : MonoBehaviour
11 static string conn=string.Empty;
12 // Use this for initialization
13
14 public static string getConstr()//得到字符串
15
16
17
18 #if UNITY_EDITOR
19 conn = "URI=file:" + Application.dataPath + "/StreamingAssets/KLandNG.db";
20
21
22
23 #elif UNITY_android
24
25
26 conn ="URI=file:" + Application.persistentDataPath +"/"+"daniya.db";
27
28 #endif
29
30
31 return conn;
32
33
34 public static bool UpdateScoll()
35
36 int i = SqliteHelper.ExecuteNonQuery(getConstr(), CommandType.Text,
37 "update ItemInfo set name ='haha' where Type =1;"
38
39 );
40 return i > 0;
41
42
43
44
45
46 本回答被提问者采纳
Sqlite离开连接打开(Mono.Data.Sqlite.dll)
我正在使用这个库使用mono查询sqlite数据库:
https://www.mono-project.com/docs/database-access/providers/sqlite/
这就是我使用库的方式:
var dbLocation = "/var/log/asterisk/master.db";
var conString = $"Data Source={dbLocation}; Read Only=True; Pooling=True;";
using (var sqlite3 = new Mono.Data.Sqlite.SqliteConnection(conString)
{
try
{
sqlite3.Open();
// query database
using(var command = sqlite3.CreateCommand()){
command.CommandText = "select * from foo";
var reader = command.ExecuteReader();
// etc...
reader.Close(); // close reader
}
}
catch
{
// log error
}
}
请注意,此代码每秒执行一次。另一个进程(Asterisk)正在写入数据库,我的进程正在从数据库中读取。我不能保持连接打开,因为如果我这样做,Asterisk就无法写入该数据库;因此,每次我打算查询数据库时都必须打开和关闭连接。
这段代码很棒!我能够以只读模式查询数据库。我基于以下链接创建了连接字符串:
http://docs.go-mono.com/?link=T%3aMono.Data.Sqlite.SqliteConnection
这段代码工作得很好但是2天后我的程序崩溃了,因为sqlite.dll没有正确处理连接。 sqlite.dll正在打开连接,这是证明:
我的应用程序的进程ID是29140:
然后我运行命令lsof -a -p 29140
,它返回我这样的东西:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Main 29140 root cwd DIR 8,1 4096 46137345 /root
Main 29140 root rtd DIR 8,1 4096 2 /
Main 29140 root txt REG 8,1 3845024 12586404 /usr/bin/mono-sgen
Main ........
... etc
.... etc
Main 29140 root 74r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 75r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 76r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 77r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 78r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 79r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 80r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 81r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 82r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 83r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 84r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
Main 29140 root 85r REG 8,1 39170048 49023734 /var/log/asterisk/master.db
因为我每秒都会查询数据库,所以我希望每秒都能为/var/log/asterisk/master.db
创建一个“文件锁”。这是随机发生的!如果数据库被大量使用,我发现/var/log/asterisk/master.db
的数量有所增加。我该如何正确处理这个sqlite连接?
我尝试过的事情:
打电话给GC.Collect()
和GC.WaitForPendingFinalizers()
这个答案表明:https://stackoverflow.com/a/8513453/637142
我将连接字符串更改为:(Poling = False)
var conString = $"Data Source={dbLocation}; Read Only=True; Pooling=False;";
我也关闭了我的读者:
// using very important!
using(var command = sqlite3.CreateCommand())
{
command.CommandText = "select * from foo";
var reader = command.ExecuteReader();
// etc...
reader.Close(); // close reader! <----- this is very important for some reason
}
这已经运行了一个小时,计数没有增加。我希望这是解决方案。
以上是关于unity3d sqlite3.dll在哪的主要内容,如果未能解决你的问题,请参考以下文章
跪求好心人分享sqlite3.dll 免费版软件免费百度云资源