工作中遇到一个需求,需要通过java程序执行sql文件
刚开始使用druid解析sql,然后通过jdbc来执行。后来发现druid有很多时候解析不出来正确的sql语句。
后来换用通过shell脚本调用sqlplus执行,发现有一个比较棘手的问题。当sql文件中包含方法,存储过程或者视图时,如果该对象有编译错误,此时拿不到报错信息导致程序认为sql文件已经正确执行。
通过查询ant的API发现其支持执行sql文件。需要以下代码即可实现异常抛出
sqlExecutor.treatWarningAsError(true)
特此记录一下。
PS:如上处理虽然可以中断脚本执行,但是已经编译错误的方法并不能回滚。