设为首页 加入收藏

TOP

[Sqlite]--)使用Java程序、cmd命令行来备份恢复Sqlite数据库(一)
2015-07-24 10:16:12 来源: 作者: 【 】 浏览:2
Tags:Sqlite 使用 Java 程序 cmd 命令 备份 恢复 数据库

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.

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

命令语句:

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

.read FILENAME Execute SQL in FILENAME
\

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

Java代码如下:

    import java.io.*;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class SqlitBackup {
    public String db_source=\"jdbc:sqlite://c:/sqlite/tim.db\";
    public String backup_file=\"c:/sqlite/alldbbackup.sql\";
    public static Connection conn = null;
    public static Statement stat = null;

    /**
    * 构造函数初始化数据源*/
    public SqlitBackup() {
    // TODO Auto-generated constructor stub
    try {
    Class.forName(\"org.sqlite.JDBC\");
    conn = DriverManager.getConnection(db_source);
    stat = conn.createStatement();

    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    public static void main(String[] args) throws SQLException, IOException, ClassNotFoundException {
    // TODO Auto-generated method stub
    SqlitBackup sqlite =new SqlitBackup();
    // 1 ,录入初始化数据
    sqlite.init_data();

    // 2,开始备份
    sqlite.backup();

    // 3,删除原有的数据
    sqlite.dropDb();

    // 4,通过备份文件恢复数据
    sqlite.restore();

    // 5,关闭连接和数据源

    stat.close();
    conn.close();
    }



    /*
    * 恢复sqlite数据库**/
    private void restore() throws IOException, SQLException, ClassNotFoundException{
    Runtime rt = Runtime.getRuntime();
    String cmd=\"c:/sqlite/sqlite3 c:/sqlite/tim.db \\\".read \"+backup_file+\"\\\"\";
    Process process = rt.exec( cmd);
    Class.forName(\"org.sqlite.JDBC\");
    conn = DriverManager.getConnection(db_source);
    stat = conn.createStatement();
    ResultSet rs2 = stat.executeQuery(\"select * from sqlite_master;\"); // 查询数据
    System.out.println(\"4,数据已经恢复数据操作演示:\");
    while (rs2.next()) { // 将查询到的数据打印出来
    System.out.print(\"tbl_name = \" + rs2.getString(\"tbl_name\") + \", \"); // 列属性一
    }
    rs2.close();
    }


    /*
    * 删除表**/
    private void dropDb (){
    try {
    stat.executeUpdate(\"DROP TABLE IF EXISTS COMPANY; \");
    stat.executeUpdate(\"DROP TABLE IF EXISTS t1; \");
    System.out.println(\"3,表已经删除成功\");

    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    /*
    * 备份sqlite数据库*/
    private void backup() throws SQLException, IOException{
    Runtime rt = Runtime.getRuntime();
    String cmd=\"c:/sqlite/sqlite3 c:/sqlite/tim.db .dump\";
    Process process = rt.exec( cmd);
    try{
    InputStream in = process.getInputStream();// 控制台的输出信息作为输入流
    InputStreamReader xx = new InputStreamReader(in, \"utf-8\");
    // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
    String inStr;
    StringBuffer sb = new StringBuffer(\"\");
    String outStr = null;
    // 组合控制台输出信息字符串
    BufferedReader br = new BufferedReader(xx);
    while ((inStr = br.readLine()) != null) {
    sb.append(inStr + \"\\r\\n\");
    }
    outStr = sb.toString();
    System.out.println();
    System.out.println(\"2,备份出来的sql文件内容是,outStr:\\r\"+outStr);

    // 要用来做导入用的sql目标文件:
    FileOutputStream fout = new FileOutputStream(backup_file);
    OutputStreamWriter writer = new OutputStreamWriter(fout, \"utf-8\");
    writer.write(outStr);
    writer.flush();
    in.close();
    xx.close();
    br.close();
    writer.close();
    fout.close();
    } catch (Exception e) {
    e.printStackTrace();
    }


    }


    private void init_data(){
    /*初始化建立2张表,录入测试数据*/
    try {
    // System.out.println(init_sql1);
    stat.executeUpdat
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQLServer中事务日志已满的原因以.. 下一篇SQL优化--逻辑优化--视图重写与等..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C/C++ 类模板与模板 (2025-12-27 01:49:52)
·C语言 模板化<templ (2025-12-27 01:49:49)
·C/C++模板类模板与函 (2025-12-27 01:49:46)
·如何理解c语言指针和 (2025-12-27 01:19:11)
·为什么C标准库没有链 (2025-12-27 01:19:08)