sqlite中文路径问题
2010-06-07 15:53
183 查看
from http://www.sqlite.com.cn/POParticle/3/101.Html
SQLite函数使用教程(1)
SQLite官方的使用介绍中附带了一个C语言的实例,该实例使用了回调的方法处理由SQL语句返回的记录集,这种回调函数的方法比较复杂,而且也并没有获得什么实质性的好处。所以在这里我推荐使用另外一组函数来完成该类操作,经实践检验证明,该方法在效率方面不存在任何问题。具体代码如下:
sqlite3 *db;
char *zErrMsg = 0;
int nrow = 0, ncolumn = 0; //查询语句返回的结果集的行数,列数
char temp[256], FileRoot[256];
char ** azResult; //用于保存查询结果集数据
sprintf(temp, _T("%s"), _T("//test.db"));
/*
SQLite3以UTF-8的编码方式处理字符串,所以在使用sqlite3_open打开数据库之前需要将数据库路径进行编码转换。
*/
CCodingConv::GB2312_2_UTF8(FileRoot, 256, temp, 0);
sqlite3_open(FileRoot, &db);
if(db == NULL)
{
return -1;
}
// sqlite3_get_table函数可以返回SQL语句执行之后的记录集,以及行列数
sqlite3_get_table(db, "SELECT name, age FROM list;", &azResult, &nrow, &ncolumn, &zErrMsg);
//nrow表明一共有多少项符合该次查询条件的记录
for(int k = 1; k <= nrow; k++)
{
printf(azResult[k*ncolumn]); //对应name列的数据
printf(azResult[k*ncolumn+1]); //对应age列的数据
}
//释放为记录集分配的内存,如果返回了空记录集并不会发生错误
sqlite3_free_table(azResult);
//关闭数据库
sqlite3_close(db);
return 0;
注释:原代码中的CCodingConv类可以进行UTF-8到GB2312之间的转换。
数据库的表为
CREATE TABLE list (name varchar(40) UNIQUE, age integer);
存入数据:
sqlite3_exec(db, "insert into list values ('tamsyn','24');", 0, 0, &zErrMsg);
sqlite3_exec(db, "insert into list values ('mistletoe','23');", 0, 0, &zErrMsg);
使用这种方法在C语言中可以更方便的使用SQLite3,避免了回调函数的复杂性。并且可以完成任何SQL语言的查询操作。接下来我们的文章会结合实际操作,总结一下如何更高效的使用SQLite数据库!一点愚见还望大家不吝赐教!
////////////////////
注:
原文链接中有代码下载,但可能编译错误,加上强制转换就行了
SQLite函数使用教程(1)
SQLite官方的使用介绍中附带了一个C语言的实例,该实例使用了回调的方法处理由SQL语句返回的记录集,这种回调函数的方法比较复杂,而且也并没有获得什么实质性的好处。所以在这里我推荐使用另外一组函数来完成该类操作,经实践检验证明,该方法在效率方面不存在任何问题。具体代码如下:
sqlite3 *db;
char *zErrMsg = 0;
int nrow = 0, ncolumn = 0; //查询语句返回的结果集的行数,列数
char temp[256], FileRoot[256];
char ** azResult; //用于保存查询结果集数据
sprintf(temp, _T("%s"), _T("//test.db"));
/*
SQLite3以UTF-8的编码方式处理字符串,所以在使用sqlite3_open打开数据库之前需要将数据库路径进行编码转换。
*/
CCodingConv::GB2312_2_UTF8(FileRoot, 256, temp, 0);
sqlite3_open(FileRoot, &db);
if(db == NULL)
{
return -1;
}
// sqlite3_get_table函数可以返回SQL语句执行之后的记录集,以及行列数
sqlite3_get_table(db, "SELECT name, age FROM list;", &azResult, &nrow, &ncolumn, &zErrMsg);
//nrow表明一共有多少项符合该次查询条件的记录
for(int k = 1; k <= nrow; k++)
{
printf(azResult[k*ncolumn]); //对应name列的数据
printf(azResult[k*ncolumn+1]); //对应age列的数据
}
//释放为记录集分配的内存,如果返回了空记录集并不会发生错误
sqlite3_free_table(azResult);
//关闭数据库
sqlite3_close(db);
return 0;
注释:原代码中的CCodingConv类可以进行UTF-8到GB2312之间的转换。
数据库的表为
CREATE TABLE list (name varchar(40) UNIQUE, age integer);
存入数据:
sqlite3_exec(db, "insert into list values ('tamsyn','24');", 0, 0, &zErrMsg);
sqlite3_exec(db, "insert into list values ('mistletoe','23');", 0, 0, &zErrMsg);
使用这种方法在C语言中可以更方便的使用SQLite3,避免了回调函数的复杂性。并且可以完成任何SQL语言的查询操作。接下来我们的文章会结合实际操作,总结一下如何更高效的使用SQLite数据库!一点愚见还望大家不吝赐教!
////////////////////
注:
原文链接中有代码下载,但可能编译错误,加上强制转换就行了
相关文章推荐
- 解决Sqlite中的中文路径问题
- 关于CppSqlite中数据库文件中文路径识别问题的解决方法
- sqlite3问题2:中文路径的支持
- 谈谈c#中的字符编码转化 (sqlite 中文路径的问题)
- Sqlite中文路径问题
- 解决sqlite3_open函数无法打开中文路径问题
- sqlite解决中文路径问题
- java连接sqlite3,解决sqlite中文路径问题
- sqlite打开路径含中文的数据库文件失败的问题
- 关于CppSqlite中数据库文件中文路径识别问题的解决法
- c++中sqlite中文路径创建数据库失败的问题
- 关于std::fstream以及std::ifstream打开中文路径名失败的问题和解决方法
- 解决fstream不能打开带有中文路径文件的问题
- struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径)
- cocos2dx3.2 使用SimpleAudioEngine时不能播放音频解决办法(中文路径问题)
- 页面中的"中文路径"图片不显示的问题
- 将C语言编译成DLL并用C#进行调用以及关于从C#传输中文路径到C的DLL中打开文件的问题
- netbean不能导入中文的路径有乱码的问题
- tomcat 服务器 打开中文路径出现乱码问题
- GDAL打开HDF格式时遇到的中文路径问题(未解决)