【数据库】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数据库备份、导出方法汇总相关推荐

  1. oracle数据库导出数据6,Oracle数据库导入导出方法汇总

    Oracle数据库导入导出方法: 1.使用命令行: 数据导出: 1.将数据库TEST完全导出,用户名system密码manager导出到D:\daochu.dmp中 exp system/manage ...

  2. mysql 一次性导入数据库_Mysql 一次性备份导出/导入恢复所有数据库

    有木有遇到过这种情况?电脑或者服务器需要重装系统?可是你电脑上存着n多个网站的数据库,怎么办?把数据库文件夹拷贝出来,重装系统之后再拷回去?如果你使用了InnoDB引擎,恐怕那样做会出麻烦的,一个一个 ...

  3. NNM内置的数据库Solid定期备份配置方法

    NNM内置的数据库Solid会定期自动备份: 我们可以通过$OV_DB/analysis/default/solid.ini配置文件进行相关的配置: 停止备份 1. edit the file    ...

  4. PostgreSQL数据库修改sql表的方法汇总

    一,修改表 PostgreSQL 提供了一族命令用于修改现有表.  可以实现: 增加字段, 删除字段, 增加约束, 删除约束, 修改默认值, 重命名字段, 重命名表. 这些操作可以用:ALTER TA ...

  5. Delph 表格数据导出方法汇总

    一.DBGrid 导出csv procedure OutPutDBGridToCSV(AGrd:TDBGrid; AQuery: TQuery); var   i,ColNum: Integer;   ...

  6. 在.NET中excel导出方法汇总(收集)

    http://search.csdn.net/Expert/topic/2346/2346423.xml?temp=.3901941 http://search.csdn.net/Expert/top ...

  7. 大数据JavaWeb之MySQL基础---数据库设计、备份与还原

    数据库的设计: 多表之间的关系: 分类: 一对一(了解): 如:人和身份证. 分析:一个人只有一个身份证,一个身份证只能对应一个人. 一对多(多对一): 如:部门和员工. 分析:一个部门有多个员工,一 ...

  8. Python数据库sqlite3详解(python使用sqlite3数据库编程案例)

    python使用sqlite3数据库编程案例 提到数据库,大家第一时间想到的可能是 sql 数据库, 这种数据库非常好用,但是对于新手就不是很容易上手, 需要熟悉一段时间才可以大概掌握.这种数据库在大 ...

  9. exp备份导出时报EXP-00091: Exporting questionable statistics”错误

    问题现象      在对ORACLE数据库做exp备份导出时报EXP-00091: Exporting questionable statistics"错误:详情如下: EXP-00091: ...

最新文章

  1. 单片机怎么学?新手怎么快速学会单片机?
  2. 从事单片机工作,C语言要达到什么水平?
  3. golang 生成 指定大小 空白文件
  4. nacos集群的ap cp切换_阿里Nacos-配置-多环境
  5. C++中相对路径与绝对路径以及斜杠与反斜杠的区别 及 处理代码
  6. linux认令牌操作错误,验证令牌操作错误
  7. 2021年中国药店创新趋势报告
  8. drozer could not find java_Drozer-Android安全测试
  9. printf输出格式总结
  10. LayoutInflater 总结
  11. 意在寥廓观鸿蒙 什么意思,“滴滴寒露凋芙蓉”的意思及全诗出处和翻译赏析...
  12. yolov4-论文解析(3)
  13. 24基础指标、macd指标详解、macd指标分析
  14. java订单 并发_订单并发处理思路
  15. 手机电池电量测试软件,如何查看手机的电池电量以及如何测试电池电量
  16. 【风变编程】第五课笔记
  17. 关系数据库设计 函数依赖 逻辑蕴含
  18. 判断闰年的Matlab/Python函数
  19. wfGo C# winform 围棋系统 简介
  20. 抖音达人探店有用吗?算不算过时呢

热门文章

  1. 使用NetworkX绘制深度神经网络结构图(Python)
  2. autoware定位:gnss定位与lidar定位(四)
  3. C语言实现DES,3DES以及基于3DES的文件加密系统
  4. OpenCV中 Mat 按行或按列合并程序
  5. opencv c++ 寻找矩形框_基于Python的OpenCV人脸检测!OpenCV太强了!
  6. Udacity机器人软件工程师课程笔记(六)-样本搜索和找回-基于漫游者号模拟器-优化和样本找回
  7. 在Ubuntu 14.04 64位上使用libpcap进行抓包和解包
  8. java中JVM的原理【转】
  9. java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor错误
  10. 【转】 Android快速开发系列 10个常用工具类 -- 不错