我正在使用一个基于H2文件的数据库运行一个小型的Grails 3.3.0应用程序。出于简单的备份原因,我想使用特定于H2的SCRIPT命令将当前数据库状态转储到一个文件中:
SCRIPT TO /path/to/backup/dir/tempoDb.sql;目前,我正在尝试执行原生SQL命令,如下所示。
User.withSession { session ->
NativeSQLQuerySpecification nativeSQLQuerySpecification = new NativeSQLQuerySpecification("SCRIPT TO /path/to/backup/dir/tempoDb.sql;", null, null)
session.executeNativeUpdate(nativeSQLQuerySpecification, new QueryParameters())
}但这是行不通的。
发布于 2017-08-05 17:07:48
您可以自动连接dataSource,并尝试使用从数据源获得的连接来运行您的sql查询,而无需通过Hibernate。dataSource bean在Grails Spring上下文中注册,它是javax.sql.DataSource的一个实例。
下面是一个将当前H2数据库备份到文件系统的Grails服务示例。
@ReadOnly
class BackupService {
DataSource dataSource
def backup() {
def sql = "SCRIPT DROP TO '${System.properties['java.io.tmpdir']}/backup.sql'"
Statement statement = dataSource.connection.createStatement()
boolean result = statement.execute(sql)
}
}https://stackoverflow.com/questions/45508967
复制相似问题