sqlite数据库打开问题

miaochunxiang 2013-07-16 07:49:19
我现在正在做sqlite数据库的研究,打开数据库有三种方式sqlite3_open,sqlite3_open16和sqlite3_open_v2,我现在是使用前面的两种,这个时候数据库是不存在的,我使用第一个函数的时候数据库不存在的时候会创建,使用第二个函数理论上也应该是这样,但是我使用第二个函数的时候数据库不存在并没有创建,这是什么原因能解释吗?我看到别的写的程序使用的sqlite3_open16,数据库不存在的时候是会创建数据库的,我没有看出来我的程序和他们的不一样,求大虾赐教!
...全文
332 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
LBJAMS 2013-08-14
  • 打赏
  • 举报
回复
这个和项目的字符集是有关系的,如果想用sqlite3_open_16就要把项目的字符集改成Unicode的,这样sqlite3_open_16就可以正常的使用了!
kusanagiya 2013-07-19
  • 打赏
  • 举报
回复
sqlite3_open是支持UTF8的 如果有中文字 需要通过MultiByteToWideChar将其转换为UTF8的
miaochunxiang 2013-07-19
  • 打赏
  • 举报
回复
这个问题没有搞明白,现在问下用sqlite3_open打开有中午字符目录的数据库会失败怎么解决?向数据库中插入中文字符怎么解决?转字符?转成UTF-8的?CHAR[]怎么转?我不知道现在的VS08是用的什么编码方式!
miaochunxiang 2013-07-18
  • 打赏
  • 举报
回复
引用 6 楼 a443475601 的回复:
lz纠结的是什么,你为什么要打开一个不存在的数据库呢? sqlite3_open16 参数你要用wchar_t *的
用CHAR[]不行吗?
苹果皮 2013-07-18
  • 打赏
  • 举报
回复
lz纠结的是什么,你为什么要打开一个不存在的数据库呢? sqlite3_open16 参数你要用wchar_t *的
cammerer 2013-07-18
  • 打赏
  • 举报
回复
不知道是封装还是研究。 封装的话 网上拿来主义。 研究的话看源码 。英文注释很详尽。

sqlite3_open(const char *zFilename, //没有说明,使用 ANSI code page 即CP_ACP
sqlite3_open_v2(const char *filename,   /* Database filename (UTF-8) */
SQLITE_API int sqlite3_open16(const void *zFilename, ..)   /* zFilename encoded in UTF-8 instead of UTF-16 */
苹果皮 2013-07-18
  • 打赏
  • 举报
回复
引用 7 楼 miaochunxiang 的回复:
[quote=引用 6 楼 a443475601 的回复:] lz纠结的是什么,你为什么要打开一个不存在的数据库呢? sqlite3_open16 参数你要用wchar_t *的
用CHAR[]不行吗?[/quote] sqlite3_open 最好使用utf8的 sqlite3_open16 最好使用unicode的
miaochunxiang 2013-07-17
  • 打赏
  • 举报
回复
引用 4 楼 adlay 的回复:
[quote=引用 2 楼 miaochunxiang 的回复:] [quote=引用 1 楼 adlay 的回复:] 看它返回的错误码撒, 错误码会表明失败的原因. 你确定使用的编码是 utf-16? 先试试已经存在的打开有没有问题吧.
我还真不知道怎么设置VS的编码方式, 我看了,函数返回的是对的,Getlasterror获取到的值是0,没有错误![/quote] 直接看 sqlite3_open 函数的返回值, 不是用 Getlasterror.[/quote] 返回值是0,是正确的,这个没有问题。
www_adintr_com 2013-07-17
  • 打赏
  • 举报
回复
引用 2 楼 miaochunxiang 的回复:
[quote=引用 1 楼 adlay 的回复:] 看它返回的错误码撒, 错误码会表明失败的原因. 你确定使用的编码是 utf-16? 先试试已经存在的打开有没有问题吧.
我还真不知道怎么设置VS的编码方式, 我看了,函数返回的是对的,Getlasterror获取到的值是0,没有错误![/quote] 直接看 sqlite3_open 函数的返回值, 不是用 Getlasterror.
sumos 2013-07-17
  • 打赏
  • 举报
回复
引用 2 楼 miaochunxiang 的回复:
[quote=引用 1 楼 adlay 的回复:] 看它返回的错误码撒, 错误码会表明失败的原因. 你确定使用的编码是 utf-16? 先试试已经存在的打开有没有问题吧.
我还真不知道怎么设置VS的编码方式, 我看了,函数返回的是对的,Getlasterror获取到的值是0,没有错误![/quote] 这种第三方的库,是不能使用GetLastError来获取错误的。 第一种方式不加密,第二种没用过,第三种可以加密
miaochunxiang 2013-07-17
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
看它返回的错误码撒, 错误码会表明失败的原因. 你确定使用的编码是 utf-16? 先试试已经存在的打开有没有问题吧.
我还真不知道怎么设置VS的编码方式, 我看了,函数返回的是对的,Getlasterror获取到的值是0,没有错误!
www_adintr_com 2013-07-16
  • 打赏
  • 举报
回复
看它返回的错误码撒, 错误码会表明失败的原因. 你确定使用的编码是 utf-16? 先试试已经存在的打开有没有问题吧.

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧