Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 JDBC物理与逻辑_Java_Oracle_Jdbc - Fatal编程技术网

Java JDBC物理与逻辑

Java JDBC物理与逻辑,java,oracle,jdbc,Java,Oracle,Jdbc,在JDBCAPI中,我们主要处理连接、DriverManager和事务。 JDBC主要用于连接数据库和执行CRUD操作。所以我只需要知道在JDBC的较低级别上每个步骤是如何工作的 那么当我们执行DriverManager.getConnection()时会发生什么?它是否在数据库端创建会话?是否创建了一个事务?连接基本上是什么 当我们执行语句时,数据库往返是如何发生的?幕后发生了什么?如何将数据从java应用程序传递到db,反之亦然 更新 所以基本上我只需要知道在java端和数据库端的每一步都发

在JDBCAPI中,我们主要处理连接、DriverManager和事务。 JDBC主要用于连接数据库和执行CRUD操作。所以我只需要知道在JDBC的较低级别上每个步骤是如何工作的

那么当我们执行
DriverManager.getConnection()
时会发生什么?它是否在数据库端创建会话?是否创建了一个事务?连接基本上是什么

当我们执行语句时,数据库往返是如何发生的?幕后发生了什么?如何将数据从java应用程序传递到db,反之亦然

更新 所以基本上我只需要知道在java端和数据库端的每一步都发生了什么

  • 与数据库建立连接意味着什么?是否创建了排序套接字

  • 实际上,JDBC只是一个接口。数据库端发生的事情取决于应用程序中使用的JDBC驱动程序。

    确切的细节实际上取决于驱动程序和数据库。但一般来说:打开连接是一个相对昂贵的操作,因此您通常希望在多个查询中重用同一连接。还有几种连接池的实现(只需进行一点搜索)。打开连接通常会建立到DBMS的网络连接(如果有网络连接;也有内存中的数据库),并对DB用户进行身份验证


    一个连接不同于一个事务,一个连接中可以有多个事务。

    在java中,您主要使用
    java.sql
    包中指定的接口工作,您通常处理的类是
    DriverManager
    ,它允许您获得连接(一个让您可以访问所有其他结果集、语句等的界面)。我尝试向您概述在使用Oracle数据库时,在更常见的操作过程中会发生什么

  • DriverManager.getConnection
    :它为您提供一个连接对象并创建一个会话(在数据库的v$session视图中可见)在服务器端。如果您查看,您可以看到创建连接的首选方法是使用
    数据源
    ,它可以提供连接池,即您创建固定数量的数据库连接(即数据库会话)在使用Oracle数据库时,连接池是一个非常受欢迎的功能,因为创建连接的成本很高(Oracle必须创建远程进程/线程等),并且一些sql解析数据(硬和软)保存在连接/会话级别
  • 创建PreparedStatement:在服务器端,Oracle查看 SQL区域,如果它可以找到相同的SQL,并且如果它发现它重用 访问计划(我不会详细介绍这些,但会构建一个 对数据的访问计划可能是一项非常昂贵的操作) 想更进一步,你可以在这里阅读 Oracle解析查询时会发生什么情况
  • 将数据绑定到preparedStatement并执行它:传递 将参数绑定到语句,并在服务器端绑定 将数据转换为sql并执行它
  • 如果正在从结果集读取数据,则在 服务器端(Oracle提供了只读和转发 光标)并在结果集上发出下一个 如果获取大小为1,则在服务器端执行操作 在jdbc端;否则实现可能会缓存一些 结果(这通常是一件好事,因为使用相同的网络 往返(您可以获取更多数据)

  • 这是一个粗略的概述,因为主题非常广泛,取决于您需要的详细程度;您可能会面临非常不同的配置,这些配置会改变java方面的实际情况。

    阅读jdbc规范。@Zelldon it说未经授权的请求OK试试这个