合并具有相同结构的2数据库

时间:2013-07-29 17:49:30

标签: java database sqlite merge

我有一台备份数据库的服务器,并在每次发送数据库时发送给我... 顺便说一句,我不希望每次发送50mb的db我做了一个像

这样的小程序
delete from table where timestamp < ?

获取数据库的最后一个时间戳并保存以供下次备份使用 以这种方式,我只能发送最新的数据(几kb而不是50mb)

现在我想制作另一个程序来合并不同的备份...... 我被“卡在”插入部分......

    public static void merge(String toMerge) {
Connection c, c2 = null;
Statement stmt, stmt2 = null;

try {
    Class.forName("org.sqlite.JDBC");
    c = DriverManager.getConnection("jdbc:sqlite:merge.db");
    System.out.println("Opened merge.db database successfully");
    c.setAutoCommit(false);
    stmt = c.createStatement();
    c2 = DriverManager.getConnection("jdbc:sqlite:" + toMerge);
    System.out.println("Opened " + toMerge + " database successfully");
    stmt2 = c2.createStatement();

    ResultSet rs = stmt2.executeQuery("SELECT * FROM messages;");
    String sql;
    while (rs.next()) {
    sql = "INSERT INTO messages";
    stmt.executeUpdate(sql);
    }
    rs.close();
    stmt2.close();
    c2.close();

    stmt.close();
    c.commit();
    c.close();
} catch (Exception e) {
    System.err.println(e.getClass().getName() + ": " + e.getMessage());
    System.exit(0);
}
System.out.println("Operation done successfully");

}

我正在考虑打开2 db ... 1有一个标准名称“merge.db”(以这种方式我可以合并2+ db),另一个是要合并的... 使用这个方法我打开2连接(每个数据库1个)并从db2读取每一行并插入新的数据库...但这里我有一些问题

  1. db有很多cols所以我需要使用200 getInt / String / Float
  2. 我有NULL值
  3. 我有很多行
  4. 所以,如果我使用这种方法,它需要很多变量和时间来进行插入查询... (现在我正在编写这个方法,但是如果有一个更简单的方法,那就更好了......我在想用所有的vars创建一个类并用它来创建sql插件..这样我就可以使用了不同表的相同功能(只需要为其他类扩展类))

    修改的 在表中我有blob真实的int字符串值(总共29列)

1 个答案:

答案 0 :(得分:1)

如果在同一个数据库中有两个表,则可以使用如下语句:

INSERT INTO messages1 SELECT * FROM messages2

如果您有两个不同的数据库文件,则可以ATTACH一个到另一个:

ATTACH DATABASE '...' AS toMerge

然后通过在表名前加上数据库名称来访问它:

INSERT INTO messages SELECT * FROM toMerge.messages