关于SQLite

简介:

最近在项目中用到了SQLite。主要是客户端用到,这种小型内嵌数据库还是蛮实用的。

提起SQLite我不自觉的就想起了微软出的ACCESS。他们两个确实是有可比性的。曾经,小型网站数据库,ASP可以用到ACCESS。但是,PHP却是没有相对应的解决方案,自从SQLite的出现,给PHP提供了一个解决方案。

在客户端里面,我用到的数据保存方案有:CSV、INI、XML。其中XML是最强大的,但是可惜的是我用的解析器是Tinyxml,实用tinyxml的初衷就是简单,只用于配置,所以再复杂的事情就有些应付不过来。至少,逻辑上要复杂上许多。

我最近,看了迅雷,搜狗……一些软件的目录,都有一个sqlite3.dll。于是就去了解了下。貌似现在很多的im软件用这个做客户端数据库的也多起来了。看起来这个项目还是不错的。

SQLite有好几种版本,如果要想内嵌到应用程序当中去,那就要用sqlite-amalgamation这个版本了。它就是一个头文件,一个c的实现文件,这个文件里面有十多万行代码。我用VS2003编译的时候,编译器会提醒我,行数有些超长了-_-!!

C++里面对SQLite的包装类库里面,我觉得SOCI算是很不错的,这个项目不仅仅是对SQLite进行了包装,而且对其他数据库都有包装,像MySQL、PostgreSQL、Oracle这些数据库都支持,还支持ODBC。如果感兴趣可以看我转载的一篇博文:http://www.cppblog.com/tx7do/archive/2009/11/27/102054.html

“工欲善其事,必先利其器。”
既然是数据库,那我自然要有工具能够编辑数据库了。我找了找SQLite的数据库工具,一搜一大把。我试用了好多种,都不是很好用。最终才确定了SQLite Expert Professional,这款商业软件。当然,我很无耻的用了破解版。破解版在www.gougou.com里面就能搜索到。我是倾向于用开源软件的,但是很无奈的是,虽然相关的工具很多很多,但是就没有一款真正好用的。

我在用SQLite Expert创建数据库的时候,发现有一个选择编码的选项,但是很可惜的是全部都是UTF系的编码……我习惯性的选择了UTF8,这个也是它的默认选项。我创建了一个测试的数据库,随便弄了个表,打了几个字,然后保存。再用VS2003做了一个测试程序,结果读进来的是乱码。后来我把数据库文件放到一个路径里面有中文的路径下,结果它找不到文件,看来它完完全全的使用了UTF字符,包括对路径的处理。看起来,只能转码了。以下附上两个Windows下的转码的方法:

std:: string UTF8ToAnsi(  const std:: string& strIn, std:: string& strOut )
{
    WCHAR* strSrc    = NULL;
    TCHAR* szRes    = NULL;

    int i = MultiByteToWideChar(CP_UTF8, 0, strIn.c_str(), -1, NULL, 0);

    strSrc = new WCHAR[i+1];
    MultiByteToWideChar(CP_UTF8, 0, strIn.c_str(), -1, strSrc, i);

    i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);

    szRes = new TCHAR[i+1];
    WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);

    strOut = szRes;

    delete[] strSrc;
    delete[] szRes;

    return strOut;
}


 

std:: string AnsiToUTF8(  const std:: string& strIn, std:: string& strOut )
{
    WCHAR* strSrc    = NULL;
    TCHAR* szRes    = NULL;

    int len = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strIn.c_str(), -1, NULL,0);

    unsigned short* wszUtf8 = new unsigned short[len+1];
    memset(wszUtf8, 0, len * 2 + 2);
    MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strIn.c_str(), -1, (LPWSTR)wszUtf8, len);

    len = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, NULL, 0, NULL, NULL);

    char* szUtf8 = new char[len + 1];
    memset(szUtf8, 0, len + 1);
    WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)wszUtf8, -1, szUtf8, len, NULL,NULL);

    strOut = szUtf8;

    delete[] szUtf8;
    delete[] wszUtf8;

    return strOut;
}



这两个方法可能不能直接编译过,有一些自己的东西,需要稍事修改。
用AnisToUTF8将输入的字符串全都转换为UTF8。用UTF8ToAnis将所有输出的字符串全部都转化为多字节字符。


引用:
SQLite:http://www.sqlite.org/
SOCI:http://soci.sourceforge.net/
SQLite Expert Professional:http://www.sqliteexpert.com/

目录
相关文章
|
28天前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
31 8
|
1月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
1月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
|
1月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
2月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
2月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
169 1
|
1月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
40 0
|
3月前
|
人工智能 小程序 Java
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
本文介绍了一款名为PyWxDump的开源工具,它可以获取微信账户信息、解密SQLite数据库以查看和备份聊天记录。此工具适用于已登录电脑版微信的用户,通过GitHub下载后简单几步即可操作。适合对数据恢复感兴趣的开发者,但请注意合法合规使用并尊重隐私。
524 2
【工具】轻松解锁SQLite数据库,一窥微信聊天记录小秘密
|
2月前
|
JSON NoSQL 数据库
和SQLite数据库对应的NoSQL数据库:TinyDB的详细使用(python3经典编程案例)
该文章详细介绍了TinyDB这一轻量级NoSQL数据库的使用方法,包括如何在Python3环境中安装、创建数据库、插入数据、查询、更新以及删除记录等操作,并提供了多个编程案例。
120 0
|
3月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
193 3
C#winform中使用SQLite数据库
下一篇
无影云桌面