#include

#include

using namespace std;

void doTest()

{

sqlite3* conn = NULL;

//1. 打开数据库

int result = sqlite3_open("D:/mytest.db",&conn);

if (result != SQLITE_OK) {

sqlite3_close(conn);

return;

}

const char* createTableSQL =

"CREATE TABLE TESTTABLE (int_col INT, float_col REAL, string_col TEXT)";

sqlite3_stmt* stmt = NULL;

int len = strlen(createTableSQL);

//2. 准备创建数据表,如果创建失败,需要用sqlite3_finalize释放sqlite3_stmt对象,以防止内存泄露。

if (sqlite3_prepare_v2(conn,createTableSQL,len,&stmt,NULL) != SQLITE_OK) {

if (stmt)

sqlite3_finalize(stmt);

sqlite3_close(conn);

return;

}

//3. 通过sqlite3_step命令执行创建表的语句。对于DDL和DML语句而言,sqlite3_step执行正确的返回值

//只有SQLITE_DONE,对于SELECT查询而言,如果有数据返回SQLITE_ROW,当到达结果集末尾时则返回

//SQLITE_DONE。

if (sqlite3_step(stmt) != SQLITE_DONE) {

sqlite3_finalize(stmt);

sqlite3_close(conn);

return;

}

//4. 释放创建表语句对象的资源。

sqlite3_finalize(stmt);

printf("Succeed to create test table now.\n");

//5. 构造查询表数据的sqlite3_stmt对象。

const char* selectSQL = "SELECT * FROM TESTTABLE WHERE 1 = 0";

sqlite3_stmt* stmt2 = NULL;

if (sqlite3_prepare_v2(conn,selectSQL,strlen(selectSQL),&stmt2,NULL) != SQLITE_OK) {

if (stmt2)

sqlite3_finalize(stmt2);

sqlite3_close(conn);

return;

}

//6. 根据select语句的对象,获取结果集中的字段数量。

int fieldCount = sqlite3_column_count(stmt2);

printf("The column count is %d.\n",fieldCount);

//7. 遍历结果集中每个字段meta信息,并获取其声明时的类型。

for (int i = 0; i < fieldCount; ++i) {

//由于此时Table中并不存在数据,再有就是SQLite中的数据类型本身是动态的,所以在没有数据时

//无法通过sqlite3_column_type函数获取,此时sqlite3_column_type只会返回SQLITE_NULL,

//直到有数据时才能返回具体的类型,因此这里使用了sqlite3_column_decltype函数来获取表声

//明时给出的声明类型。

string stype = sqlite3_column_decltype(stmt2,i);

stype = strlwr((char*)stype.c_str());

//下面的解析规则见该系列的“数据类型-->1. 决定字段亲缘性的规则”部分,其链接如下:

//https://www.jb51.net/article/65424.htm

if (stype.find("int") != string::npos) {

printf("The type of %dth column is INTEGER.\n",i);

} else if (stype.find("char") != string::npos

|| stype.find("text") != string::npos) {

printf("The type of %dth column is TEXT.\n",i);

} else if (stype.find("real") != string::npos

|| stype.find("floa") != string::npos

|| stype.find("doub") != string::npos ) {

printf("The type of %dth column is DOUBLE.\n",i);

}

}

sqlite3_finalize(stmt2);

//8. 为了方便下一次测试运行,我们这里需要删除该函数创建的数据表,否则在下次运行时将无法

//创建该表,因为它已经存在。

const char* dropSQL = "DROP TABLE TESTTABLE";

sqlite3_stmt* stmt3 = NULL;

if (sqlite3_prepare_v2(conn,dropSQL,strlen(dropSQL),&stmt3,NULL) != SQLITE_OK) {

if (stmt3)

sqlite3_finalize(stmt3);

sqlite3_close(conn);

return;

}

if (sqlite3_step(stmt3) == SQLITE_DONE) {

printf("The test table has been dropped.\n");

}

sqlite3_finalize(stmt3);

sqlite3_close(conn);

}

int main()

{

doTest();

return 0;

}

//输出结果为:

//Succeed to create test table now.

//The column count is 3.

//The type of 0th column is INTEGER.

//The type of 1th column is DOUBLE.

//The type of 2th column is TEXT.

//The test table has been dropped.

sqlite3 c语言编程,SQLite教程(十三):C语言编程实例代码(1)相关推荐

  1. Wix 安装部署教程(十三) -- 多语言安装包

    原文:Wix 安装部署教程(十三) -- 多语言安装包 这几天摸索WIX的多语言安装包(这里是Wix的setup 工程,不是Bundle),终于走通了,感谢网友uni的指点.WIX的多语言安装包能够根 ...

  2. c语言控制台光标的坐标范围,C语言之实现控制台光标随意移动的实例代码

    原理引入windows.h,首先是要获得输入的东西,然后通过判断: 1.方向键:执行上下左右的移动功能 2 .回车键:执行换行的功能. 3.普通键:输入功能. 终点就是要获取到屏幕上的坐标,当按下了方 ...

  3. 用坐标实现物体的移动c语言,C语言之实现控制台光标随意移动的实例代码

    原理引入windows.h,首先是要获得输入的东西,然后通过判断: 1.方向键:执行上下左右的移动功能 2 .回车键:执行换行的功能. 3.普通键:输入功能. 终点就是要获取到屏幕上的坐标,当按下了方 ...

  4. python获取电脑几核几线程_python编程测试电脑开启最大线程数实例代码

    本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下. #!/usr/bin/env python #coding=gbk import threading import ti ...

  5. java 抽样_Java编程实现二项分布的采样或抽样实例代码

    本文研究的主要是Java编程实现二项分布的采样或抽样,下面是详细实现代码. 如下程序为n=100,p=0.9的二项分布采样,共采样10000次 package function; import org ...

  6. python测试电脑性能的代码_python编程测试电脑开启最大线程数实例代码

    本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下. #!/usr/bin/env python #coding=gbk import threading import ti ...

  7. 程序设计教程用c 语言编程,程序设计教程--用C 语言编程

    程序设计教程--用C 语言编程 <程序设计教程--用C++语言编程>第四次印刷的勘误表 pIX. 第17行 错: 8.3 虚函数 对: 8.3 消息(成员函数调用)的动态绑定 p33. 第 ...

  8. 大一c语言程序设计项目教程课,C语言程序设计项目教程 教学课件 ppt 作者 王瑞红 C语言程序设计项目教程习题答案...

    C语言程序设计项目教程 教学课件 ppt 作者 王瑞红 C语言程序设计项目教程习题答案 习题答案模块 1 C 语言基础知识1. 选择题(1)C 语言中运算对象必须是整型的运算符是 (B ).A. %= ...

  9. python编程入门教程下载-《Python编程从入门到精通》PDF高清完整版-PDF下载

    作者: 叶维忠 出版年: 2018-11-1 页数: 429 装帧: 平装 ISBN: 9787115478801 内容简介 · · · · · · 本书循序渐进.由浅入深地详细讲解了Python语言 ...

  10. c语言程序设计项目教程视频,C语言程序设计项目教程

    图书简介 本书充分结合高职高专学生实际,对内容科学取舍,突出算法,强调逻辑思路,吸纳先进的项目教学法的思想,非常注重编程能力的训练.全书共分8个模块,主要介绍了C语言的基础知识.程序设计的基本结构.数 ...

最新文章

  1. http header头设置反向代理不缓存
  2. 活动目录(Active Directory)安装
  3. linux挂载设备类型lvm,linux——管理系统设备之LVM的管理
  4. Java延迟加载的最佳实践应用示例!
  5. dubbo应用程序的单元测试环境搭建(springtest,powermock,mockito)
  6. SDUTOJ3469_深度优先搜索练习之神奇的矩环(DFS)
  7. LINUX系列:Shell命令
  8. 没有找到dllregisterserver输入点_Excel教程:框内打的几种输入方法,值得收藏
  9. 代码整洁之道——9、格式化
  10. 图:活动现场双屏管理系统V3-多线程抽奖版软件,完美升级收工!历时3个月,艰辛坎坷...
  11. bing翻译api php,PHP调用必应翻译API示例源码
  12. vs2008 SP1 安装问题小解决方案
  13. Fiddler:安卓抓包配置
  14. 如何将origin pro的界面切换变成中文显示?
  15. NC工具的使用说明教程
  16. python语言编程培训班价值有多大?
  17. export和import的答疑
  18. 选择尚学堂与传智播客的java培训?
  19. 计算机李宁,李宁的个人主页-西北工业大学教师个人主页
  20. Redis 大数据量(百亿级)Key存储需求及解决方案

热门文章

  1. 用 .Net WebBrowser 控件获取POST数据
  2. 爬虫抓取糯米网上所有商家数据
  3. 用户在网站注册,网站通过微信发送验证码,这个操作是怎么实现的?
  4. Spring使用@Required注解依赖检查
  5. 利用System.Net.Mail 的SmtpClient发送邮件
  6. 深入学习__doPostBack函数
  7. 130道ASP.NET面试题
  8. 命令行执行php脚本中的$argv和$argc配置方法
  9. mysql大数据量处理
  10. 关于海量数据查找排序问题