2012-07-26 62 views
4

可能重复:
How can I get the SQL of a PreparedStatement?如何查看我的PreparedStatement的外观?

我做一个PreparedStatement(PS),并运行一些了setString(INT一,字符串二)就可以了。 在此之后,我如何看到我的PS终于看起来像什么?

+2

可能dupicate 2382532/how-can-i-get-sql-of-a-prepared-statement- – Reimeus 2012-07-26 21:53:28

+0

这取决于驱动程序。见http://stackoverflow.com/questions/2683214/get-query-from-java-sql-preparedstatement – betomontejo 2012-07-26 22:09:06

+0

@Betoverse啊是的,当然。在与Oracle合作多年之后,有时我会忘记一些特定于该供应商的事情,并将其误认为标准。感谢您的输入。 – 2012-07-27 16:19:47

回答

4

如果我理解你,你会想成才,如:

PreparedStatement pstmt = 
      connection.prepareStatement("insert into table tab(col) values(?)"); 
    pstmt.setString(1, "my string value"); 

,然后你想看到这样的字符串:

"insert into table(col) values('my string value')" 

难道我得到你的意思吧?

如果是这样,我认为你不能那样做。我认为这个语句是预编译的,没有参数值,而且这些都是分开保存的,所以你可以重复使用具有不同参数的语句。

你可以做什么,是检索参数元数据,如:

ParameterMetaData pmd = pstmt.getParameterMetaData(); 

然后调用的东西,如:http://stackoverflow.com/questions/的

pmd.getParameterCount(); 
    pmd.getParameterClassName(1); 
    pmd.getParameterType(1); 
+0

是的,我似乎无法做到这一点。在ParameterMetaData和ParameterMetaData的JavaDocs中,我没有看到任何可以给我想要的方法。 – 2012-07-28 07:17:56

+0

你正在使用什么数据库? Oracle,Derby,MySql,...?尝试答案Betoverse提供了一个尝试,只是通过'System.out.println(pstmt)打印语句;' – 2012-07-28 10:06:24

+0

我正在使用MySql – 2012-07-28 22:09:17