C++使用SQLite步骤及示例

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。
? 程序代码为:

[cpp] view plain copy

  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。
运行结果:

[plain] view plain copy

  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/

时间: 2024-10-13 17:14:41

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

Android SQLite数据库操作示例

SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.此外,它还是开源的,任何人都可以使用它. SQLite由以下几个组件组成:SQL编译器.内核.后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展SQLite的内核变得更加方便. SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947 Android在运行时(

源码方式向openssl中添加新算法完整详细步骤(示例:摘要算法SM3)【非engine方式】

openssl简介 openssl是一个功能丰富且自包含的开源安全工具箱.它提供的主要功能有:SSL协议实现(包括SSLv2.SSLv3和TLSv1).大量软算法(对称/非对称/摘要).大数运算.非对称算法密钥生成.ASN.1编解码库.证书请求(PKCS10)编解码.数字证书编解码.CRL编解码.OCSP协议.数字证书验证.PKCS7标准实现和PKCS12个人数字证书格式实现等功能. openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能.openssl支持Linux.UNIX.wi

Android SQLite数据库使用示例

简单介绍一下,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面我们用SQLite来开发一个英语词典.下图是项目结构-- MySQLite.java package sn.qdj.sqlitedemo; im

Sqlite的操作示例代码

import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * 黑名单数据库 */ public class BlackNumberOpenHelper extends SQLiteOpenHelper { public BlackNumberOpenHelper(Context context

JNI 详细使用步骤 上手示例

使用步骤 一.定义本地方法,通常情况下,应单独定义一个类来封装所有native方法 /** 存放native方法的类 */ public class MyNativeMethods {     private static MyNativeMethods mEmployee;     private MyNativeMethods() {     }     public static MyNativeMethods getInstance() {         if (mEmployee =

Android SQLite 简单使用示例

SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 袖珍型的SQLite可以支持高达2TB大小的数据库,每个数据库都是以单个文件的形式存在,这些数据都是以B-Tree的数据结构形式存储在磁盘上. 在事务处理方面,SQLite通过数据库级上的独占性和共享锁来实现独立事务处理.这意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据.在某个进程或线程想数据库执行写操作之前,必须获得独占锁.

SQLite的使用示例

public class CoolWeatherOpenHelper extends SQLiteOpenHelper { /** * Province表建表语句 */ public static final String CREATE_PROVINCE="create table Province(" +"id integer primary key autoincrement," +"city_name text," +"provi

SQLite集成与用法

本文转载至 http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/sqlite/zh.md 概述 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用SQLite数据库存储数据.SQLite是使用非常广泛的嵌入式数据库,它有小巧 .高效.跨平台.开源免费和易操作的特点. SQL

详解User Defined Java Class步骤(三)

 详解User Defined Java Class步骤(三) kettle中的"user defined java class"步骤,也称UDJC步骤,从4.0版本就有,功能非常强大,无所不能:可以在其中写任意代码,却不影响效率.本文将详细介绍在不同场景中用示例展示如果使用该步骤,由于内容非常多,便于阅读方便,把内容分成三部分,请完整看完全部内容,示例代码在这里下载. 如果没有看第二部分,请先访问第二部分. 错误处理 udjc步骤支持kettle的错误处理特性,从udjc步骤拖动