ddid 发表于 2009-8-15 18:29:32

解决了一个困扰我3个月的问题,发贴纪念一下!

三个月以前就知道MUSHclient4.40提供了SQLite的API,MUSH有了SQLite的支持会更强大,但实际使用中却发现,SQLITE内部数据的存储是UTF-8的,而MUD里抓出来的文字都是GB2312的,实际使用SQL语句查询的时候(尤其是模糊查询)根本不会有正确的结果,郁闷了好久(最后改回了ACCESS),今天终于找到了解决的办法!

luaiconv

根据GAMMON的贴子以及前段时间duno关于dll编译的帮助,改写了luaiconv.c,重新编译成.dll文件,MUSH已经可以正常调用了,调用的例子如下:


function test_iconv()

assert (package.loadlib ("luaiconv.dll", "luaopen_iconv")) ()

local cd = iconv.open("UTF-8", "GB2312") -- set the codeset's convertion is from GB2312 to UTF-8.

local text = "中国"

local outstr, err = cd:iconv(text) -- call iconv() method to convert the text's codeset.

if err == iconv.ERROR_INCOMPLETE then
    print("ERROR: Incomplete input.")
elseif err == iconv.ERROR_INVALID then
    print("ERROR: Invalid input.")
elseif err == iconv.ERROR_NO_MEMORY then
    print("ERROR: Failed to allocate memory.")
elseif err == iconv.ERROR_UNKNOWN then
    print("ERROR: There was an unknown error.")
end -- if;

print(outstr)
print(err)

end -- test_iconv()


下面就要开始我的SQLITE之旅了……hz7

maper 发表于 2009-8-15 19:06:24

“MUSH有了SQLite的支持会更强大”
怎么个强大法?
和ACCESS相比有什么显著优势?

netants 发表于 2009-8-15 19:27:18

SQLite 是什么,头一次听说

lhdc 发表于 2009-8-15 19:35:33

为什么呢?

netants 发表于 2009-8-15 19:52:39

我印象中JavaScript是可以连sql sever的吧,看看API

ddid 发表于 2009-8-15 20:09:25

原帖由 netants 于 2009-8-15 19:52 发表 http://pkuxkx.com/forum/images/common/back.gif
我印象中JavaScript是可以连sql sever的吧,看看API

SQLite不是以server/client方式运行的,实际上它是一个硬盘文件,运行的时候load进内存中,数据库操作都在内存中完成,所以速度比s/c方式的数据库要快。

javascript我印象中好像可以用ODBC的方式连接,但ODBC的效率实在是数据库连接中的下策。

ddid 发表于 2009-8-15 20:14:19

原帖由 maper 于 2009-8-15 19:06 发表 http://pkuxkx.com/forum/images/common/back.gif
“MUSH有了SQLite的支持会更强大”
怎么个强大法?
和ACCESS相比有什么显著优势?

说实话,因为编码问题的困扰,这3个月没怎么弄SQLite,只能说个大概。

SQLite本身和ACCESS比比较,性能,容量,可扩展性等等都比ACCESS要高。

在MUSH应用上,由于MUSH有API,可以不用ODBC的方法连接,所以就不用去调整DSN什么的了。

另外,据说SQLITE支持TCL编程,可以考虑把地图数据存入数据库以后,用数据库中编程,自动生成路径……有点YYyct36

暂时就想到这么多了……

谁能补充一下?

netants 发表于 2009-8-15 20:22:52

要是数据库就在本地,odbc没啥问题吧

ddid 发表于 2009-8-15 20:25:57

原帖由 netants 于 2009-8-15 20:22 发表 http://pkuxkx.com/forum/images/common/back.gif
要是数据库就在本地,odbc没啥问题吧

把机器人移植到其它机器上,odbc需要调整DSN的。

netants 发表于 2009-8-15 20:30:28

我怎么记得JavaScript不用设置odbc呢?应该是用的方法跟ADO.NET差不多
页: [1] 2 3 4 5 6
查看完整版本: 解决了一个困扰我3个月的问题,发贴纪念一下!