工作中遇到一個(gè)需求但荤,需要通過(guò)java程序執(zhí)行sql文件
剛開(kāi)始使用druid解析sql,然后通過(guò)jdbc來(lái)執(zhí)行。后來(lái)發(fā)現(xiàn)druid有很多時(shí)候解析不出來(lái)正確的sql語(yǔ)句吟孙。
后來(lái)?yè)Q用通過(guò)shell腳本調(diào)用sqlplus執(zhí)行捅暴,發(fā)現(xiàn)有一個(gè)比較棘手的問(wèn)題仇参。當(dāng)sql文件中包含方法,存儲(chǔ)過(guò)程或者視圖時(shí)嫩絮,如果該對(duì)象有編譯錯(cuò)誤丛肢,此時(shí)拿不到報(bào)錯(cuò)信息導(dǎo)致程序認(rèn)為sql文件已經(jīng)正確執(zhí)行。
? 通過(guò)查詢(xún)ant的API發(fā)現(xiàn)其支持執(zhí)行sql文件剿干。需要以下代碼即可實(shí)現(xiàn)異常拋出
sqlExecutor.treatWarningAsError(true)
特此記錄一下蜂怎。
PS:如上處理雖然可以中斷腳本執(zhí)行,但是已經(jīng)編譯錯(cuò)誤的方法并不能回滾置尔。