[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
執行效果如下圖所示:
執行效果如下圖所示,可以看到備份的sql檔案內容:
執行效果如下圖所示:
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();
-
}
-
-
-
}
-
- }
執行結果如下:
(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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26230597/viewspace-1263263/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【備份恢復】從備份恢復資料庫資料庫
- Mongo 資料庫備份和恢復命令Go資料庫
- 【備份恢復】noarchive模式下使用增量備份恢復資料庫Hive模式資料庫
- 【備份恢復】閃回資料庫(五)RMAN 命令列閃回資料庫資料庫命令列
- 【Java】操作Sqlite資料庫JavaSQLite資料庫
- tore 命令來恢復備份
- SQLite 命令列客戶端 sqlite3 使用指南SQLite命令列客戶端
- 備份與恢復:polardb資料庫備份與恢復資料庫
- 使用sqlite3 模組操作sqlite3資料庫SQLite資料庫
- 使用Mysqldump備份和恢復MySQL資料庫MySql資料庫
- Java中CMD命令來備份mysql資料庫備份檔案出來為0位元組問題JavaMySql資料庫
- Oracle資料庫備份與恢復之三:OS備份/使用者管理的備份與恢復Oracle資料庫
- SQLite資料庫管理器:SQLPro for SQLite for MacSQLite資料庫Mac
- 達夢資料庫備份恢復資料庫
- postgresql備份與恢復資料庫SQL資料庫
- mongo資料庫備份與恢復Go資料庫
- 資料庫的備份與恢復資料庫
- Informix資料庫備份與恢復ORM資料庫
- 備份和恢復postgreSQL資料庫SQL資料庫
- Mysql資料庫備份及恢復MySql資料庫
- Android 中使用 SQLite 資料庫AndroidSQLite資料庫
- SQLite資料庫中rowid使用SQLite資料庫
- 使用備份的控制檔案恢復資料庫資料庫
- 資料庫資料的恢復和備份資料庫
- SQLite資料庫損壞及其修復探究SQLite資料庫
- sqlite操作--- oracle資料庫中的資料導進sqliteSQLiteOracle資料庫
- [Sqlite] Java使用jdbc連線Sqlite資料庫進行各種資料操作的詳細過程SQLiteJavaJDBC資料庫
- SQLPro for SQLite Mac(SQLite資料庫管理工具)SQLiteMac資料庫
- 高效操控SQLite資料庫,盡在SQLPro for SQLite for MacSQLite資料庫Mac
- db2 命令列備份和恢復DB2命令列
- rman資料庫全庫備份與恢復資料庫
- PostgreSql資料庫的備份和恢復SQL資料庫
- 直接透過備份恢復資料庫資料庫
- mysql的資料庫備份與恢復MySql資料庫
- oracle資料庫的備份與恢復Oracle資料庫
- 備份和恢復SQL Server資料庫SQLServer資料庫
- 資料庫備份與恢復技術資料庫
- pg_dump 備份,恢復資料庫資料庫