JDBC(MYSQL)初步学习
来源:互联网 发布:武装党卫军 知乎 编辑:程序博客网 时间:2024/05/17 01:44
JAVA JDBC(MySQL)驱动源码分析(一)
注: 本系列文章使用JDK1.5 数据库驱动版本 mysql-connector-java-5.1.8b
JAVA连接数据库是其众多功能中的一部分,主要有两种方式连接DataBase: 一种是采用JDBC-ODBC桥,另一种则是称之为纯驱动连接DataBase,第一种方式在大型项目中基本上不再使用,本系列文章主要分析纯驱动源码。
对于初学JAVA者,甚至那些使用JAVA做过几年开发的程序员来讲,对于JDBC的工作原理都不一定能够明白。知其然,不知其所以然。遇到问题就不知所措了。通过针对于MYSQL JDBC源码的分析,对于JAVA是如何连接数据库,其中到底做了些什么工作,一步步解剖开来,更好的理解JDBC。
使用JAVA连接数据库,首先要做的就是在程序中导入sql包,然后装载驱动类、获取连接、获取语句对象、发送SQL命令然后得到结果
请看以下代码片段:
- /* 连接mysql 时装载的驱动类以及连接字符串 */
- Class.forName(“com.mysql.jdbc.Driver”);//1
- DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”,”root”,”123”);//2
- /* 连接SQLServer2005 时装载的驱动类以及连接字符串 */
- Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
- DriverManager.getConnection(“jdbc:sqlserver://localhost:1433;databaseName=pubs”,”sa”, ””);
此段代码有两部分,连接不同数据库时所需要装载的驱动类以及连接字符串,以此获取连接。
Class.forName()装载类,在调用一个类的构造方法,初始化静态成员或者这个类有main方法时,JVM都会装载对应的类。
首先我们就看看com.mysql.jdbc.Driver类做了什么事情,找到MYSQL-JDBC驱动源码,解压之后找到src目录,然后找到com.mysql.jdbc下的Driver.java类
- package com.mysql.jdbc;
- import java.sql.SQLException;
- public class Driver extends NonRegisteringDriver implements java.sql.Driver {
- static {
- try {
- java.sql.DriverManager.registerDriver(new Driver()); //1
- } catch (SQLException E) {
- throw new RuntimeException("Can't register driver!");
- }
- }
- // ~ Constructors
- // -----------------------------------------------------------
- /**
- * Construct a new driver and register it with DriverManager
- *
- * @throws SQLException
- * if a database error occurs.
- */
- public Driver() throws SQLException {
- // Required for Class.forName().newInstance()
- }
- }
Driver类继承NonRegisteringDriver 同时实现接口java.sql.Driver
此类会有一个静态块
- static {
- try {
- java.sql.DriverManager.registerDriver(new Driver()); //1
- } catch (SQLException E) {
- throw new RuntimeException("Can't register driver!");
- }
- }
Class.forName的作用是要求JVM查找并加载指定的类, 也就是说JVM装载此类并执行静态块代码
此静态块只有一句关键部分,1处
在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC 驱动
的Driver类的代码都必须类似下面这段
java.sql.DriverManager.registerDriver(new Driver());
所以,如果你要自己实现一个数据库的JDBC驱动,那么就得实现java.sql.Driver接口,并且需要在实现类中使用java.sql.DriverManager.registerDriver(new Driver())注册自己,new Driver()就是创建一个Driver对象,所以此类会有一个无参数的构造函数:
- public Driver() throws SQLException {
- }
下面再看看DriverManager.registerDriver()这个方法,源码如下:
- public static synchronized void registerDriver(java.sql.Driver driver)
- throws SQLException {
- if (!initialized) {
- initialize();
- }
- DriverInfo di = new DriverInfo();
- di.driver = driver;
- di.driverClass = driver.getClass();
- di.driverClassName = di.driverClass.getName();
- // Not Required -- drivers.addElement(di);
- writeDrivers.addElement(di);
- println("registerDriver: " + di);
- /* update the read copy of drivers vector */
- readDrivers = (java.util.Vector) writeDrivers.clone();
- }
此方法是一个静态同步的方法,形式参数是java.sql.Driver接口类型,因为com.mysql.jdbc.Driver这个类实现了java.sql.Driver接口,所以com.mysql.jdbc.Driver实例对象new Driver()是可以作为实参传入到此方法中来的。在DriverManager类中都是使用的Driver接口类型,也就是说驱动的使用不依赖于任何实现。如果需要更换你所连接的数据库,只需要在Class.forName传入的参数换成另一个数据库的驱动类,但要求此类必须实现Driver接口。
连载二中会具体分析DriverManager类到底做了些什么工作。
- JDBC(MYSQL)初步学习
- jdbc初步学习(一)
- JDBC初步学习
- jdbc初步(转)
- 2.JDBC学习(MySQL)
- JDBC学习笔记(MySQL)
- MySQL数据库学习初步
- mysql数据库初步学习
- 初步学习 mysql
- 初步学习mysql
- jdbc初步 Java操纵MySQL数据库
- 【jdbc】java连接mySQL数据库 初步
- JDBC MYSQL 学习笔记(一) JDBC 基本使用
- mysql学习笔记(六):JDBC详解
- JDBC学习(一)连接mysql
- mysql jdbc学习笔记
- mysql jdbc入门学习
- JDBC+MYSQL初始学习
- OC视频笔记4.4(NSNumber的使用方法)4.5(NSValue的使用)(NSNull的使用)
- SQL Server在存储过程中编写事务处理代码的三种方法
- C#读写EXCEL的几种方式
- Java 理论与实践: 正确使用 Volatile 变量
- JS 活动倒计时 根据服务器时间判断
- JDBC(MYSQL)初步学习
- 将log保存到本地
- 用SQL语句添加删除修改字段
- 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示
- 面试题33:把数组排成最小的数
- Android开发实用的网站
- NDK debugging does not start: "package is unknown"
- mysql 设置远程连接
- 欢迎使用CSDN-markdown编辑器