1.任何数据库驱动程序都提供对java.sql.Driver接口的驱动类,mysql-connector-java-5.1.39-bin.jar中Driver:

  1. package com.mysql.jdbc;
  2.  
  3. import java.sql.DriverManager;
  4. import java.sql.SQLException;
  5.  
  6. public class Driver extends NonRegisteringDriver
  7. implements java.sql.Driver
  8. {
  9. public Driver()
  10. throws SQLException
  11. {
  12. }
  13.  
  14. static
  15. {
  16. try
  17. {
  18. DriverManager.registerDriver(new Driver());
  19. } catch (SQLException E) {
  20. throw new RuntimeException("Can't register driver!");
  21. }
  22. }
  23. }

实际上Class.forName("com.mysql.jdbc.Driver")--->DriverManager.registerDriver(new Driver())。java.sql.DriverManager类是JDBC的管理层,负责管理JDBC驱动程序的基本服务。在DriverManager中Driver被包装为DriverInfo类,存储在:

   private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<>();

2.Connection con= DriverManager.getConnection(url,"user","pass");遍历存储在registeredDrivers中的DriverInfo,调用各自的connect()。

  1. for(DriverInfo aDriver : registeredDrivers) {
  2. // If the caller does not have permission to load the driver then
  3. // skip it.
  4. if(isDriverAllowed(aDriver.driver, callerCL)) {
  5. try {
  6. println(" trying " + aDriver.driver.getClass().getName());
  7. Connection con = aDriver.driver.connect(url, info);
  8. if (con != null) {
  9. // Success!
  10. println("getConnection returning " + aDriver.driver.getClass().getName());
  11. return (con);
  12. }
  13. } catch (SQLException ex) {
  14. if (reason == null) {
  15. reason = ex;
  16. }
  17. }
  18.  
  19. } else {
  20. println(" skipping: " + aDriver.getClass().getName());
  21. }
  22.  
  23. }

3.com.mysql.jdbc.Driver继承NonRegisteringDriver,实际的connect在com.mysql.jdbc.NonRegisteringDriver.connect()中实现,方法返回类型为java.sql.Connection。

  1. public java.sql.Connection connect(String url, Properties info)
  2. throws SQLException
  3. {
  4. if (url == null) {
  5. throw SQLError.createSQLException(Messages.getString("NonRegisteringDriver.1"), "08001", null);
  6. }
  7.  
  8. if (StringUtils.startsWithIgnoreCase(url, "jdbc:mysql:loadbalance://"))
  9. return connectLoadBalanced(url, info);
  10. if (StringUtils.startsWithIgnoreCase(url, "jdbc:mysql:replication://")) {
  11. return connectReplicationConnection(url, info);
  12. }
  13.  
  14. Properties props = null;
  15.  
  16. if ((props = parseURL(url, info)) == null) {
  17. return null;
  18. }
  19.  
  20. if (!"1".equals(props.getProperty("NUM_HOSTS"))) {
  21. return connectFailover(url, info);
  22. }
  23. try
  24. {
  25. return ConnectionImpl.getInstance(host(props), port(props), props, database(props), url);
  26. }
  27. catch (SQLException sqlEx)
  28. {
  29. throw sqlEx;
  30. } catch (Exception ex) {
  31. SQLException sqlEx = SQLError.createSQLException(Messages.getString("NonRegisteringDriver.17") + ex.toString() + Messages.getString("NonRegisteringDriver.18"), "08001", null);
  32.  
  33. sqlEx.initCause(ex);
  34.  
  35. throw sqlEx;
  36. }
  37. }

4.那么mysql-connector-java-5.1.39-bin.jar中具体是怎么执行sql的,怎么学习,有哪些书可以看呢???

JDBC_demo:java连接mysql过程的更多相关文章

  1. 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类

    一. 常用的JDBC API 1. DriverManager类 : 数据库管理类,用于管理一组JDBC驱动程序的基本服务.应用程序和数据库之间可以通过此类建立连接.常用的静态方法如下 static ...

  2. java连接mysql的过程

    今天突然心血来潮,想要用java连接mysql,记得以前是在vs2010的环境下用C#连接sql sever,其实他们的方法都差不多. 现在就可以简单的介绍下java如何连接mysql 第一步,设计m ...

  3. 转载:Java连接MySQL 数据库的正确操作流程

    转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html       以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...

  4. java连接mysql

    Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件 ...

  5. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

  6. java 连接 MySQL

    java 连接 MySQL 1.准备工作 需要下载的工具: MySQL:http://www.mysql.com/downloads/ MySQL的可视化工具SQLyog:https://www.we ...

  7. Java连接MySQL数据库及简单操作代码

    1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...

  8. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  9. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

随机推荐

  1. 对BFC的理解

    转载http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 在解释 BFC 是什么之前,需要先介绍 Box.Formatt ...

  2. 检查ftp备份数据完整性及短信告警的shell脚本

    发布:thebaby   来源:net     [大 中 小] 检查ftp备份数据完整性及短信告警的shell,有需要的朋友可以参考下. 该脚本实现如下的功能: 对远程备份到ftp服务器的数据完整性及 ...

  3. Poco之ftp获取文件列表以及下载文件

    #include <iostream>#include <string>#include <vector>#include <algorithm>#in ...

  4. sql性能优化总结(转)

    网上看到一篇sql优化的文章,整理了一下,发现很不错,虽然知道其中的部分,但是没有这么全面的总结分析过…… 一.   目的 数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40 ...

  5. UIImageView 的 contentMode

    UIViewContentModeScaleToFill, // 按设置尺寸 - 填充 UIViewContentModeScaleAspectFit, // 按设置尺寸 - 等比例填充, 有边界 U ...

  6. asp.net中Timer定时器在web中无刷新的使用

    最近在做一个项目的时候,web端的数据需要与数据源进行实时同步,并保证数据的准确性,当时,考虑到使用ajax异步刷新技术.但后来在网上查找相关资料时,发现这样做,太浪费资源了,因为ajax的提交请求不 ...

  7. ubuntu13.10 登陆后黑屏,没有菜单栏,可以启动termina,怎么解决?

    最近在学习openGL,自己的电脑是intel集显加nvidia GT630M,本来想应该可以支持到opengl4以上的,可是发现nvidia的显卡由于驱动问题,好像一直没有用到,所以只支持了open ...

  8. bzoj 2244: [SDOI2011]拦截导弹 cdq分治

    2244: [SDOI2011]拦截导弹 Time Limit: 30 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 237  Solved: ...

  9. bzoj 3242: [Noi2013]快餐店 章鱼图

    3242: [Noi2013]快餐店 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 266  Solved: 140[Submit][Status] ...

  10. Google DNS劫持背后的技术分析

    0×00 背景 最近世界真是越来越不太平了,尤其是对于大部分普通人而言.昨天又传来噩耗,根据网络监测公司BGPMon,Google的公开DNS服务器 IP 8.8.8.8被劫持到了委内瑞拉和巴西超过2 ...