【数据库】sqlite3数据库备份、导出方法汇总
【数据库】sqlite3常用命令及SQL语句
目录
- 1、直接拷贝数据库
- 2、使用.backup .clone
- 1)交互式
- 2)脚本
- 3、导出到csv文件中(其它格式类似)
- 1)交互式
- 2)脚本
- 3)导出成其它格式汇总
- a> .mode ascii
- b> .mode column
- c> .mode html
- d> .mode insert
- e> .mode line
- f> .mode list
- g> .mode tabs
- h> .mode tcl
- 4、使用SQL语句:VACUUM INTO
- 1)交互式
- 2)脚本
- 3)在SQLite提供的C接口中使用SQL语句:vacuum into
- 5、使用SQLite C接口sqlite3_backup*
1、直接拷贝数据库
这是最直接、最简单的方法:在linux下用cp直接拷贝数据库,win下直接复制粘贴。
2、使用.backup .clone
1)交互式
在终端上执行[ sqlite3 数据库文件名],进入sqlite环境,然后可以使用.backup .clone备份或克隆数据库。(注:如果新数据库已经存在,克隆时会报错,而备份不会)
$ sqlite3
sqlite> .help
.backup ?DB? FILE Backup DB (default "main") to FILE
...
.clone NEWDB Clone data into NEWDB from the existing database
...
2)脚本
可以使用shell脚本执行,这样就能在程序中调用脚本,自动执行。
$ cat sqlte3Backup.sh
#!/bin/bash
oldDB=$1
newDB=$2
echo ".backup $newDB" | sqlite3 $oldDB
3、导出到csv文件中(其它格式类似)
可以使用select筛选出指定信息,保存到csv中
1)交互式
$ sqlite3 数据库文件名
sqlite> .headers on // 显示列表头,否则在csv中没有表头
sqlite> .mode csv // 选择csv(逗号分隔值类型)
sqlite> .once test.csv // 将下面的SQL语句输出保存到文件中,只保存一次,// 第二个SQL会恢复输出到终端。
sqlite> SELECT * FROM 表;
sqlite> .exit;
2)脚本
$ cat sqlte3ToCSV.sh
#!/bin/bash
fileName=$1
dbName=$2
echo ".headers on
.mode csv
.once $fileName
select * from test;
.exit
" | sqlite3 $dbName
3)导出成其它格式汇总
a> .mode ascii
id^_name^_age^^1^_XiaoHong^_18^^2^_XiaoMing^_19^^
b> .mode column
id name age
---------- ---------- ----------
1 XiaoHong 18
2 XiaoMing 19
c> .mode html
<TR><TH>id</TH>
<TH>name</TH>
<TH>age</TH>
</TR>
<TR><TD>1</TD>
<TD>XiaoHong</TD>
<TD>18</TD>
</TR>
<TR><TD>2</TD>
<TD>XiaoMing</TD>
<TD>19</TD>
</TR>
d> .mode insert
INSERT INTO "table"(id,name,age) VALUES(1,'XiaoHong',18);
INSERT INTO "table"(id,name,age) VALUES(2,'XiaoMing',19);
e> .mode line
id = 1name = XiaoHongage = 18id = 2name = XiaoMingage = 19
f> .mode list
id|name|age
1|XiaoHong|18
2|XiaoMing|19
g> .mode tabs
id name age
1 XiaoHong 18
2 XiaoMing 19
h> .mode tcl
"id" "name" "age"
"1" "XiaoHong" "18"
"2" "XiaoMing" "19"
4、使用SQL语句:VACUUM INTO
注意:这种方法对SQLite版本有要求,SQLite 版本至少3.27.0 (2019-02-07)
1)交互式
$ sqlite3 数据库文件名
sqlite> VACUUM INTO 新数据库文件名 // VACUUM 后面省略了数据库名,默认是main, 使用.database查看
sqlite> .exit;
2)脚本
$ cat sqlte3Vacuum.sh
#!/bin/bash
oldDB=$1
newDB=$2
echo "vacuum into '$newDB'" | sqlite3 $oldDB
3)在SQLite提供的C接口中使用SQL语句:vacuum into
注意:如果新数据库存在,使用VACUUM INTO会报错
error: output file already exists!
测试程序如下:
int main()
{sqlite3 *pDB;int rc = sqlite3_open("test.db", &pDB);if( rc==SQLITE_OK ){printf("open test.db OK!\n");char *sqlVacuum = "VACUUM INTO 'new.db';";char *errMsg = 0;rc = sqlite3_exec(pDB, sqlVacuum, NULL, 0, &errMsg);if( rc!=SQLITE_OK ){printf("VACUUM INTO new.db error: %s!\n", errMsg);sqlite3_free(errMsg);} else {printf("VACUUM INTO new.db OK!\n");}} else {printf("open test.db error!\n");}sqlite3_close(pDB);return 0;
}
5、使用SQLite C接口sqlite3_backup*
涉及的接口如下:
sqlite3_backup_init()
sqlite3_backup_step()
sqlite3_backup_remaining()
sqlite3_backup_pagecount()
sqlite3_backup_finish()
测试程序如下:
#include <stdio.h>
#include <sqlite3.h>void progress(int left, int total){printf("total = %d; left = %d\n", total, left);
}int backupDb(sqlite3 *pDb, const char *zFilename, void(*xProgress)(int, int) ){int rc;sqlite3 *pFile;sqlite3_backup *pBackup;rc = sqlite3_open(zFilename, &pFile);if( rc==SQLITE_OK ){pBackup = sqlite3_backup_init(pFile, "main", pDb, "main");if( pBackup ){do {rc = sqlite3_backup_step(pBackup, 5);xProgress(sqlite3_backup_remaining(pBackup),sqlite3_backup_pagecount(pBackup));
// if( rc==SQLITE_OK || rc==SQLITE_BUSY || rc==SQLITE_LOCKED ){
// sqlite3_sleep(250);
// }} while( rc==SQLITE_OK || rc==SQLITE_BUSY || rc==SQLITE_LOCKED );(void)sqlite3_backup_finish(pBackup);}rc = sqlite3_errcode(pFile);}(void)sqlite3_close(pFile);return rc;
}
int main(){sqlite3 *pDB;int rc = sqlite3_open("test.db", &pDB);if( rc==SQLITE_OK ){printf("open test.db OK!\n");rc = backupDb(pDB, "new.db", progress);if( rc==SQLITE_OK ){printf("backupDb new.db OK!\n");} else {printf("backupDb new.db error!\n");}} else {printf("open test.db error!\n");}sqlite3_close(pDB);return 0;
}
相关文章:

高通与苹果宣布“复合”,英特尔黯然退场 | 极客头条
作者 | 郭芮转载自公众号CSDN(ID:CSDNnews)为期两年的苹果高通“诉讼之争”经历了各种推波助澜愈演愈烈,俨然到了最为关键的白热化阶段,没成想,在刚刚正式进入美国司法庭审环节的两天后却被强势叫停了!4 月…
MQTT 协议 Client ID 长度不能超过23个字符
今天遇到一个MQTT的问题,MqttException: MQIsdp ClientId > 23 bytes ClientId的长度大于23时,无法链接MQTT服务器。 经过查看协议发现:客户端标识符(Client ID)是介于1和23个字符长度,客户端到服务器的唯一标识。它必须在搜有客户端连接到…

【数据库】适用于SQLite的SQL语句(一)
目录一、统计函数二、表TABLE1、创建表CREATE TABLE2、更改表ALTER TABLE3、删除表DROP TABLE三、分析表ANALYZE四、附加数据库 ATTACH DATABASE五、事务六、核心函数七、索引INDEX1、创建索引:CREATE INDEX2、查看索引:3、使用索引 INDEXED BY4、删除索…

谷歌大神Jeff Dean点赞网红博士论文:改进分布式共识机制 | 技术头条
作者 | Heidi Howard编译 | 刘静本文转载自公众号图灵TOPIA(ID:turingtopia)本文作者Heidi Howard,是剑桥大学计算机科学与技术系系统研究小组的分布式系统研究员。Heidi的研究领域一直围绕分布式系统中的一致性,容错性和性能并且…

使用Nginx做前端服务器时让Apache得到真实IP的方法
一:nginx.conf proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 其实这个proxy.conf里面默认都有,在nginx.conf使用include proxy.conf就可以 二:apa…

Hadoop生态圈-hive五种数据格式比较
Hadoop生态圈-hive五种数据格式比较 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。

华为巨资收购为云计算趟平道路?
华为巨资收购为云计算趟平道路?<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />文 小刀马众所周知,华为在全球的技术能力和市场地位也是有目共睹的,这是华为多少年兢兢业业守成的一种回报。更…

【数据库】适用于SQLite的SQL语句(二)
目录九、视图VIEW1、创建视图2、删除视图十、虚拟表1、创建虚拟表2、删除虚拟表十一、时间和日期的函数十二、分析和故障排除十三、SQL语句中的表达式1、运算符2、字面值3、参数十四、插入 INSERT十五、SQLite关键字十六、解决冲突 ON CONFLICT九、视图VIEW 视图是基于真实数据…

从对ML一窍不通到斩获AT等special offer,拿下大厂算法岗就靠它了
整理 | 一一出品 | AI科技大本营(ID:rgznai100)2019 年春招就要过去,秋招也就不远了。对于很多计算机专业的毕业生来说,大部分都还处于迷茫期,由于大学时的大部分时间都可能在划水,导致不知道现在如何准备就…

WWDC2018总结
本人的第一篇文章(现在写文章是为了提升自己的语句表达能力) 欢迎大家观看本文章,是略微总结一下WWDC2018发布的iOS12的新东西 iOS12略微总结(持续更新。。。) iOS12 变化 iOS 12新功能汇总(后面希望可以上…

make报错:/usr/bin/ld: cannot find -lXXX
在编译php时报错如下: # make 。。。 /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] Error 1 问题原因: 该问题一般是由于ld在进行库的连接时找不到库文件所致: 解决方案: 出现该…

for死循环、怪异字符串、两次return……Python冷知识(三)
本文转载自Python编程时光(ID:Python-Time)冷知识系列,已经更新至第三篇。前两篇传送门小明给你准备好了,还没阅读的可以学习一下。谈谈 Python 那些不为人知的冷知识(一)谈谈 Python 那些不为人知的冷知识…

snmpd 子代理模式编译测试
1、参考链接 1)Net-snmp添加子代理示例https://blog.csdn.net/eyf0917/article/details/395466512、操作步骤1)网络拷贝下面的文件http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mib_module/NET-SNMP-TUTORIAL-MIB.txthttp://www.net-snmp.org/t…

【数据库】适用于SQLite的SQL语句(三)
目录十七、重新引索REINDEX十八、查询SELECT1、简单查询2、复合查询十九、更新UPDATE二十、公用表表达式(CTE)WITH1、普通表达式2、递归表达式二十三、VACUUM二十四、UPSERT十七、重新引索REINDEX REINDEX命令用于从头开始删除和重新创建索引。 十八、…

算法系列15天速成——第二天 七大经典排序【中】
首先感谢朋友们对第一篇文章的鼎力支持,感动中....... 今天说的是选择排序,包括“直接选择排序”和“堆排序”。 话说上次“冒泡排序”被快排虐了,而且“快排”赢得了内库的重用,众兄弟自然眼红,非要找快排一比高下。…

如何构建优质的推荐系统服务?| 技术头条
作者丨gongyouliu来源 | 大数据与人工智能(ID:ai-big-data)任何一个优质的软件服务都必须考虑高性能、高可用(HighAvailability)、可伸缩、可拓展、安全性等5大核心要素,推荐系统也不例外。所以,我们会围绕这5个点来说明ÿ…

DispatcherServlet之HandlerAdapter的handle
2019独角兽企业重金招聘Python工程师标准>>> 注:SpringFramework的版本是4.3.x。 1.DispatcherServlet的doService方法时序图 图1 DispatcherServlet的doService方法时序图 2.AnnotationMethodHandlerAdapter的handle方法时序图 图2的原图在Gith…

【C++】C++11 STL算法(九):番外篇
1、如果获取指针或迭代器指向的类型 详见:C 11:如何获取一个指针或迭代器指向的类型? decltype(*std::declval<Pointer>())decltype:c11关键字,类型推导。详见:【C】C11新增关键字详解 std::declva…

IBM Tivoli Netview在企业网络管理中的实践(附视频)
今天我为大家介绍的一款高端网管软件名叫IBM Tivoli NetView,他主要关注是IBM整理解决方案的用户,分为Unix平台和Windwos平台两种,这里视频演示的是基于Windows 2003 server下的IBM Tivoli NetView 6.1在企业中的部署应用,可以为大…

【C++】C++11 STL算法(十):使用STL实现排序算法
一、快速排序 1、适用于c11版本 template <class ForwardIt> void quicksort(ForwardIt first, ForwardIt last) {if(first last) return;auto pivot *std::next(first, std::distance(first,last)/2);ForwardIt middle1 std::partition(first, last, [pivot](con…

“你行你上”:有本事跟OpenAI Five打一把DOTA?| 极客头条
整理 | 一一出品 | AI科技大本营(ID:rgznai100)你们不是嫌弃世界冠军 OG 团队实力太水吗?“你行你上”的机会来了。4 月 14 日凌晨,OpenAI Five 以 2:0 击败了 DOTA 世界冠军团队 OG 引发热议。比赛当天,OpenAI 也宣布…

Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态; 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现。 现实中,比如我们按下 F1 键这个动作&am…

省钱之道--图解域域树域林根域的含义
省钱之道--图解域域树域林根域的含义 标签:域 域林 图解域域树域林根域的含义 域树 根域原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://angerfire.blog.51cto.com/198455/1…

AI算法在FPGA芯片上还有这种操作?| 技术头条
作者 | 杨付收出品 | CSDN(ID:CSDNnews)碾压与崛起AI算法的崛起并非一帆风顺的,现在的主流的NN类的卷积神经网络已经是第二波浪潮了,早在上个世纪80年代,源于仿生学,后又发展于概率学的早期AI算…

[Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型
自定义type 根据官方文档,新建TinyIntType类,集成Type,并重写getName,getSqlDeclaration,convertToPHPValue,getBindingType等方法。 TinyIntType.php完整代码: <?php namespace db\types; …

【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO
IO分两阶段: 1.数据准备阶段:在该阶段,根据是否等待数据准备,将IO分成阻塞和非阻塞; 2.内核空间复制回用户进程缓冲区阶段:在该阶段,只要程序需要等待复制完成,才能往下运行…

PowerDesigner 使用的一些技巧(转)
-> Generate Database ,在弹出的 Database Generation 对话框中选择脚本存取路径及脚本文件名称 3、点击确定后生成数据库建库脚本(*.sql) 二、生成脚本时报错: Column Code maxinum lenght 原因:字段超过15字符就发生错误&…

【网络编程】epoll 笔记
一、最大连接数 1、select select在单进程中最多同时监听1024个fd;要想实现百万并发需要一千个进程,并且性能会很差、内存消耗巨大。所以select只适用于连接数在一千个以下的场景。 2、epoll epoll本身不限制连接数,但是连接数会受到系统…

交通图网络太大太复杂,没法处理?DMVST-Net巧妙处理
参加「CTA 核心技术及应用峰会」,请扫码报名 ↑↑↑作者 | Huaxiu Yao, Fei Wu, Jintao Ke, Xianfeng Tang等译者 | 一步一步望着天上星编辑 | Jane出品 | AI科技大本营(id:rgznai100)【导语】自 2018 年 6 月 DeepMind 发表论文“…

小程序这件事 撸起袖子加油干
写在前面的话: 初次接触小程序,便被它开发的简易与便捷所吸引。总按耐不住对未知的探索欲望,于是乎撸起袖子来干一个吧。附:小程序开发文档 项目介绍 艺龙酒店小程序实践 使用<swiper>标签实现网页轮播图的效果,…