我有一台服务器可以备份数据库并每次发送数据库时发送给我......顺便说一句,我不想每次发送 50mb 的数据库我做了一个小程序,比如
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 个连接(每个 db 1)并从 db2 中读取每一行并插入新的 db ......但这里我有一些问题
- db 有很多 cols,所以我需要使用 200 getInt/String/Float
- 我有 NULL 值
- 我有很多行
所以如果我使用这种方法,它需要大量的变量和时间来进行插入查询......(现在我正在编写这个方法,但如果有更简单的方法更好......我在想一个包含所有变量的类,并用它来创建 sql insert.. 这样我就可以对不同的表使用相同的函数(只需要为其他类扩展类))
在表中编辑 我有 blob 真正的 int 字符串值(总共 29 列)