【数据库】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;
}
【数据库】sqlite3数据库备份、导出方法汇总相关推荐
- oracle数据库导出数据6,Oracle数据库导入导出方法汇总
Oracle数据库导入导出方法: 1.使用命令行: 数据导出: 1.将数据库TEST完全导出,用户名system密码manager导出到D:\daochu.dmp中 exp system/manage ...
- mysql 一次性导入数据库_Mysql 一次性备份导出/导入恢复所有数据库
有木有遇到过这种情况?电脑或者服务器需要重装系统?可是你电脑上存着n多个网站的数据库,怎么办?把数据库文件夹拷贝出来,重装系统之后再拷回去?如果你使用了InnoDB引擎,恐怕那样做会出麻烦的,一个一个 ...
- NNM内置的数据库Solid定期备份配置方法
NNM内置的数据库Solid会定期自动备份: 我们可以通过$OV_DB/analysis/default/solid.ini配置文件进行相关的配置: 停止备份 1. edit the file ...
- PostgreSQL数据库修改sql表的方法汇总
一,修改表 PostgreSQL 提供了一族命令用于修改现有表. 可以实现: 增加字段, 删除字段, 增加约束, 删除约束, 修改默认值, 重命名字段, 重命名表. 这些操作可以用:ALTER TA ...
- Delph 表格数据导出方法汇总
一.DBGrid 导出csv procedure OutPutDBGridToCSV(AGrd:TDBGrid; AQuery: TQuery); var i,ColNum: Integer; ...
- 在.NET中excel导出方法汇总(收集)
http://search.csdn.net/Expert/topic/2346/2346423.xml?temp=.3901941 http://search.csdn.net/Expert/top ...
- 大数据JavaWeb之MySQL基础---数据库设计、备份与还原
数据库的设计: 多表之间的关系: 分类: 一对一(了解): 如:人和身份证. 分析:一个人只有一个身份证,一个身份证只能对应一个人. 一对多(多对一): 如:部门和员工. 分析:一个部门有多个员工,一 ...
- Python数据库sqlite3详解(python使用sqlite3数据库编程案例)
python使用sqlite3数据库编程案例 提到数据库,大家第一时间想到的可能是 sql 数据库, 这种数据库非常好用,但是对于新手就不是很容易上手, 需要熟悉一段时间才可以大概掌握.这种数据库在大 ...
- exp备份导出时报EXP-00091: Exporting questionable statistics”错误
问题现象 在对ORACLE数据库做exp备份导出时报EXP-00091: Exporting questionable statistics"错误:详情如下: EXP-00091: ...
最新文章
- 单片机怎么学?新手怎么快速学会单片机?
- 从事单片机工作,C语言要达到什么水平?
- golang 生成 指定大小 空白文件
- nacos集群的ap cp切换_阿里Nacos-配置-多环境
- C++中相对路径与绝对路径以及斜杠与反斜杠的区别 及 处理代码
- linux认令牌操作错误,验证令牌操作错误
- 2021年中国药店创新趋势报告
- drozer could not find java_Drozer-Android安全测试
- printf输出格式总结
- LayoutInflater 总结
- 意在寥廓观鸿蒙 什么意思,“滴滴寒露凋芙蓉”的意思及全诗出处和翻译赏析...
- yolov4-论文解析(3)
- 24基础指标、macd指标详解、macd指标分析
- java订单 并发_订单并发处理思路
- 手机电池电量测试软件,如何查看手机的电池电量以及如何测试电池电量
- 【风变编程】第五课笔记
- 关系数据库设计 函数依赖 逻辑蕴含
- 判断闰年的Matlab/Python函数
- wfGo C# winform 围棋系统 简介
- 抖音达人探店有用吗?算不算过时呢
热门文章
- 使用NetworkX绘制深度神经网络结构图(Python)
- autoware定位:gnss定位与lidar定位(四)
- C语言实现DES,3DES以及基于3DES的文件加密系统
- OpenCV中 Mat 按行或按列合并程序
- opencv c++ 寻找矩形框_基于Python的OpenCV人脸检测!OpenCV太强了!
- Udacity机器人软件工程师课程笔记(六)-样本搜索和找回-基于漫游者号模拟器-优化和样本找回
- 在Ubuntu 14.04 64位上使用libpcap进行抓包和解包
- java中JVM的原理【转】
- java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor错误
- 【转】 Android快速开发系列 10个常用工具类 -- 不错