C++使用SQLite步骤及示例
开发环境:Windows 10+VS2013。

开发语言:C++。

 

1、 下载sqlite文件。

下载网址:http://www.sqlite.org/download.html

SQLite版本为SQLite 3.11.1,相关文件如下。
sqlite-dll-win32-x86-3110100.zip:包含sqlite3.def、sqlite3.dll文件。
sqlite-amalgamation-3110100.zip:包含sqlite3.h 文件。
sqlite-tools-win32-x86-3110100.zip:包含sqlite3.exe 文件。


2、 生成sqlite3.lib。

 sqlite-dll-win32-x86-3110100.zip文件解压到D:\ sqlite。
 运行Visual Studio 2013 lib命令行程序。
 依次执行控制台命令。

  1. cd D:\sqlite\sqlite-dll-win32-x86-3110100
  2. D:
  3. E:\Microsoft Visual Studio 12.0\VC\bin\lib.exe /def:sqlite3.def /machine:ix86

即可生成sqlite3.lib文件。

3、 创建测试数据。

 sqlite-tools-win32-x86-3110100.zip文件解压到D:\ sqlite。
 启动命令行,进入D:\ sqlite目录。
命令依次为:

  1. cd D:\sqlite
  2. d:

 创建test.db测试文件。
创建user表。

字段Code 字段类型 字段描述
id integer 主键,自增
name varchar(64) 用户名
age integer 年龄

创建命令依次如下。

  1. D:\sqlite>sqlite3.exe test.db
  2. SQLite version 3.7.13 2012-06-11 02:05:22
  3. Enter ".help" for instructions
  4. Enter SQL statements terminated with a ";"
  5. sqlite> create table user
  6. ...> (
  7. ...> id integer primary key autoincrement,
  8. ...> name varchar(64),
  9. ...> age integer
  10. ...> );
  11. sqlite> .quit


4、 创建示例工程

 创建win32控制台工程SQLiteTest。
 sqlite3.h(在sqlite-amalgamation-3071300.zip压缩包中)添加到工程。
 sqlite3.lib复制到工程文件夹下。
 工程属性中添加sqlite3.lib库依赖。
Configuration Properties->Linker->Input->Additional Dependencies添加sqlite3.lib。
 程序代码为:

  1. /*
  2. @brief 本程序测试sqlite数据库的增删改查
  3. @date 2012-09-03
  4. */
  5. // SQLiteTest.cpp : Defines the entry point for the console application.
  6. //
  7. #include "stdafx.h"
  8. #include "sqlite3.h"
  9. #include <iostream>
  10. using namespace std;
  11. sqlite3 * pDB = NULL;
  12. //增加用户
  13. bool AddUser(const string& sName, const string& sAge);
  14. //删除用户
  15. bool DeleteUser(const string& sName);
  16. //修改用户
  17. bool ModifyUser(const string& sName, const string& sAge);
  18. //查找用户
  19. bool SelectUser();
  20. int _tmain(int argc, _TCHAR* argv[])
  21. {
  22. //打开路径采用utf-8编码
  23. //如果路径中包含中文,需要进行编码转换
  24. int nRes = sqlite3_open("D:\\sqlite\\test.db", &pDB);
  25. if (nRes != SQLITE_OK)
  26. {
  27. cout<<"Open database fail: "<<sqlite3_errmsg(pDB);
  28. goto QUIT;
  29. }
  30. //添加“赵钱孙李”
  31. if (    !AddUser("zhao", "18")
  32. || !AddUser("qian", "19")
  33. || !AddUser("sun", "20")
  34. || !AddUser("li", "21"))
  35. {
  36. goto QUIT;
  37. }
  38. //删除“赵”
  39. if (!DeleteUser("zhao"))
  40. {
  41. goto QUIT;
  42. }
  43. //修改“孙”
  44. if (!ModifyUser("sun", "15"))
  45. {
  46. goto QUIT;
  47. }
  48. //查找用户
  49. if (!SelectUser())
  50. {
  51. goto QUIT;
  52. }
  53. QUIT:
  54. sqlite3_close(pDB);
  55. return 0;
  56. }
  57. bool AddUser(const string& sName, const string& sAge)
  58. {
  59. string strSql = "";
  60. strSql += "insert into user(name,age)";
  61. strSql += "values('";
  62. strSql += sName;
  63. strSql += "',";
  64. strSql += sAge;
  65. strSql += ");";
  66. char* cErrMsg;
  67. int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
  68. if (nRes != SQLITE_OK)
  69. {
  70. cout<<"add user fail: "<<cErrMsg<<endl;
  71. return false;
  72. }
  73. else
  74. {
  75. cout<<"add user success: "<<sName.c_str()<<"\t"<<sAge.c_str()<<endl;
  76. }
  77. return true;
  78. }
  79. bool DeleteUser(const string& sName)
  80. {
  81. string strSql = "";
  82. strSql += "delete from user where name='";
  83. strSql += sName;
  84. strSql += "';";
  85. char* cErrMsg;
  86. int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
  87. if (nRes != SQLITE_OK)
  88. {
  89. cout<<"delete user fail: "<<cErrMsg<<endl;
  90. return false;
  91. }
  92. else
  93. {
  94. cout<<"delete user success: "<<sName.c_str()<<endl;
  95. }
  96. return true;
  97. }
  98. bool ModifyUser(const string& sName, const string& sAge)
  99. {
  100. string strSql = "";
  101. strSql += "update user set age =";
  102. strSql += sAge;
  103. strSql += " where name='";
  104. strSql += sName;
  105. strSql += "';";
  106. char* cErrMsg;
  107. int nRes = sqlite3_exec(pDB , strSql.c_str() ,0 ,0, &cErrMsg);
  108. if (nRes != SQLITE_OK)
  109. {
  110. cout<<"modify user fail: "<<cErrMsg<<endl;
  111. return false;
  112. }
  113. else
  114. {
  115. cout<<"modify user success: "<<sName.c_str()<<"\t"<<sAge.c_str()<<endl;
  116. }
  117. return true;
  118. }
  119. static int UserResult(void *NotUsed, int argc, char **argv, char **azColName)
  120. {
  121. for(int i = 0 ; i < argc ; i++)
  122. {
  123. cout<<azColName[i]<<" = "<<(argv[i] ? argv[i] : "NULL")<<", ";
  124. }
  125. cout<<endl;
  126. return 0;
  127. }
  128. bool SelectUser()
  129. {
  130. char* cErrMsg;
  131. int res = sqlite3_exec(pDB, "select * from user;", UserResult , 0 , &cErrMsg);
  132. if (res != SQLITE_OK)
  133. {
  134. cout<<"select fail: "<<cErrMsg<<endl;
  135. return false;
  136. }
  137. return true;
  138. }

 编译成功后,将sqlite3.dll复制到SQLiteTest.exe同一目录下,运行SQLiteTest.exe。
运行结果:

  1. add user success: zhao  18
  2. add user success: qian  19
  3. add user success: sun   20
  4. add user success: li    21
  5. delete user success: zhao
  6. modify user success: sun        15
  7. id = 2, name = qian, age = 19,
  8. id = 3, name = sun, age = 15,
  9. id = 4, name = li, age = 21,

5、 SQLite管理工具

可视化管理工具,推荐使用:SQLite Expert,见:http://www.sqliteexpert.com/

 #include "stdafx.h"
#include <stdio.h>
#include "sqlite3.h"
#include <process.h>
#pragma comment(lib,"sqlite3.lib") static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return ;
} int _tmain(int argc, char* argv[])
{
sqlite3 *db;
char *zErrMsg = ;
int rc; if( argc!= ){
fprintf(stderr, "Usage: %s DATABASE\n", argv[]);
system("pause");
return();
}
rc = sqlite3_open(argv[], &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return();
} //char* sqlstatement = "create table test(int id,varchar name);";
//char* sqlstatement = "insert into test values(1,'hello');";
char* sqlstatement = "select * from test;";
rc = sqlite3_exec(db, sqlstatement, callback, , &zErrMsg);
if( rc!=SQLITE_OK ){
printf("%s\n",argv[]);
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db); system("pause");
return ;
}

C++使用SQLite步骤及示例的更多相关文章

  1. PyQt(Python+Qt)学习随笔:工具箱(QToolBox)编程使用的步骤及示例代码

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 使用toolBox开发应用时,通过Designer设计ui界面时,只能在Designer中设计too ...

  2. Android SQLite(1)简单示例-增,删,改,查

    1.主要核心类,Sqlite编程要继承SQLiteOpenHelper import android.content.Context; import android.database.sqlite.S ...

  3. Sqlite的操作示例代码

    import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.databa ...

  4. android Api操作SQLite数据库的示例代码

    import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.databa ...

  5. 用SQL语句操作Sqlite数据库的示例代码

    import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.databa ...

  6. JNI 详细使用步骤 上手示例

    1.定义本地native方法 定义本地方法,通常情况下,应单独定义一个类来封装所有native方法 /** 存放native方法的类 */ public class MyNativeMethods { ...

  7. python使用sqlite示例

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用. 操作关系数据库,首先需要连接到数据库 ...

  8. SQLite -- 分页查询

    原文:http://blog.csdn.net/lu1024188315/article/details/51734514 参考:http://www.runoob.com/sqlite/sqlite ...

  9. C#操作SQLite数据库

    SQLite介绍 SQLite is a software library that implements a self-contained, serverless, zero-configurati ...

随机推荐

  1. php命名空间与可变函数

    命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决 对于命名空间,官方文档已经说得很详细[查看],我在 ...

  2. [ CodeVS冲杯之路 ] P1294

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1294/ 随手一打就是这么漂亮的全排列,想当年我初一还是初二的时候,调了1个多小时才写出来(蒟蒻一枚) 直接DFS每次枚 ...

  3. [ CodeVS冲杯之路 ] P1068

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1068/ 这是一道神DP题,一开始状态设计错了,用位置和剩余卡片做下标,过了样例数据WA了 好了,讲正解,设 f[i][ ...

  4. How to Use Instruments in Xcode

    http://blog.csdn.net/woaifen3344/article/details/40748075 This is a blog post by iOS Tutorial Team m ...

  5. 双缓冲(Double Buffer)原理和使用【转】

    转自:http://blog.csdn.net/acs713/article/details/16359551 原文出自:http://blog.csdn.net/xiaohui_hubei/arti ...

  6. 内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages【转】

    转自:http://www.cnblogs.com/yfz0/p/5829443.html 在内核模块中申请分配内存需要使用内核中的专用API:kmalloc.vmalloc.kzalloc.kcal ...

  7. POCO库中文编程参考指南(6)Poco::Timestamp

    1 类型别名 三个时间戳相关的类型别名,TimeDiff表示两个时间戳的差,第二个是以微秒为单位的时间戳,第三个是以 100 纳秒(0.1 微妙)为单位的时间戳: typedef Int64 Time ...

  8. 优化html中mp4视频加载速度

    如果使用参数faststart就会在生成完上边结构之后将moov移动到mdat前面:ffmpeg –i input.flv –c copy –f mp4 –movflags faststart out ...

  9. 多线程之:java线程创建

    java中创建线程有两种方式: 1.继承Thread类,重写run()方法,如: public class MyThread extends Thread { public void run(){ S ...

  10. Fiddler抓包6-get请求(url详解)【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/fiddler/ 前言 上一篇介绍了Composer的功能,可以模拟get和post请求 ...