当对Oracle或类似的RDBMS进行Java调用时,Java如何知道Oracle操作已完成?
例如," create table as (select * from table1)
"。
如果我们通过Java在Oracle中执行单行SQL语句,Java如何知道代码行已经完成,然后转到下一条Java指令?我的猜测是有一些秘密的JDBC正在进行,但不确定它是什么。
有人可以解释一下吗?
我希望可以调整在Java中执行该行代码所需的时间。如果你不想要一个ResultSet对象,而只想要某种确认,那么你可以微调一些东西。
答案 0 :(得分:5)
与任何其他网络请求获得响应的方式相同。
当您向数据库发送查询时,JDBC驱动程序会通过网络发送一堆数据包并等待响应。当数据库具有响应时(在Oracle的情况下,当前N行可用时),驱动程序从数据库接收构成响应的一堆数据包。 JDBC驱动程序解析这些数据包中的信息,并根据JDBC API通知您的应用程序。
这与存在任何类型的客户端/服务器网络请求时发生的过程完全相同。您的Web浏览器如何知道它已发送到HTTP服务器的HTTP请求何时被处理?它知道HTTP服务器的响应何时开始到达。然后,HTTP服务器会解析该响应,然后根据HTML标准等内容向您提供信息。
答案 1 :(得分:2)
这是由您正在使用的JDBC驱动程序处理的。它知道如何与数据库“交谈”。它将查询传输到数据库并将结果返回给客户端。数据库将始终响应结果(结果集,更新计数等),否则将引发异常,您通常会通过SQLException或SQLTimeoutException知道。如果您想深入挖掘,API已有详细记录。希望这会有所帮助。