Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用wireshark,是否可以捕获sql准备语句的参数?_Java_Jdbc_Prepared Statement_Wireshark_Packet Capture - Fatal编程技术网

Java 使用wireshark,是否可以捕获sql准备语句的参数?

Java 使用wireshark,是否可以捕获sql准备语句的参数?,java,jdbc,prepared-statement,wireshark,packet-capture,Java,Jdbc,Prepared Statement,Wireshark,Packet Capture,我正在调试一个问题,其中我正在对oracle数据库运行查询,但没有得到响应。更具体地说,除非我设置超时,否则查询将永远运行,在这种情况下,它将超时。查询是由java代码使用OracleJDBC驱动程序创建的准备好的语句 使用wireshark,我试图捕获数据库服务器和应用程序之间发送的内容,我看到了一条与此类似的准备好的语句: 从MY_SCHEMA.MY_TABLE_视图中选择* 创建日期>的位置:1 和创建日期。您当前拥有已准备好的查询字符串。数据在执行时单独发送(可能作为日期信息的二进制编码

我正在调试一个问题,其中我正在对oracle数据库运行查询,但没有得到响应。更具体地说,除非我设置超时,否则查询将永远运行,在这种情况下,它将超时。查询是由java代码使用OracleJDBC驱动程序创建的准备好的语句

使用wireshark,我试图捕获数据库服务器和应用程序之间发送的内容,我看到了一条与此类似的准备好的语句:

从MY_SCHEMA.MY_TABLE_视图中选择*
创建日期>的位置:1

和创建日期。您当前拥有已准备好的查询字符串。数据在执行时单独发送(可能作为日期信息的二进制编码)。Wireshark可能无法对其进行解码,并将其与已准备语句的查询字符串相结合。您可能想看看像p6spy这样的JDBC代理解决方案。如果您有权访问数据库,您可以检查数据库中的活动查询,如图所示。@MarkrotVeel p6spy是否可以帮助我确定数据是否确实通过网络发送?在这个阶段,数据是什么并不重要。我更感兴趣的是看它是否到达服务器。@Mark提出了一个很好的观点,即日期信息可能以二进制形式发送,这会使在数据包跟踪中更难看到。也许可以尝试一些测试查询,比如
SELECT?我姓什么?作为DUAL中的mydatevalue
,将您的姓氏作为第一个参数传递,将某些日期值作为第二个参数传递,然后查看是否可以在数据包跟踪中找到您的姓氏。这可能会告诉您JDBC驱动程序是同时发送查询字符串和参数值(mssql JDBC通常通过调用
sp_prepexec
)还是单独发送。@GordThompson好主意。我尝试了这个查询,显然驱动程序同时发送参数,因为我在查询的同一个数据包的末尾看到了我的姓氏。非常感谢,这告诉了我我想知道的。您目前已经准备好了查询字符串。数据在执行时单独发送(可能作为日期信息的二进制编码)。Wireshark可能无法对其进行解码,并将其与已准备语句的查询字符串相结合。您可能想看看像p6spy这样的JDBC代理解决方案。如果您有权访问数据库,您可以检查数据库中的活动查询,如图所示。@MarkrotVeel p6spy是否可以帮助我确定数据是否确实通过网络发送?在这个阶段,数据是什么并不重要。我更感兴趣的是看它是否到达服务器。@Mark提出了一个很好的观点,即日期信息可能以二进制形式发送,这会使在数据包跟踪中更难看到。也许可以尝试一些测试查询,比如
SELECT?我姓什么?作为DUAL中的mydatevalue
,将您的姓氏作为第一个参数传递,将某些日期值作为第二个参数传递,然后查看是否可以在数据包跟踪中找到您的姓氏。这可能会告诉您JDBC驱动程序是同时发送查询字符串和参数值(mssql JDBC通常通过调用
sp_prepexec
)还是单独发送。@GordThompson好主意。我尝试了这个查询,显然驱动程序同时发送参数,因为我在查询的同一个数据包的末尾看到了我的姓氏。非常感谢,这告诉了我我想知道的。