这个问题与Java开发有关。 我在桌面应用程序中使用嵌入式jdbc:derby数据库,我希望用户随时备份(或者甚至自动化)。
问题: 不能/不希望覆盖现有的db备份文件;相反,我希望通过以可预测的顺序更改名称来保留x个备份。数据库只包含一个表。
我感谢所有帮助我的努力!先感谢您! :)
到目前为止我所拥有的是:
public static boolean backupDatabase() throws SQLException {
status = false;
f = new File("backup.db");
n = new File("backup.dbold");
status = f.exists();
if (status){
f.renameTo(n);
}
try {
statement = connection.createStatement();
status = statement.execute("CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE(null,'TREATMENTS','./backup.db',null,null,null)");
System.out.println("Database Backed Up Successfully.");
} catch (SQLException err) {
System.out.println ("SQL Error: " + err.getMessage());
}
statement.closeOnCompletion();
connection.close();
return status;
}
[UPDATE]
我大部分时间都在这里。以下代码运行没有错误和预期。如果有人对此修复程序感兴趣(以供将来参考),那么它与其他一些执行基本数据库操作的方法一起:
package org.redbrick.medright;
import java.io.IOException;
import java.nio.file.Files;
import static java.nio.file.StandardCopyOption.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.*;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author RedBrick
*/
public class DatabaseOps {
private static int rowsAffected;
private static boolean status;
private static boolean success;
private static Connection con;
private static Statement statement;
private static CallableStatement freeze;
private static CallableStatement backup;
private static CallableStatement unfreeze;
private static CallableStatement checkDB;
private static Connection connection;
private static Path currentPath = null;
private static Path newPath = null;
private static LocalDateTime now;
private static TemporalUnit minutes;
private static String filetime;
public static boolean runDbaseChecks (Connection connection) throws SQLException {
try {
// statement = connection.createStatement ();
checkDB = connection.prepareCall ( "VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('APP', 'TREATMENTS')" );
checkDB.execute ();
checkDB.close ();
System.out.println ( "Table Treatements checked Successfully." );
} catch ( SQLException err ) {
System.out.println ( "SQL Error: " + err.getMessage () );
}
return success;
}
public static boolean backupDatabase (Connection connection) throws SQLException {
try {
freeze = connection.prepareCall ( "CALL SYSCS_UTIL.SYSCS_FREEZE_DATABASE()" );
freeze.execute ();
freeze.close ();
backup = connection.prepareCall ( "CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)" );
backup.setString ( 1, "./DBaseBackups" );
backup.execute ();
backup.close ();
unfreeze = connection.prepareCall ( "CALL SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE()" );
unfreeze.execute ();
unfreeze.close ();
} catch ( Exception err ) {
System.out.println ( "Error backing up database " + err.getMessage () + err.getCause () );
}
return status;
}
public static boolean backupDatabaseTable (Connection connection) throws SQLException {
try {
status = false;
currentPath = Paths.get ( "./backup.db" );
status = Files.exists ( currentPath );
if ( status ) {
now = LocalDateTime.now ();
now = now.truncatedTo ( ChronoUnit.MINUTES );
filetime = now.toString ();
newPath = Paths.get ( "./backup. " + filetime + ".db" );
try {
Files.move ( currentPath, newPath, REPLACE_EXISTING );
System.out.println ( "DBase Backup File Successfully Moved" );
} catch ( IOException ex ) {
Logger.getLogger ( DatabaseOps.class.getName () ).log ( Level.SEVERE, null, ex );
}
} else {
statement = connection.createStatement ();
status = statement.execute ( "CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE(null,'TREATMENTS','./backup.db',null,null,null)" );
System.out.println ( "Database Table Backed Up Successfully." );
}
} catch ( SQLException err ) {
System.out.println ( "SQL Error: " + err.getMessage () );
}
statement.closeOnCompletion ();
return status;
}
public static boolean restoreDatabaseTable (Connection connection) throws SQLException {
try {
statement = connection.createStatement ();
status = statement.execute ( "CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'TREATMENTS','./backup.db',null,null,null,0)" );
System.out.println ( "Database Table Restored Successfully." );
} catch ( SQLException err ) {
System.out.println ( "SQL Error: " + err.getMessage () );
}
statement.closeOnCompletion ();
return status;
}
public static boolean clearDatabaseTable (Connection connection) throws SQLException {
try {
statement = connection.createStatement ();
rowsAffected = statement.executeUpdate ( "DELETE FROM TREATMENTS" );
System.out.println ( "Database Table Treatements Cleared Successfully." );
} catch ( SQLException err ) {
System.out.println ( "SQL Error: " + err.getMessage () );
}
statement.closeOnCompletion ();
return status;
}
}