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

引子:

1,Sqlite在Windows、Linux 和 Mac OS X 上的安装过程

2,嵌入式数据库的安装、建库、建表、更新表结构以及数据导入导出等等详细过程记录

3,嵌入式数据库事务理解以及实例操作

4,数据迁移备份--从低版本3.6.2到高版本3.8.6

5,Java使用jdbc连接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.DriverManager.ResultSet.sqlException.Statement;

  4. publicclass sqlitBackup {
  5. publicString db_source=\"jdbc:sqlite://c:/sqlite/tim.db\";
  6. publicString backup_file"c:/sqlite/alldbbackup.sql\"publicstatic Connection conn=nullpublicstatic Statement stat;

  7. /*
  8. *构造函数初始化数据源/
  9. publicsqlitBackup(){
  10. // TODO Auto-generated constructor stub
  11. try {
  12. Class.forName"org.sqlite.JDBC\");
  13. conn=DriverManager.getConnection(db_source;
  14. stat=conn.createStatement;

  15. } catch(Exception e-generated catch block
  16. e.printStackTrace;
  17. }
  18. }

  19. publicstatic void main(String[]args)throws sqlException,IOException-generated method stub
  20. sqlitBackup sqlite=new sqlitBackup;
  21. // 1 ,录入初始化数据
  22. sqlite.init_data;

  23. // 2,开始备份
  24. sqlite.backup;

  25. // 3,删除原有的数据
  26. sqlite.dropDb;

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

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

  30. stat.close;
  31. }



  32. /*恢复sqlite数据库/
  33. private void restore)throws IOExceptionsqlException=Runtime.getRuntime;
  34. String cmd"c:/sqlite/sqlite3 c:/sqlite/tim.db \\\".read \"+backup_file+\"\"\";
  35. Process process=rt.exec(cmd;
  36. Class;
  37. ResultSet rs2=stat.executeQuery"select * from sqlite_master;\";// 查询数据
  38. Systemout.println"4,数据已经恢复数据操作演示:\"while(rs2.next){ // 将查询到的数据打印出来
  39. System.print"tbl_name = \"+rs2.getString"tbl_name\"+\",\";// 列属性
  40. }
  41. rs2;
  42. }


  43. /*删除/
  44. private void dropDb{
  45. try {
  46. stat.executeUpdate"DROP TABLE IF EXISTS COMPANY; \""DROP TABLE IF EXISTS t1; \";
  47. System"3,表已经删除成功\"(sqlException e;
  48. }

  49. }

  50. /*备份sqlite数据库/
  51. private void backup"c:/sqlite/sqlite3 c:/sqlite/tim.db .dump\";
  52. try{
  53. InputStreamin=process.getInputStream;//控制台的输出信息作为输入流
  54. InputStreamReader xx=new InputStreamReader"utf-8\";
  55. // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
  56. String inStr;
  57. StringBuffer sb=new StringBuffer;
  58. String outStr;
  59. // 组合控制台输出信息字符串
  60. BufferedReader br=new BufferedReader(xx(inStr=br.readLine!){
  61. sb.append"\\r\\n\";
  62. }
  63. outStr=sb.toString"2,备份出来的sql文件内容是,outStr:\\r\"+outStr;

  64. // 要用来做导入用的sql目标文件
  65. FileOutputStream fout=new FileOutputStream(backup_file;
  66. OutputStreamWriter writer=new OutputStreamWriter(fout;
  67. writer.write(outStr.flush;
  68. xx;
  69. br;
  70. fout;
  71. } catch){
  72. e;
  73. }


  74. }


  75. private void init_data{
  76. /*初始化建立2张表,录入测试数据/
  77. try {
  78. // System(init_sql1"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); \";

  79. stat"CREATE TABLE t1(id int);\""INSERT INTO t1 VALUES(1);\""INSERT INTO t1 VALUES(2);\";

  80. // stat;
  81. ResultSet rs"select * from COMPANY;\""1,初始化创建表结构录入数据操作演示:\"(rs"name = \"+rs"name\";// 列属性
  82. System"salary = \""salary\";// 列属性

  83. }
  84. rs;
  85. }


  86. }

  87. }


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

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

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

CREATE TABLE t1(id int);

INSERT INTO "t1" VALUES(1);

INSERT INTO "t1" VALUES(2);

COMMIT;

(3),表已经删除成功

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

name = Allen,salary = 20000


5,PS:总结

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

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
COMMIT;

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

CREATE TABLE COMPANY(ID INT NOT NULL,2));
INSERT INTO "COMPANY" VALUES(2,15000);
INSERT INTO "COMPANY" VALUES(3,20000);
CREATE TABLE t1(id int);
INSERT INTO "t1" VALUES(1);
INSERT INTO "t1" VALUES(2);

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

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

相关文章

安装 在Windows上安装SQLite。 访问官网下载下Precompliled Binaries for Windows的两个压缩包。 创建s...
一、安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Windows下的包下...
实例: 会员信息管理 功能:1.查看数据库 2.清空数据库 3.增加会员 4.删除会员 5.更新会员 6.查找会员  ...
关于SQLite SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整...