当前位置: 首页 > 编程日记 > 正文

【数据库】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&#xff08;ID:CSDNnews&#xff09;为期两年的苹果高通“诉讼之争”经历了各种推波助澜愈演愈烈&#xff0c;俨然到了最为关键的白热化阶段&#xff0c;没成想&#xff0c;在刚刚正式进入美国司法庭审环节的两天后却被强势叫停了&#xff01;4 月…

MQTT 协议 Client ID 长度不能超过23个字符

今天遇到一个MQTT的问题&#xff0c;MqttException: MQIsdp ClientId > 23 bytes ClientId的长度大于23时&#xff0c;无法链接MQTT服务器。 经过查看协议发现&#xff1a;客户端标识符(Client ID)是介于1和23个字符长度,客户端到服务器的唯一标识。它必须在搜有客户端连接到…

【数据库】适用于SQLite的SQL语句(一)

目录一、统计函数二、表TABLE1、创建表CREATE TABLE2、更改表ALTER TABLE3、删除表DROP TABLE三、分析表ANALYZE四、附加数据库 ATTACH DATABASE五、事务六、核心函数七、索引INDEX1、创建索引&#xff1a;CREATE INDEX2、查看索引&#xff1a;3、使用索引 INDEXED BY4、删除索…

谷歌大神Jeff Dean点赞网红博士论文:改进分布式共识机制 | 技术头条

作者 | Heidi Howard编译 | 刘静本文转载自公众号图灵TOPIA&#xff08;ID:turingtopia&#xff09;本文作者Heidi Howard&#xff0c;是剑桥大学计算机科学与技术系系统研究小组的分布式系统研究员。Heidi的研究领域一直围绕分布式系统中的一致性&#xff0c;容错性和性能并且…

使用Nginx做前端服务器时让Apache得到真实IP的方法

一&#xff1a;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里面默认都有&#xff0c;在nginx.conf使用include proxy.conf就可以 二&#xff1a;apa…

Hadoop生态圈-hive五种数据格式比较

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

华为巨资收购为云计算趟平道路?

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

【数据库】适用于SQLite的SQL语句(二)

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

从对ML一窍不通到斩获AT等special offer,拿下大厂算法岗就靠它了

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2019 年春招就要过去&#xff0c;秋招也就不远了。对于很多计算机专业的毕业生来说&#xff0c;大部分都还处于迷茫期&#xff0c;由于大学时的大部分时间都可能在划水&#xff0c;导致不知道现在如何准备就…

WWDC2018总结

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

make报错:/usr/bin/ld: cannot find -lXXX

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

for死循环、怪异字符串、两次return……Python冷知识(三)

本文转载自Python编程时光&#xff08;ID:Python-Time&#xff09;冷知识系列&#xff0c;已经更新至第三篇。前两篇传送门小明给你准备好了&#xff0c;还没阅读的可以学习一下。谈谈 Python 那些不为人知的冷知识&#xff08;一&#xff09;谈谈 Python 那些不为人知的冷知识…

snmpd 子代理模式编译测试

1、参考链接 1&#xff09;Net-snmp添加子代理示例https://blog.csdn.net/eyf0917/article/details/395466512、操作步骤1&#xff09;网络拷贝下面的文件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二十、公用表表达式&#xff08;CTE&#xff09;WITH1、普通表达式2、递归表达式二十三、VACUUM二十四、UPSERT十七、重新引索REINDEX REINDEX命令用于从头开始删除和重新创建索引。 十八、…

算法系列15天速成——第二天 七大经典排序【中】

首先感谢朋友们对第一篇文章的鼎力支持&#xff0c;感动中....... 今天说的是选择排序&#xff0c;包括“直接选择排序”和“堆排序”。 话说上次“冒泡排序”被快排虐了&#xff0c;而且“快排”赢得了内库的重用&#xff0c;众兄弟自然眼红&#xff0c;非要找快排一比高下。…

如何构建优质的推荐系统服务?| 技术头条

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

DispatcherServlet之HandlerAdapter的handle

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

【C++】C++11 STL算法(九):番外篇

1、如果获取指针或迭代器指向的类型 详见&#xff1a;C 11&#xff1a;如何获取一个指针或迭代器指向的类型&#xff1f; decltype(*std::declval<Pointer>())decltype&#xff1a;c11关键字&#xff0c;类型推导。详见&#xff1a;【C】C11新增关键字详解 std::declva…

IBM Tivoli Netview在企业网络管理中的实践(附视频)

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

【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科技大本营&#xff08;ID:rgznai100&#xff09;你们不是嫌弃世界冠军 OG 团队实力太水吗&#xff1f;“你行你上”的机会来了。4 月 14 日凌晨&#xff0c;OpenAI Five 以 2:0 击败了 DOTA 世界冠军团队 OG 引发热议。比赛当天&#xff0c;OpenAI 也宣布…

Java学习笔记二十五:Java面向对象的三大特性之多态

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

省钱之道--图解域域树域林根域的含义

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

AI算法在FPGA芯片上还有这种操作?| 技术头条

作者 | 杨付收出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;碾压与崛起AI算法的崛起并非一帆风顺的&#xff0c;现在的主流的NN类的卷积神经网络已经是第二波浪潮了&#xff0c;早在上个世纪80年代&#xff0c;源于仿生学&#xff0c;后又发展于概率学的早期AI算…

[Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型

自定义type 根据官方文档&#xff0c;新建TinyIntType类&#xff0c;集成Type&#xff0c;并重写getName&#xff0c;getSqlDeclaration&#xff0c;convertToPHPValue&#xff0c;getBindingType等方法。 TinyIntType.php完整代码&#xff1a; <?php namespace db\types; …

【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO

IO分两阶段&#xff1a; 1.数据准备阶段&#xff1a;在该阶段&#xff0c;根据是否等待数据准备&#xff0c;将IO分成阻塞和非阻塞&#xff1b; 2.内核空间复制回用户进程缓冲区阶段&#xff1a;在该阶段&#xff0c;只要程序需要等待复制完成&#xff0c;才能往下运行&#xf…

PowerDesigner 使用的一些技巧(转)

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

【网络编程】epoll 笔记

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

交通图网络太大太复杂,没法处理?DMVST-Net巧妙处理

参加「CTA 核心技术及应用峰会」&#xff0c;请扫码报名 ↑↑↑作者 | Huaxiu Yao, Fei Wu, Jintao Ke, Xianfeng Tang等译者 | 一步一步望着天上星编辑 | Jane出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导语】自 2018 年 6 月 DeepMind 发表论文“…

小程序这件事 撸起袖子加油干

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