我有一台备份数据库的服务器,并在每次发送数据库时发送给我... 顺便说一句,我不希望每次发送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读取每一行并插入新的数据库...但这里我有一些问题
所以,如果我使用这种方法,它需要很多变量和时间来进行插入查询... (现在我正在编写这个方法,但是如果有一个更简单的方法,那就更好了......我在想用所有的vars创建一个类并用它来创建sql插件..这样我就可以使用了不同表的相同功能(只需要为其他类扩展类))
修改的 在表中我有blob真实的int字符串值(总共29列)
答案 0 :(得分:1)
如果在同一个数据库中有两个表,则可以使用如下语句:
INSERT INTO messages1 SELECT * FROM messages2
如果您有两个不同的数据库文件,则可以ATTACH一个到另一个:
ATTACH DATABASE '...' AS toMerge
然后通过在表名前加上数据库名称来访问它:
INSERT INTO messages SELECT * FROM toMerge.messages