[问题] 在JDBC,如何将经过preparedStatement处

楼主: lueichun (no anonymous)   2022-02-10 21:45:43
※状况概述:
在JDBC,PreparedStatement会将含有?的SQL,透过setString等方法,把?替代成参数值
从而组出真正可执行的SQL。但我现在疑似在这一步出错,执行结果都没有查询出东西来。
所以我想看看组出来的SQL是什么样子,我GOOGLE半天,找到的都是针对MySQL的语法,
而我用的数据库是Oracle,Oracle似乎没有可以把“组出来没有?的SQL”印出来的语法。
请问还可以用什么方法,把“组出来没有?的SQL”印出来呢??
※程式码:
※错误讯息:
※补充说明:
作者: tw11509 (John-117)   2022-02-10 22:48:00
visualvm jdbc profiler,要不然就用Debug模式追
作者: ssccg (23)   2022-02-10 23:11:00
不会替代掉,至少在JDBC层不会对有支援parameterized query的DBMS(至少Oracle、MySQL都有),driver实作通常就是SQL string和参数分别传给DBMS各DBMS的语法不同driver会处理,但是参数不会替代进去是说"Prepared"Statement的原用意就是让DBMS可以cache相同的指令来跑多组参数用的啊
作者: MarcoReus (Marco Reus)   2022-02-11 00:03:00
有个work around的解法是自己写一个中继层纪录params
作者: often897 (泽渡 真琴)   2022-02-11 00:45:00
P6SPY
作者: tw11509 (John-117)   2022-02-11 01:58:00
S大就说了很清楚了,不过刚刚用VisualVM测试了一下,会处理后印出取代?后的SQL,方便你阅读,最少你可以确认是否送出去的东西有错误有时候碰到这种问题可能需要检查程式或相关设定是否有不正确的地方甚至你可以直接用完整的SQL语句来测试是否可以取得资料,如果可以,那就代表原本的程式可能有问题;反之,你可能要检查DB相关的设定
作者: jej (晃奶大馬桶)   2022-02-12 18:49:00
我猜原po是要问preparedstatement.toStringoracle没有还原原始sql的样子如果问题是这个 可以用九楼的套件或是用你上一篇的装饰模式包装ojdbc实作preparedstatement那个物件用其他楼所说的的方式达成
作者: haha02 (来人!上夹棍!)   2022-02-14 02:48:00
以前用过log4jdbc 可以印出取代后的SQL

Links booklink

Contact Us: admin [ a t ] ucptt.com