Database H2数据库备份仅在linux上运行

Database H2数据库备份仅在linux上运行,database,hibernate,wildfly,backup,h2,Database,Hibernate,Wildfly,Backup,H2,因此,我们尝试使用以下脚本备份数据库: public void backup() throws SQLException { try { log.info("Trying to connect with DB"); String sqlFilePath = "./Backup_" + LocalDateTime.now() + ".sql"; Query q = em.createNativeQuery(String.format("SCR

因此,我们尝试使用以下脚本备份数据库:

public void backup() throws SQLException {
    try {
        log.info("Trying to connect with DB");
        String sqlFilePath = "./Backup_" + LocalDateTime.now() + ".sql";
        Query q = em.createNativeQuery(String.format("SCRIPT TO '%s'", sqlFilePath));
        log.info(q.getResultList().toString());
    }
    catch (Exception e){
        e.printStackTrace();
        throw new SQLException();
    }
}
这在linux上可以完美地工作,但是我们的软件也需要能够在Windows上运行,但是在Windows中,我一直得到以下fileNotFoundException:

14:57:29,826 ERROR [stderr] (default task-21) Caused by: org.h2.jdbc.JdbcSQLException: IO Exception: "java.io.FileNotFoundException: .\Backup_2020-02-25T14:57:29.148621200.sql (The filename, directory name, or volume label syntax is incorrect)"; "./Backup_2020-02-25T14:57:29.148621200.sql"; SQL statement:
14:57:29,826 ERROR [stderr] (default task-21) BACKUP TO './Backup_2020-02-25T14:57:29.148621200.sql' [90031-193]
14:57:29,826 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
14:57:29,826 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.message.DbException.get(DbException.java:168)
14:57:29,827 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.message.DbException.convertIOException(DbException.java:330)
14:57:29,827 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.command.dml.BackupCommand.backupTo(BackupCommand.java:102)
14:57:29,827 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.command.dml.BackupCommand.update(BackupCommand.java:51)
14:57:29,827 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.command.CommandContainer.update(CommandContainer.java:98)
14:57:29,827 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.command.Command.executeUpdate(Command.java:258)
14:57:29,827 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:160)
14:57:29,828 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:146)
14:57:29,828 ERROR [stderr] (default task-21)   at org.jboss.ironjacamar.jdbcadapters@1.4.17.Final//org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:537)
14:57:29,828 ERROR [stderr] (default task-21)   at org.hibernate@5.3.13.Final//org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)
14:57:29,828 ERROR [stderr] (default task-21)   ... 107 more
14:57:29,828 ERROR [stderr] (default task-21) Caused by: java.io.FileNotFoundException: .\Backup_2020-02-25T14:57:29.148621200.sql (The filename, directory name, or volume label syntax is incorrect)
14:57:29,828 ERROR [stderr] (default task-21)   at java.base/java.io.FileOutputStream.open0(Native Method)
14:57:29,828 ERROR [stderr] (default task-21)   at java.base/java.io.FileOutputStream.open(FileOutputStream.java:292)
14:57:29,828 ERROR [stderr] (default task-21)   at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
14:57:29,829 ERROR [stderr] (default task-21)   at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:124)
14:57:29,829 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.store.fs.FilePathDisk.newOutputStream(FilePathDisk.java:290)
14:57:29,829 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.store.fs.FileUtils.newOutputStream(FileUtils.java:233)
14:57:29,829 ERROR [stderr] (default task-21)   at com.h2database.h2@1.4.193//org.h2.command.dml.BackupCommand.backupTo(BackupCommand.java:67)
14:57:29,829 ERROR [stderr] (default task-21)   ... 114 more
14:57:29826错误[stderr](默认任务-21)由以下原因引起:org.h2.jdbc.JdbcSQLException:IO异常:“java.IO.FileNotFoundException:。\Backup_2020-02-25T14:57:29.148621200.sql(文件名、目录名或卷标语法不正确)”;“/Backup_2020-02-25T14:57:29.148621200.sql”;SQL语句:
14:57:29826错误[stderr](默认任务-21)备份到“”/BACKUP\u 2020-02-25T14:57:29.148621200.sql'[90031-193]
14:57:29826 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
14:57:29826 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.message.DbException.get(DbException.java:168)
14:57:29827 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.message.DbException.convertIOException(DbException.java:330)
14:57:29827 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.command.dml.BackupCommand.backupTo(BackupCommand.java:102)
14:57:29827 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.command.dml.BackupCommand.update(BackupCommand.java:51)
14:57:29827 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.command.CommandContainer.update(CommandContainer.java:98)
14:57:29827 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.command.command.executeUpdate(command.java:258)
14:57:29827 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:160)
14:57:29828 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:146)
14:57:29828 org.jboss.ironjacamar上的错误[stderr](默认任务-21)。jdbcadapters@1.4.17.Final//org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:537)
14:57:29828组织中的错误[stderr](默认任务-21)。hibernate@5.3.13.Final//org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)
14:57:29828错误[stderr](默认任务-21)。。。107更多
14:57:29828错误[stderr](默认任务-21)由以下原因引起:java.io.FileNotFoundException:。\Backup\u 2020-02-25T14:57:29.148621200.sql(文件名、目录名或卷标语法不正确)
14:57:29828 java.base/java.io.FileOutputStream.open0(本机方法)处的错误[stderr](默认任务-21)
14:57:29828 java.base/java.io.FileOutputStream.open(FileOutputStream.java:292)处的错误[stderr](默认任务-21)
14:57:29828 java.base/java.io.FileOutputStream处的错误[stderr](默认任务-21)。(FileOutputStream.java:235)
14:57:29829 java.base/java.io.FileOutputStream处的错误[stderr](默认任务-21)。(FileOutputStream.java:124)
14:57:29829 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.store.fs.FilePathDisk.newOutputStream(FilePathDisk.java:290)
14:57:29829 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.store.fs.FileUtils.newOutputStream(FileUtils.java:233)
14:57:29829 com.h2数据库中的错误[stderr](默认任务-21)。h2@1.4.193//org.h2.command.dml.BackupCommand.backupTo(BackupCommand.java:67)
14:57:29829错误[stderr](默认任务-21)。。。114多

任何帮助都将不胜感激!:)

不能在Windows上用作文件名的一部分。您需要用一些允许的字符替换它,例如用
LocalDateTime.now().toString().replace(“:”,“"”)
或用自定义
DateTimeFormatter