oracle JDBC物理与逻辑

svgewumm  于 2023-10-16  发布在  Oracle
关注(0)|答案(4)|浏览(108)

在jdbc API中,我们主要处理连接,驱动程序管理器,事务。JDBC主要用于连接数据库和进行CRUD操作。所以我只需要知道在较低级别的JDBC中每一步是如何工作的。
那么当我们执行DriverManager.getConnection()时,会发生什么?它是否在数据库端创建一个会话?是否创建了交易?什么是基本的连接?
当我们执行语句时,数据库往返是如何发生的?在幕后发生了什么?数据如何从java app传递到db,反之亦然?

更新

所以基本上我只需要知道每一步在Java端和数据库端发生了什么。
1.与数据库建立连接是什么意思?是否创建了某种socket?

dy1byipe

dy1byipe1#

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

aemubtdh

aemubtdh2#

在java中,你主要使用java.sql包中指定的接口,你通常处理的类是DriverManager,它允许你获得一个Connection(一个接口,让你访问所有其他的ResultSet,Statement等)。我将给予您一个概述,介绍在使用Oracle数据库时,在执行更常见的操作时会发生什么

  1. DriverManager.getConnection:它给你一个Connection对象,并在服务器端创建一个会话(在数据库的v$session视图中可见)。如果你看一下documentation,你可以读到创建连接的首选方法是使用DataSource,它可以提供连接池,即创建固定数量的数据库连接(即,数据库会话)并根据需要重用它们。连接池在使用Oracle数据库时是一个非常受欢迎的功能,因为连接创建是昂贵的(Oracle必须创建一个remore进程/线程等),并且一些关于sql解析(硬和软)的数据保留在连接/会话级别
    1.创建一个PreparedStatement:在服务器端,Oracle查看SQL区域,如果它可以找到相同的SQL,如果它发现它重用访问计划(我不打算详细介绍这些,但构建数据访问计划可能是一个非常昂贵的操作)。如果你想更进一步,你可以在这里读一个detailed explanation,当Oracle解析一个查询时会发生什么
    1.将数据绑定到MyRedStatement并执行它:你将参数传递给语句,在服务器端,它将数据绑定到sql并执行它。
    1.如果你从一个resultSet中阅读数据,你在服务器端有一个游标(Oracle提供了一个只读和只进游标),当你在resultSet上发出下一个命令时,如果你在jdbc端的获取大小为1,在服务器端也会进行同样的操作;否则,实现可能会缓存一些结果(这通常是一件好事,因为使用相同的网络往返,您可以获取更多的数据)
    这是一个粗略的概述,因为这个主题非常广泛,它取决于你需要的详细程度;您可能会面临非常不同的配置,这些配置会改变Java端的实际情况。
rt4zxlrg

rt4zxlrg3#

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

yebdmbv4

yebdmbv44#

你可以在Vlad Mihalcea写的High-Performance Java Persistence中找到关于这个主题的很好的解释。我试着做一个总结:
首先,DriverManager从底层驱动程序请求一个新的物理连接(建立到数据库服务器的TCP连接)。在JDBC的早期版本中,它只支持DriverManager实用程序来获取数据库连接,这对于采用2层架构的桌面应用程序来说已经足够了。因此,每个用户创建自己的专用数据库连接。考虑到每个数据库服务器只能提供基于几个参数的有限数量的连接,除此之外,建立数据库连接是一个繁重的操作。
在企业应用中,我们主要使用三层架构,中间层作为用户请求和数据源之间的桥梁,帮助我们更好地管理数据库连接(重用数据库连接)。因此,应用服务器提供逻辑连接而不是物理连接。javax.sql.DataSource接口是一个逻辑连接提供者。简单地说,DataSource将连接请求委托给底层的DriverManager。连接请求工作流可能是这样的:
1.应用程序数据层向DataSource请求数据库连接。

  1. DataSource使用底层驱动程序打开物理连接。
    1.创建一个物理连接,并打开一个TCP套接字。
  2. DataSource并不 Package 物理连接,它只是将其借给应用程序层。
    1.应用程序使用获取的数据库连接执行语句。
    1.当不再需要连接时,应用程序将关闭物理连接和底层TCP套接字沿着。

相关问题