JAVA JDBC使用相同代码连接不同数据库原理浅解析
来源:互联网 发布:课堂游戏 知乎 编辑:程序博客网 时间:2024/06/14 06:08
如果我们使用JAVA连接数据库的话,一般要经过以下几步:
1.加载驱动
2.取得连接
3.取得Statement
4.取得结果集或执行结果
5.操作结果集
而其他如mybatis hibernate等数据库框架就是对jdbc的进一步封装,那jdbc又是怎样实现的呢,我们为什么可以通过相同代码操作不同数据库呢?来看看当年sun公司大牛的智慧^_^
数据库种类很多,要想统一使用,那就要有统一的规则,而不能让数据库各自为战.
首先,java定义了一系列数据库相关的接口,如:Driver,Connection,Statement等,然后告诉这些数据库厂商,要想让java程序员使用你们的数据库,你们自己就按照我写的接口实现功能,要不我们牛逼的java程序员就不用你家数据库了!于是各数据库厂商在开发数据库的时候还配套了自己的数据库驱动包,这就是为什么我们下载数据库(如:mysql)后能在他的文件中找到驱动包(如:mysql-connector-java-版本-bin)的原因.
接下来说一下相同代码操作不同数据库的过程:
由于java定义了一系列接口,我们按照开头说的,要想操作数据库,首先取得一个Connection,我们有两个方法可以取得Connection,一个是调用Driver类,一个是调用DriverManager类,如:
Connection connection=DriverManager.getConnection(conStr, "root", "root");
不管哪种方法,都需要特定的数据库驱动类,否则报错,而这个数据库驱动类由java定义接口,由数据库厂商自己实现,如mysql中Driver的实现:
public class Driver extends NonRegisteringDriver implements java.sql.Driver{ public Driver() throws SQLException {} static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }}
通过代码我们看出,我们使用:
Class.forName("com.mysql.jdbc.Driver");
将驱动加载进内存后,自动执行static静态代码块,将该驱动类注册,交给DriverManager管理,这是为什么DriverManager能取得数据库连接的原因,它不过是借助了Driver类(mysql的话Driver的大部分实现在NonRegisteringDriver中).
NonRegisteringDriver类是这样定义的:
public class NonRegisteringDriver implements Driver
通过特定的Driver
Connection connection=DriverManager.getConnection(conStr, "root", "root");
拿到了特定的Connection
Statement statement=connection.createStatement();
父类引用指向子类对象,所以调用的是特定数据库Connection的createStatement()实现方法.
如此,下同,就完成了使用相同代码连接不同数据库的过程,而这里,java只是定义了一系列接口,具体实现需要不同数据库自己去完成.从而大大方便了程序员的数据库编程过程.
如有错误欢迎大家指正
end
- JAVA JDBC使用相同代码连接不同数据库原理浅解析
- Java-JDBC-连接不同数据库
- 使用JDBC连接Oracle数据库和使用连接池连接Oracle数据库的代码解析
- 使用JDBC连接ODBC数据库的Java代码
- java使用JDBC连接数据库
- java使用JDBC连接数据库
- Java 使用jdbc连接数据库
- Java使用jdbc连接数据库
- java使用jdbc连接数据库,
- Java原理 完整java开发中JDBC连接数据库代码和步骤
- 使用JDBC连接数据库的标准代码
- java 各种数据库的JDBC连接代码
- java开发中JDBC连接数据库代码
- JDBC连接数据库代码以及步骤--java
- java连接Oracle数据库详细代码,jdbc
- 用java代码Jdbc连接数据库
- Java中JDBC连接数据库代码
- JDBC-实现Java代码连接数据库
- Android自定义View绘制真正的居中文本
- 设计模式之结构型-外观模式(9)
- 优化Hibernate所鼓励的7大措施
- NOIP2017模拟赛8
- 浅尝MVVM
- JAVA JDBC使用相同代码连接不同数据库原理浅解析
- 征信的用途以及提升途径
- 【算法题】找整除
- 两向量的夹角
- 20170620
- 高速光耦6N137用于RS485通信的总结
- hdu 5877 树状数组 +离散化 +树
- 在Mockplus中,如何做鼠标悬停时菜单下拉的效果?
- Spring添加对缓存的支持