搜尋
首頁資料庫mysql教程[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. 2,通过.read 语句来

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代码如下:

    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.executeUpdate(\"DROP TABLE IF EXISTS COMPANY; \");
    stat.executeUpdate(\"CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));\");
    stat.executeUpdate(\"INSERT INTO COMPANY VALUES(2,\'Allen\',25,\'Texas\',15000);\");
    stat.executeUpdate(\"INSERT INTO COMPANY VALUES(3,\'Teddy\',23,\'Norway\',20000); \");

    stat.executeUpdate(\"DROP TABLE IF EXISTS t1; \");
    stat.executeUpdate(\"CREATE TABLE t1(id int);\");
    stat.executeUpdate(\"INSERT INTO t1 VALUES(1);\");
    stat.executeUpdate(\"INSERT INTO t1 VALUES(2);\");

    // stat.executeUpdate(init_sql1);
    ResultSet rs = stat.executeQuery(\"select * from COMPANY;\"); // 查询数据
    System.out.println(\"1,初始化创建表结构录入数据操作演示:\");
    while (rs.next()) { // 将查询到的数据打印出来
    System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性一
    System.out.println(\"salary = \" + rs.getString(\"salary\")); // 列属性二

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


    }

    }


    4,执行结果如下:

    (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


    5,PS:总结

    有的.dump出来之后只有如下三行记录:

    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    COMMIT;

    而没有如下的相应的create建表sql和insert插入数据的记录

    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);

    那是有可能在备份的时候指定的sqlite数据文件的路径不对,没有用全路径,要用全路径才能备份成功,如下所示的c:/sqlite/tim.db

      Runtime rt = Runtime.getRuntime();
      String cmd=\"c:/sqlite/sqlite3 c:/sqlite/tim.db .dump\";
      Process process = rt.exec( cmd);

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使用PHP和SQLite创建用户登录系统如何使用PHP和SQLite创建用户登录系统Jul 28, 2023 pm 09:27 PM

如何使用PHP和SQLite创建用户登录系统在当今互联网时代,用户登录系统是许多网站和应用程序的基本功能之一。本文将介绍如何使用PHP和SQLite创建一个简单而强大的用户登录系统。SQLite是一个嵌入式数据库引擎,它是一个零配置的、服务器端的数据库引擎。PHP是一种流行的服务器端脚本语言,它与SQLite结合使用可以创建出灵活且高效的用户登录系统。通过以

使用PHP和SQLite实现用户权限和访问控制使用PHP和SQLite实现用户权限和访问控制Jul 29, 2023 pm 02:33 PM

使用PHP和SQLite实现用户权限和访问控制在现代的web应用程序中,用户权限和访问控制是非常重要的一部分。通过正确的权限管理,可以确保只有经过授权的用户能够访问特定的页面和功能。在本文中,我们将学习如何使用PHP和SQLite来实现基本的用户权限和访问控制。首先,我们需要创建一个SQLite数据库来存储用户和其权限的信息。下面是简单的用户表和权限表的结构

PHP和SQLite:如何进行数据压缩和加密PHP和SQLite:如何进行数据压缩和加密Jul 29, 2023 am 08:36 AM

PHP和SQLite:如何进行数据压缩和加密在许多Web应用程序中,数据的安全性和存储空间的利用率是非常重要的考虑因素。PHP和SQLite是两个非常广泛使用的工具,本文将介绍如何使用它们来进行数据压缩和加密。SQLite是一种轻量级的嵌入式数据库引擎,它没有独立的服务器进程,而是直接与应用程序进行交互。PHP是一种流行的服务器端脚本语言,被广泛用于构建动态

创建一个简单的博客:使用PHP和SQLite创建一个简单的博客:使用PHP和SQLiteJun 21, 2023 pm 01:23 PM

随着互联网的发展,博客成为越来越多人分享自己生活、知识和想法的平台。如果你也想创建一个自己的博客,那么本文将介绍如何使用PHP和SQLite来创建一个简单的博客。确定需求在开始创建博客之前,我们需要确定自己想要实现的功能。例如:创建博客文章编辑博客文章删除博客文章显示博客文章列表显示博客文章详情用户认证和权限控制安装PHP和SQLite我们需要安装PHP和S

如何使用PHP和SQLite进行数据导入和导出如何使用PHP和SQLite进行数据导入和导出Jul 28, 2023 am 11:43 AM

如何使用PHP和SQLite进行数据导入和导出导入和导出数据是在开发网站或应用程序时常见的任务之一。使用PHP和SQLite,我们可以轻松地将数据从外部文件导入到SQLite数据库中,并从数据库导出数据到外部文件。本文将介绍如何使用PHP和SQLite进行数据导入和导出,并提供相应的代码示例。数据导入首先,我们需要准备一个包含要导入的数据的外部文件。这个文件

使用PHP和SQLite实现数据图表和可视化使用PHP和SQLite实现数据图表和可视化Jul 28, 2023 pm 01:01 PM

使用PHP和SQLite实现数据图表和可视化概述:随着大数据时代的到来,数据图表和可视化成为了展示和分析数据的重要方式。在本文中,将介绍如何使用PHP和SQLite实现数据图表和可视化的功能。以一个实例为例,展示如何从SQLite数据库中读取数据,并使用常见的数据图表库来展示数据。准备工作:首先,需要确保已经安装了PHP和SQLite数据库。如果没有安装,可

PHP和SQLite:如何处理长连接和断线重连PHP和SQLite:如何处理长连接和断线重连Jul 29, 2023 am 09:05 AM

PHP和SQLite:如何处理长连接和断线重连引言:在Web开发中,PHP和SQLite是两个常用的技术。然而,长连接和断线重连是在使用PHP和SQLite时经常遇到的一些问题。本文将介绍如何在PHP中处理长连接和断线重连的问题,并提供一些实例代码,以帮助开发者更好地理解和解决这些问题。一、长连接问题在使用PHP连接SQLite数据库时,长连接(Persis

如何使用PHP和SQLite进行全文搜索和索引策略如何使用PHP和SQLite进行全文搜索和索引策略Jul 29, 2023 pm 08:45 PM

如何使用PHP和SQLite进行全文搜索和索引策略引言:在现代的应用程序开发中,全文搜索功能在许多领域中都是不可或缺的。无论是在博客、新闻网站还是在电子商务平台上,用户都习惯使用关键字进行搜索。因此,为了提高用户体验并提供更好的搜索结果,我们需要使用适当的搜索和索引策略来提供全文搜索功能。在本文中,我们将探讨如何使用PHP和SQLite数据库来实现全文搜索和

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具