JDBC的接口是怎么实现的?

问题描述

如题。 最近接触到jdbc,我有个疑问,建立连接的时候调用的都是接口,那么接口的方法是怎么实现的呢? 比如声明: Connection con;  Statement sql; ResultSet rs;  //Connection 、Statement 、ResultSet 都是接口 con=DriverManage.getConnection("jdbc:odbc:hello”,"",""); // DriverManage是一个类,getConnection是静 态方法,返回类型是Connection接口; sql=con.createStatement(); rs=sql.executeQuery(“SELECT *FROM table”);  我想问一下,Statement接口的getConnection,ResultSet接口的executeQuery方法都没有看到实现,怎么就直接用了。 我看过jdk的源码,里面的接口都只是声明而已。如果说这些接口都是数据库厂商来实现的话,那么他们的驱动机制是怎么回事的? 谢谢了!

解决方案

我查资料理解的:DriverManage.getConnection连接时要初始化里面调loadInitialDrivers方法初始化时调用了Class.forName(driver, true,ClassLoader.getSystemClassLoader());Class.forName方法最终是调了java原生方法装载驱动private static native Class forName0(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException; name - 所需类的完全限定名initialize - 是否必须初始化类loader - 用于加载类的类加载器如果 loader 为 null,也有安全管理器,并且调用方的类加载器不为 null,则此方法通过 RuntimePermission("getClassLoader") 权限调用安全管理器的 checkPermission 方法,以确保可以访问引导类加载器。initialize=true时,总是初始化这个被装载的类;false时,绝对不会初始化,但是可能被连接了,有个例外,如果在调用forName()前,已经被初始化了,那么返回的类型也肯定是被初始化的一个Native Method就是一个java调用非java代码的接口。该方法的实现由非java语言实现,比如C。具体调的哪个dll或什么类库,怎样实现的我肯定不知道。既然加载到对应的驱动了那也应该得到了对应数据库的connection了比如Class.forName("oracle.jdbc.driver.OracleDriver");就是去装载oracle的驱动类,只要引入oracle的ojdbc14.jar包就有
解决方案二:
你应该找具体驱动的源码来看吧。。。。比如oracle的数据库就是ojdbc14.jar
解决方案三:
Class.forName("com.mysql.jdbc.Driver");
解决方案四:
你不要看到它返回的类型是接口就认为他返回的是一个接口。它可以把一个具体的实现类的对象作为一个接口类型来返回即把子类对象当作父类对象来看所以你得到的那些接口对象其实是接口的实现类对象,而它们都对接口声明的方法做出了自己的实现
解决方案五:
如果说这些接口都是数据库厂商来实现的话,那么他们的驱动机制是怎么回事的? 如你所想,实现类是厂商都是实现的,驱动机制应该是加载实现类到JVM中给调用吧

时间: 2024-08-02 22:06:09

JDBC的接口是怎么实现的?的相关文章

在Hibernate中直接操作JDBC接口

简介: Hibernate 在处理多表关联及分组排序等复杂数据库查询操作时,其固有的 O-R 映射机制会 产生大量冗余 SQL 操作,系统性能比传统的 JDBC 低很多.本文分析了 Hibernate 产生此类问题的原因 ,提出了一个在 Hibernate 框架内直接操作 JDBC 的接口的解决方案,在实际项目中验证了该解决方案 可以有效提高此类查询的效率.文中提供的示例代码可以直接运用于使用 Hibernate 框架的 J2EE 系统 项目. 在 Hibernate 框架中提供直接操作 JDB

浅谈实际开发中数据源在JDBC中的应用

数据|数据源 数据源在JDBC中的应用众所周知,JDBC(Java数据库连接)是Java2企业版的重要组成部分.它是基于SQL层的API.通过把SQL语句嵌入JDBC接口的方法中,用户可以通过Java程序执行几乎所有的数据库操作. JDBC只提供了接口,具体的类的实现要求数据库的设计者完成.通过生成这些接口的实例,即使对于不同的数据库,Java程序也可以正确地执行SQL调用.所以对于程序员来说,不必把注意力放在如何向数据库发送SQL指令,因为程序员需要了解和用到的只是JDBC的接口,只有在极少数

让JDBC查询日志变得简单

   JDBC java.sql.PreparedStatement接口的简单扩展可以使查询日志更少犯错,同时整理您的代码.在本文中,IBM电子商务顾问Jens Wyke向您介绍如何应用基本的封装技术("通过封装来实现扩展"也称为Decorator设计模式)来获得最满意的结果. 在大多数情况下,JDBC PreparedStatements 使执行数据库查询更简便并可以显著提升您整体应用程序的性能.当谈到日志查询语句时PreparedStatement接口就显得有些不足了.Prepar

JDBC学习笔记-jdbc性能优化

笔记|性能|优化 jdbc程序的性能主要由两个因素决定,一是数据库本身的性质,另一个是与数据库相对独立的jdbc应用程序接口(api)的使用.这里说的是如何正确使用jdbc编程接口,以获得更好的性能. jdbc主要优化有: 1.选择正确的jdbc驱动程序 2.Connention的优化 使用连接池来管理Connection对象 3.Statement的优化 使用批量更新等 4.Result的优化 正确的从数据库中get数据等 (1)选择正确的jdbc驱动程序: 1 jdbc-odbc 桥 2 本

Java的JDBC数据库访问技术

在了解JDBC之前呢,我们可以先对ODBC做一个回顾,以便于更好的理解JDBC.看名字也知道这两个关系不一般,他们实现了同样的功能,为应用程序连接和操作数据库提供支持.所以,我们先从ODBC开始. ODBC ODBC(Open Database Connectivity)是开放数据库互连的简称,是一种使用SQL的应用程序接口.它是一系列的规范和对数据库访问的API.那么API+SQL就可以执行对数据库的操作.它是不依赖于DBMS的,即通过ODBC可以以相同的方式连接大部分数据库.它包括了应用程序

一种简单JDBC连接池的实现(二)

3.简单JDBC连接池的实现 根据第二章中原理机制,Snap-ConnectionPool(一种简单快速的连接池工具)按照部分的JDBC规范,实现了连接池所具备的对数据库资源有效管理功能. 3.1体系描述 在JDBC规范中,应用通过驱动接口(Driver Interface)直接方法数据库的资源.为了有效.合理地管理资源,在应用与JDBC Driver之间,增加了连接池: Snap-ConnectionPool.并且通过面向对象的机制,使连接池的大部分操作是透明的.参见下图,Snap-Conne

浅析数据源在JDBC中的应用

简介 众所周知,JDBC(Java数据库连接)是Java 2企业版的重要组成部分.它是基于SQL层的API.通过把SQL语句嵌入JDBC接口的方法中,用户可以通过Java程序执行几乎所有的数据库操作.JDBC只提供了接口,具体的类的实现要求数据库的设计者完成.通过生成这些接口的实例,即使对于不同的数据库,Java程序也可以正确地执行SQL调用.所以对于程序员来说,不必把注意力放在如何向数据库发送SQL指令,因为程序员需要了解和用到的只是JDBC的接口,只有在极少数情况下会用到面向特定数据库的类,

使用增强型PreparedStatement向JDBC代码增加日志功能

在大多数情况下,JDBC PreparedStatements 使执行数据库查询更简便并可以显著提升您整体应用程序的性能.当谈到日志查询语句时 PreparedStatement 接口就显得有些不足了. PreparedStatement 的优势在于其可变性,但是一个好的日志条目必须正确描述如何将SQL发送到数据库,它将密切关注用实际的参数值来替换所有参数占位符.虽然有多种方法可以解决这一难题,但没有任何一种易于大规模实施并且大部分将扰乱您的程序代码. 在本文中,您将了解到如何扩展JDBC Pr

Java JDBC学习实战(一): JDBC的基本操作

一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager,管理JDBC驱动的服务类,主要通过它获取Connection数据库链接,常用方法如下: static synchronized Connection getConnection(String url, String user, String password) throws Exception;该方法获得url对应的数据库的连接. Connection