151111 sqlite3数据库学习
最近在学习数据库,想起去年做的项目里用到了sqlite3。那时候,没有任何的数据库经验,误打误撞,找到了sqlite3,然后参考网络上零碎的信息,把它嵌入到工程里,并且成功了。可惜,那时候没有好好保存记录,电脑在被弄坏之后资料全木有了。今天,重新下载、配置了sqlite3,记下学习记录,以备参考。
ch1. 编译可执行文件和动态链接库
下载源文件压缩包sqlite-amalgamation-3090200.zip,提取出sqlite3.h sqlite3.c shell.c
下载dll文件压缩包sqlite-dll-win32-x86-3090200.zip,提取出sqlite3.def
==============================================
1. 使用VS生成动态链接库
配置属性 - 链接器 - 输入 - 模块定义文件 :
sqlite3.def
配置属性 - C/C++ - 预处理器 - 预处理器定义:
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_RTREE
SQLITE3_EXPORTS
2. 使用VS命令行生成可执行文件sqlite3.exe 和 动态链接库sqlite3.dll 静态库 sqlite3.lib
======================================================
rem 151111 编译sqlite3.exe
@cl /O3 /EHsc shell.c sqlite3.c /o:sqlite3.exe
@del *.obj
======================================================
rem 151111 生成sqlite3的动态链接库文件
@echo off
@echo clcompiling ...
@cl /c /Zi /nologo /W3 /O2 /GL /D SQLITE_ENABLE_COLUMN_METADATA /D SQLITE_ENABLE_RTREE /D SQLITE3_EXPORTS /D WIN32 /D NDEBUG /D _WINDOWS /D _USRDLL /D _UNICODE /D UNICODE /EHsc "sqlite3.c"
echo linking ...
@link /OUT:"sqlite3.dll" /DEF:"sqlite3.def" /OPT:REF /OPT:ICF /LTCG /IMPLIB:"sqlite3.lib" /DLL sqlite3.obj
@echo done!
@del *.obj
@del *.pdb
@del *.exp
pause
========================================================
rem 复制文件到bin目录下
@cd ..
@del /F /Q bin
@rmdir bin
@mkdir bin
@copy .\src\sqlite3.exe .\bin\sqlite3.exe
@copy .\src\sqlite3.dll .\bin\sqlite3.dll
@copy .\src\sqlite3.lib .\bin\sqlite3.lib
@copy .\src\sqlite3.def .\bin\sqlite3.def
@copy .\src\sqlite3.h .\bin\sqlite3.h
================================================================
3. 使用dumpbin 和 lib工具生成 lib
也可以直接使用dll文件,使用dumpbin工具导出dll中的def文件,然后使用lib工具生成lib文件。
以后,在工程中可以不使用LoadLibrary,而直接使用#pragma comment(lib,"xxx.lib")。
(1) 使用dumpbin工具导出dll中的def文件
dumpbin /exports sqlite3.dll >sqlite33.def
将生成的文件,
ordinal hint RVA name
1 0 00013C6B sqlite3_aggregate_context
2 1 00005594 sqlite3_aggregate_count
3 2 000183A4 sqlite3_auto_extension
... ...
修改为
EXPORTS
sqlite3_aggregate_context
sqlite3_aggregate_count
sqlite3_auto_extension
...
(2) 使用lib工具,导出lib文件
lib /def:sqlite33.def /out:sqlite33.lib
ch2. 运行并测试sqlite3.exe
1. 建立(或打开已存在的)数据库
sqlite3.exe test.db
2. 创建表,插入数据,查询数据,删除数据
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE users(userid varchar(20) PRIMARY KEY, age int,phone text not null default 'unknow',UNIQUE(userid,phone));
INSERT INTO "users" VALUES('jin',22,'18040510022');
INSERT INTO "users" VALUES('jia',23,'18040510023');
COMMIT;
SELECT * FROM USERS ORDER BY userid;
SELECT DISTINCT userid FROM USERS ORDER BY userid;
DELETE from "users" where userid='jia';
3. 将输出作为文件保存
.output output_bak.db /*将输出重定向到文件中*/
.dump
.output stdout /*返回到标准输入输出*/
4. 备份数据库
.save saved_bak.db
.dump /*倾泻、倾倒 */
5. 载入数据库,查看数据信息
.mode col /*设置以表格的形式查看数据*/
.header on /*显示表头*/
.read saved_bak.db /*读取数据库*/
.database /*显示数据库内容 show databases*/
.tables /*显示数据表 show tables*/
.schema users /*显示创建原语 show create table users */
select type ,name, tbl_name, sql from sqlite_master order by type; /*显示所有信息*/
6. 释放掉被删除的内存空间
sqlite3.exe test.db vacuum
7. 注释方式
-- 这是单行注释
/*这是
多行注释*/
8. 5种基本类型
Integer
Float
Blob
Text
Null
ch3. C/C++嵌入sqlite3
// 151111 test_sqlite.cpp
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#pragma comment(lib,"sqlite3.lib")
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for (i = 0; i < argc; i++)
{
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
if( argc != 3 )
{
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
fprintf(stderr, "such as: test_sqlite.exe .\\bin\\user.db \"select * from users;\" \n");
return (1);
}
rc = sqlite3_open(argv[1], &db);
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return (1);
}
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
if( rc != SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
system("pause");
return 0;
}
输出:
userid = jin
age = 22
phone = 18040510022
userid = jia
age = 23
phone = 18040510023
151111 sqlite3数据库学习的更多相关文章
- SQLite3数据库的操作
数据库的操作 我们在这个项目中使用的是SQLITE3数据库软件. 通过使用SQLITE3进行创建数据库,创建表,插入记录,查询记录,更新记录,关闭数据库等操作来实现将相应的数据存入数据库中. 打开数据 ...
- 自己整理的一个访问SQLite3数据库的C++类
原文地址:自己整理的一个访问SQLite3数据库的C++类作者:vigra 近日,对SQLite3的使用进行了研究.真不愧是优秀的嵌入数据库,API接口也极其简捷.基本上只要使用以下几个接口就能完成数 ...
- Windows平台安装SQLite3数据库
Windows平台安装SQLite3数据库 话不多说,开始! 访问SQLite官网下载资源 在搜索引擎中键入SQLite3关键字寻找官网入口或直接点击此处前往SQLite官网,官网界面如下: 点击页面 ...
- 安卓使用SQlite3数据库无法id主键无法自动增加?不是的。
安卓使用SQlite3数据库无法id主键无法自动增加?不是的. 要这样写:id integer primary key ,要写integer而不是int所以会报错! http://blog.csdn. ...
- 关于SQL SERVER数据库学习总结
对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...
- 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)
原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...
- 《全唐诗》的sqlite3数据库
下载地址: http://pan.baidu.com/s/1b2mE54quantangshi.db是sqlite3数据库,包括2张表.index表:volume 列(整数,主键) 表示卷号,从1到9 ...
- [Android]AndroidInject增加sqlite3数据库映射注解(ORM)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...
- Cocos2dx使用wxsqlite开源加密SQLite3数据库
最近使用wxsqlite加密sqlite3数据库,刚开始折腾好几天,在xcode上一直编译不通过,后来在sqlite3.c找到配置,编译顺利通过,太激动了,哈哈,废话少说!总结一下android和io ...
随机推荐
- web项目学习之sitemesh
sitemesh主要有三个主要文件:sitemesh.xml,decorators.xml和做布局用的jsp页面. 一.sitemesh.xml 对于sitemesh.xml这个文件,官方文档上说它不 ...
- PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码
PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...
- Gwt 整合FusionCharts及封装搜狗地图时出现的问题
smartGwt 整合FusionCharts 把需要的.swf文件和FusionCharts.js放在war下面(路径就自己定了) 可以工程的html文件中引FusionCharts.js文件 也可 ...
- Amoeba实现mysql主从读写分离
Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...
- 亲测linux上安装mysql
1.rpm -ivh MySQL-server-5.6.19-linux_glibc2.5.x86_64.rpm(这是复制过来的,用Tab键自动补齐吧)2.rpm -ivh MySQL-client- ...
- css考核点整理(二)-css层叠机制
css层叠机制 外边距重叠就是margin-collapse. 在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距.这种合并外边距的方式被称为折叠,并且因 ...
- AIX系统上压缩与解压文件
压缩. 命令格式: #tar -cvf (或xvf)+文件名+设备 C:是本地到其他设备 x:是其他设备到本地 r:是追加,比如打包时,将其他文件追加进来使用该参数. t:显示tar包里的内容,但还原 ...
- jquery生产和开发的区别
今天说一下jquery生产和开发的区别,在我们下载jquery的时候,会有两个下载链接,一个是jquery.min.js .迷你版 (生产),另一个是 jquery.js .开发版 .不知道的人可能就 ...
- js实现图片自动切换效果。
js实现图片自动切换效果,简单实用,原谅我只是一只小菜鸟还在学大神天天写博文装逼. <script language="javascript"> setInterval ...
- 表达式:使用API创建表达式树(2)
一.BlockExpression类:表式一个包含可在其中定义变量的表达式序列的块.是一组表达式,类似于多个委托的 += 后的效果,其返回表达式是最后一个表达式决定.以下是BlockExpressio ...