我正在使用Hibernate 4.3.5-Final开发Java Swing应用程序,我使用HQL或Criteria执行许多UPDATE、INSERT和DELETE操作。现在,我想导出一个SQL脚本,该脚本仅包含对数据库的修改(而不是表的创建),并将其放入.sql文件中(导出文件路径将由用户选择)。您有任何解决我的问题的想法吗?事先感谢![编辑]:一些论坛讨论p6spy,它可以解决我的问题吗?
p6spy
可以帮助你。
一般来说,以下步骤可以帮助你完成工作:
p6spy
(请参阅官方文档:http://p6spy.github.io/p6spy/)之后,你基本上有两个选择:
BatchFileLogger
,通过在spy.properties
中启用它:appender=com.p6spy.engine.spy.appender.BatchFileLogger
(但目前尚未记录文档,参见:https://github.com/p6spy/p6spy/issues/119)或者
com.p6spy.engine.spy.appender.MessageFormattingStrategy
,该策略将只返回sql(请参见:https://dev59.com/IXTYa4cB1Zd3GeqPyL_c#23521623以获取实现的想法),并通过spy.properties
进行配置:logMessageFormat=FooFormat
sqlexpression
设置为与你需要的查询匹配-限制CREATE/ALTER/... TABLE/SEQUENCE/...
(请参阅官方文档:http://p6spy.github.io/p6spy/2.0/configandusage.html)仍然有一些棘手的问题,例如:
databaseDialectDateFormat
属性(以便能够在不修改的情况下重新播放输出)。对于一些常见数据库的灵感,请参阅p6spy本身的单元测试:https://github.com/p6spy/p6spy/tree/master/src/test/resources/com/p6spy/engine/spy
p6spy
。另外,我忘记了一个要点,我的应用程序是“多方言”的,这意味着我让用户在登录屏幕上选择Oracle SQL
、MS SQL Server 2005
或MS SQL Server 2005
。那么我该如何动态设置realdriver
? - Florentin Le Moaljdbc:p6spy:oracle:thin:@localhost:1521:XE
),则根本不需要配置“realdriver”。但这仍然取决于您是否使用某些应用服务器,...欢迎在https://groups.google.com/forum/#!forum/p6spy-users上询问更多详细信息。 - Peter Butkovicrealdriver
属性已被弃用,建议使用driverlist
(但仍有一些文档可能已过时)。 - Peter ButkovicMessageFormattingStrategy
的类)。现在我将尝试仅过滤UDPATE
,INSERT
和DELETE
sqlexpression,但我认为现在大部分工作已经完成了!非常感谢你! - Florentin Le Moalspy.properties
中使用了filter=true
和sqlexpression=^(update|insert|delete).*$
过滤了我的SQL.log
,但是有一个小问题:值没有被转义。因此,如果用户将字段设置为This is a test'
,则脚本将变为update MYTABLE set field='This is a test'' where id=1;
,由于未转义的'
而无法正常工作。是否有解决方案? - Florentin Le Moal