[Sqlite]-->使用Java程序、cmd命令行来备份恢复Sqlite数据库

1,通过命令行使用.dump来备份成sql文件的方式

命令语句:

C:/sqlite/sqlite3 tim.db .dump >test.sql

.dump ?TABLE? ...      Dump the database in an SQL text format

If TABLE specified, only dump tables matching

LIKE pattern TABLE.
执行效果如下图所示,可以看到备份的sql文件内容:

2,通过.read 语句来恢复数据库

命令语句:

C:/sqlite/sqlite3 tim2.db “.read c:/sqlite/test.sql

.read FILENAME         Execute SQL in FILENAME
     执行效果如下图所示:

3,通过java代码实现对sqlite数据库的备份恢复操作

Java代码如下:

  1. import java.io.*;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7.  
  8. public class SqlitBackup {
  9.     public String db_source=\"jdbc:sqlite://c:/sqlite/tim.db\";
  10.     public String backup_file=\"c:/sqlite/alldbbackup.sql\";
  11.     public static Connection conn = null;
  12.     public static Statement stat = null;
  13.  
  14.     /**
  15.      * 构造函数初始化数据源*/
  16.     public SqlitBackup() {
  17.         // TODO Auto-generated constructor stub
  18.         try {
  19.             Class.forName(\"org.sqlite.JDBC\");
  20.             conn = DriverManager.getConnection(db_source);
  21.             stat = conn.createStatement();
  22.            
  23.         } catch (Exception e) {
  24.             // TODO Auto-generated catch block
  25.             e.printStackTrace();
  26.         }
  27.     }
  28.  
  29.     public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException {
  30.         // TODO Auto-generated method stub
  31.         SqlitBackup sqlite =new SqlitBackup();
  32.         // 1 ,录入初始化数据
  33.         sqlite.init_data();
  34.        
  35.         // 2,开始备份
  36.         sqlite.backup();
  37.        
  38.         // 3,删除原有的数据
  39.         sqlite.dropDb();
  40.        
  41.         // 4,通过备份文件恢复数据
  42.          sqlite.restore();
  43.        
  44.         // 5,关闭连接和数据源
  45.  
  46.         stat.close();
  47.         conn.close();
  48.     }
  49.    
  50.    
  51.  
  52.     /*
  53.      * 恢复sqlite数据库**/
  54.     private void restore() throws IOException, SQLException, ClassNotFoundException{
  55.         Runtime rt = Runtime.getRuntime();
  56.         String cmd=\"c:/sqlite/sqlite3 c:/sqlite/tim.db \\\".read \"+backup_file+\"\\\"\";
  57.         Process process = rt.exec( cmd);
  58.         Class.forName(\"org.sqlite.JDBC\");
  59.         conn = DriverManager.getConnection(db_source);
  60.         stat = conn.createStatement();
  61.         ResultSet rs2 = stat.executeQuery(\"select * from sqlite_master;\"); // 查询数据
  62.         System.out.println(\"4,数据已经恢复数据操作演示:\");
  63.         while (rs2.next()) { // 将查询到的数据打印出来
  64.             System.out.print(\"tbl_name = \" + rs2.getString(\"tbl_name\") + \", \"); // 列属性一 
  65.         }
  66.         rs2.close();
  67.     }
  68.        
  69.    
  70.     /*
  71.      * 删除表**/
  72.     private void dropDb (){
  73.         try {
  74.             stat.executeUpdate(\"DROP TABLE IF EXISTS COMPANY; \");
  75.             stat.executeUpdate(\"DROP TABLE IF EXISTS t1; \");
  76.             System.out.println(\"3,表已经删除成功\");
  77.            
  78.         } catch (SQLException e) {
  79.             // TODO Auto-generated catch block
  80.             e.printStackTrace();
  81.         }
  82.        
  83.     }
  84.    
  85.     /*
  86.      * 备份sqlite数据库*/
  87.     private void backup() throws SQLException, IOException{
  88.         Runtime rt = Runtime.getRuntime();
  89.         String cmd=\"c:/sqlite/sqlite3 c:/sqlite/tim.db .dump\";
  90.         Process process = rt.exec( cmd);
  91.         try{
  92.          InputStream in = process.getInputStream();// 控制台的输出信息作为输入流
  93.            InputStreamReader xx = new InputStreamReader(in, \"utf-8\");
  94.            // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
  95.            String inStr;
  96.            StringBuffer sb = new StringBuffer(\"\");
  97.            String outStr = null;
  98.            // 组合控制台输出信息字符串
  99.            BufferedReader br = new BufferedReader(xx);
  100.            while ((inStr = br.readLine()) != null) {
  101.             sb.append(inStr + \"\\r\\n\");
  102.            }
  103.            outStr = sb.toString();
  104.            System.out.println();
  105.            System.out.println(\"2,备份出来的sql文件内容是,outStr:\\r\"+outStr);
  106.  
  107.             // 要用来做导入用的sql目标文件:
  108.            FileOutputStream fout = new FileOutputStream(backup_file);
  109.            OutputStreamWriter writer = new OutputStreamWriter(fout, \"utf-8\");
  110.            writer.write(outStr);
  111.            writer.flush();
  112.            in.close();
  113.            xx.close();
  114.            br.close();
  115.            writer.close();
  116.            fout.close();
  117.           } catch (Exception e) {
  118.            e.printStackTrace();
  119.           }
  120.  
  121.        
  122.     }
  123.    
  124.  
  125.     private void init_data(){
  126.         /*初始化建立2张表,录入测试数据*/
  127.         try {
  128.             // System.out.println(init_sql1);
  129.             stat.executeUpdate(\"DROP TABLE IF EXISTS COMPANY; \");
  130.             stat.executeUpdate(\"CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));\");
  131.             stat.executeUpdate(\"INSERT INTO COMPANY VALUES(2,\‘Allen\‘,25,\‘Texas\‘,15000);\");
  132.             stat.executeUpdate(\"INSERT INTO COMPANY VALUES(3,\‘Teddy\‘,23,\‘Norway\‘,20000); \");
  133.            
  134.             stat.executeUpdate(\"DROP TABLE IF EXISTS t1; \");
  135.             stat.executeUpdate(\"CREATE TABLE t1(id int);\");
  136.             stat.executeUpdate(\"INSERT INTO t1 VALUES(1);\");
  137.             stat.executeUpdate(\"INSERT INTO t1 VALUES(2);\");
  138.  
  139.             // stat.executeUpdate(init_sql1);
  140.             ResultSet rs = stat.executeQuery(\"select * from COMPANY;\"); // 查询数据
  141.             System.out.println(\"1,初始化创建表结构录入数据操作演示:\");
  142.             while (rs.next()) { // 将查询到的数据打印出来
  143.                 System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性一
  144.                 System.out.println(\"salary = \" + rs.getString(\"salary\")); // 列属性二
  145.                
  146.             }
  147.             rs.close();
  148.         } catch (SQLException e) {
  149.             // TODO Auto-generated catch block
  150.             e.printStackTrace();
  151.         }
  152.            
  153.        
  154.     }
  155.  
  156. }

执行结果如下:

(1),初始化创建表结构录入数据操作演示:

name = Allen, salary = 15000

name = Teddy, salary = 20000

(2),备份出来的sql文件内容是,outStr:

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));

INSERT INTO "COMPANY" VALUES(2,‘Allen‘,25,‘Texas‘,15000);

INSERT INTO "COMPANY" VALUES(3,‘Teddy‘,23,‘Norway‘,20000);

CREATE TABLE t1(id int);

INSERT INTO "t1" VALUES(1);

INSERT INTO "t1" VALUES(2);

COMMIT;

(3),表已经删除成功

(4),数据已经恢复数据操作演示:

name = Allen, salary = 15000

name = Teddy, salary = 20000

时间: 2024-10-13 12:40:07

[Sqlite]-->使用Java程序、cmd命令行来备份恢复Sqlite数据库的相关文章

Java文件cmd命令行形式运行

首先你得安装好java jdk,配置好相应的环境变量. 你可以在c盘目录下建立一个txt文件. 把文件后缀名改成.java 然后打开命令行,win+r 写上cmd回车常用cmd命令: 文件列表 dir/w进入目录 cd 目录路径 (tab键盘有提示)  cd ..代表上级目录 目录结构打印 tree查看文件内容 type选择文件时可以用tab键来补全 当然,其实有更简洁的方法,就是去到你所要的目录下,按着shift键+右键菜单点击在此处打开命令窗口即可 运行javac编译命令,javac tes

java程序——从命令行接收多个数字,求和之后输出结果

命令行参数都是字符串,必须先将其转化为数字,才能相加.以下是流程图,源代码和输出结果. 流程图: 源代码: import java.util.Scanner; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan = new Scanner(System.in); // 创建Scanner类对象 int n; System.out.p

JAVA程序 从命令行接受多个数字,求和之后输出结果

源程序代码: public class sum{ public static void main(String[] args){ double[] a=new double[4]; a[0]=Double.parseDouble(args[0]); a[1]=Double.parseDouble(args[0]); a[2]=Double.parseDouble(args[0]); a[3]=Double.parseDouble(args[0]); double sum = 0; for(int

cmd命令行带参启动程序

cmd命令行带参启动程序 有一些程序不支持被直接启动,编写代码时,我们可以通过Process类来启动某个进程(某个软件),在不用代码调从而启动某个软件时,windows系统下,通常我们会用到cmd命令行来启动.本文将介绍 cmd常见的命令行启动参数. 1.cmd帮助 Win+R快捷打开运行窗口,输入cmd确定打开cmd.exe程序. cmd帮助:打开 cmd窗口中输入:cmd /?,回车.即可看到相应指令的含义. 2.cmd启动参数 使用cmd来启动某个应用程序,并向应用程序传入参数: 下面的指

如何让Qt程序能在cmd命令行下输出qDebug信息

若让Qt程序能在cmd命令行下输出qDebug()信息, 则在pro文件中增加: WIN32: CONFIG += console 即可. 启动qt程序时会弹出一个cmd框和一个ui框,就可以看到调试信息了.

Python安装后在CMD命令行下出现“应用程序无法启动.............”问题

问题存在之一:系统是刚刚重做的精简版服务器系统(阉割版) AN就是在阿里云上刚开的Windows Server 2008 系统上碰到的  吓尿了都 症状:            正常安装python环境后 进入cmd命令行中,执行python就报错,报错的大概内容就是 “应用程序无法启动....因为并行配置不正确...请执行....exe文件”  PS:卧槽,记不清了, 错误截图 也找不到了 下药:          1.面对CMD命令行报错,代开事件查看器 可以通过控制面板打开,也可以在cmd

java学习总结(16.05.08)在windows下使用cmd命令行对java文件进行编译和执行

windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量(jdk安装与环境变量的配置方法:http://blog.csdn.net/qq_32099621/article/details/51339868) 下面来说一下windows下如何使用cmd命令行来编译执行java文件 首先找到需要编译和执行的java文件 这里我要编译和执行这个java文件 按组合键win+r调出"运行",

Atitit.执行cmd 命令行 php

Atitit.执行cmd 命令行 php 1. 执行cmd 命令行,调用系统命令的基础 1 1.1. 实际执行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题,程序文件读取编码设置 1 1.4. 回显乱码 2 2. exec,system等函数调用系统命令 2 3. php.ini,关掉安全模式safe_mode = off 3 4. 参考 3 1. 执行cmd 命令行,调用系统命令的基础 1.1. 实际执行模式 Processmonitor 检查.得到.. PID: 115372,

Atitit.运行cmd 命令行 php

Atitit.运行cmd 命令行 php 1. 运行cmd 命令行,调用系统命令的基础 1 1.1. 实际运行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题.程序文件读取编码设置 1 1.4. 回显乱码 2 2. exec,system等函数调用系统命令 2 3. php.ini.关掉安全模式safe_mode = off 3 4. 參考 3 1. 运行cmd 命令行,调用系统命令的基础 1.1. 实际运行模式 Processmonitor 检查.得到.. PID: 115372,