[MFC]Sqlite问题小记
前言 近几天弄Sqlite的C++程序被乱码、错误代码4和8整疯了,Sqlite的GUI工具使用的是Sqliteman。目前暂时可以用了,数据库为UTF-8的,但是在Sqliteman显示为乱码,程序中正常。 参考 CppSQLite - C++ Wrapper for SQLite 正文 一、 使用Sqliteman创建UTF-8和auto_vacuum=1的数据库 1.1 Sqliteman->New 创建新数据库 1.2 左边菜单切换到Pragmas 1.3 选中auto_vacuum这行,点击下方Change Value按钮,输入1,点确定 1.4 选中encoding这行,同上,但是不能直接输入UTF-8,得输入UTF8或者"UTF-8"(带双引号)点确定 1.5 最后随便新建一个表,然后退出即可。再次打开即可看到变更后效果,否则在已经存在表的数据库中你无法修改这两个值的。 二、 使用sql语句来创建库和表 上面用Sqliteman创建数据库并没有解决我的问题,仍然被乱码、错误代码4和8困扰,无奈之下只好用sql来创建和导入初始数据。在CppSQLiteDemo/CppSQLite3Demo.cpp的mian函数中直接写sql语句了,如下: remove(gszFile);db.open(gszFile); // 创建config db.execDML( " createtableconfig(idINTEGER,keyTEXT,valueTEXT,defaultvalueTEXT,descTEXT); " ); db.execDML( " insertintoconfigvalues('1','IsAutoSync','0','1','测试数据'); " ); 汉字部分用Sqliteman打开查看是仍然是乱码,但是程序读取出来没有问题。 三、注意 3.1 本文使用的代码和库均是参考文章中的库和代码,从代码中可以看出是采用UTF-8打开的连接,使用的方法是sqlite3_open而不是sqlite3_open16,而Sqliteman默认是UTF-16le。 3.2 CppSQLiteDemo下的工程为VC6的工程,打开后执行报错,你需要把Common/sqlite3.dll拷贝到Debug目录下即可。 四、补充 4.1 2010-5-21 想自动增长的话设置成INTEGER PRIMARY KEY就可以了,如下: db.execDML( " createtableconfig(idINTEGERPRIMARYKEY,descTEXT); " );db.execDML( " insertintoconfig(key,value,defaultvalue,desc)values('IsAutoSync','测试'); " );
结束语 发现文章是04年的 - - #,不过暂且先用着吧,等手头空了再翻新下,到时候再来一篇。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Install Chromium (with Pepper Flash) on CentOS/Red Hat
- apt-get 依赖版本过高(Depends: g++-4.6(>= 4.6.3-1)but i
- Cocos2dx引擎笔记——如何使用HttpClient
- c# – 我应该使用System.Security.Cryptography命名空间中的
- 浅谈WPF页间导航
- swift json的序列化和反序列化
- VUE中的无限循环代码解析
- 使用AXMLPrinter2.jar+BAT批处理文件批量反编译XML
- mini2440 简单nandflash驱动代码记录(2.6.32.2内核)
- Oracle中的case when then else end