JDBC物理与逻辑

时间:2015-09-23 06:54:15

标签: java oracle jdbc

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

那么当我们DriverManager.getConnection()发生了什么?它在数据库端创建会话吗?是否创建了交易?什么基本上是连接?

当我们执行语句时,那么数据库往返如何发生?幕后发生了什么?数据如何从java app传递到db,反之亦然?

更新

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

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

3 个答案:

答案 0 :(得分:1)

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

连接与事务不同,您可以在一个连接中拥有多个事务。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在java中,你主要使用java.sql包中指定的接口,你经常处理的类是DriverManager,它允许你获得一个连接(一个允许你访问所有的接口)其他的ResultSet,Statement等)。我尝试概述在使用Oracle数据库时更常见的操作期间会发生什么

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