JDBC怎么加载驱动

@author ixenos

分析


1.JDBC是一套连接数据库的接口(放在java.util.sql.Driver类中),不同的数据库依此接口各自实现Java连接到数据库的操作,这些具体的实现就叫做驱动

2.当只连接一个数据库时,我们可以new 驱动对象来使用,但是当多数据库连接时,要多次创建Driver示例,多次创连接Connection,有些繁琐,这时,sun提供了一个驱动的管理器DriverManager,注册驱动就可以调用;

3.但是每次还是要创Driver实例,然后都进行注册,而且可能重复注册,怎么办?jdbc驱动的实现者就把新建实例驱动注册的操作包裹为一个static块(在类加载连接初始化时运行,且只运行一次),这样加载驱动时就执行这些操作了,这也就是为什么只用Class.forName的由来。

com.mysql.jdbc.Driver对加载驱动的实现


  com.mysql.jdbc.Driver把DriverManager的注册放在了静态块中

代码


import java.sql.Connection;

import java.sql.Driver;

import java.sql.DriverManager;

import java.util.Properties;

import org.junit.Test;

/**

 * jdbc连接数据库

 * @author ixenos

 *

 */

public class Demo1 {

      //连接数据库的URL

      private String url = "jdbc:mysql://localhost:3306/day17";

                          // jdbc协议:数据库子协议:主机:端口/连接的数据库   //

      private String user = "root";//用户名

      private String password = "root";//密码

      /**

       * 第一种方法

       * @throws Exception

       */

      @Test

      public void test1() throws Exception{

           //1.创建驱动程序类对象

           Driver driver = new com.mysql.jdbc.Driver(); //新版本

           //Driver driver = new org.gjt.mm.mysql.Driver(); //旧版本

           //设置用户名和密码

           Properties props = new Properties();

           props.setProperty("user", user);

           props.setProperty("password", password);

           //2.连接数据库,返回连接对象

           Connection conn = driver.connect(url, props);

           System.out.println(conn);

      }

      /**

       * 使用驱动管理器类连接数据库(注册了两次,没必要)

       * @throws Exception

       */

      @Test

      public void test2() throws Exception{

           Driver driver = new com.mysql.jdbc.Driver();

           //Driver driver2 = new com.oracle.jdbc.Driver();

           //1.注册驱动程序(可以注册多个驱动程序)

           DriverManager.registerDriver(driver);

           //DriverManager.registerDriver(driver2);

           //2.连接到具体的数据库

           Connection conn = DriverManager.getConnection(url, user, password);

           System.out.println(conn);

      }

      /**

       * (推荐使用这种方式连接数据库)

       * 推荐使用加载驱动程序类  来 注册驱动程序

       * @throws Exception

       */

      @Test

      public void test3() throws Exception{

           //Driver driver = new com.mysql.jdbc.Driver();

           //通过得到字节码对象的方式加载静态代码块,从而注册驱动程序

           Class.forName("com.mysql.jdbc.Driver");

           //Driver driver2 = new com.oracle.jdbc.Driver();

           //1.注册驱动程序(可以注册多个驱动程序)

           //DriverManager.registerDriver(driver);

           //DriverManager.registerDriver(driver2);

           //2.连接到具体的数据库

           Connection conn = DriverManager.getConnection(url, user, password);

           System.out.println(conn);

      }

}

  

JavaEE JDBC 怎么加载驱动的更多相关文章

  1. 简单实现JDBC自动加载驱动,简化数据连接和关闭数据库连接

    package util; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import j ...

  2. java连接数据库加载驱动到java项目

    java连接数据库 package com.cook.zheng; import java.sql.Connection; import java.sql.DriverManager; public ...

  3. java基础-jdbc——三种方式加载驱动建立连接

    String url = "jdbc:mysql://localhost:3306/student?Unicode=true&characterEncoding=utf-8" ...

  4. JDBC详解系列(二)之加载驱动

    ---[来自我的CSDN博客](http://blog.csdn.net/weixin_37139197/article/details/78838091)---   在JDBC详解系列(一)之流程中 ...

  5. JDBC加载驱动的方法+statement

    加载驱动方法 1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2. DriverManager.r ...

  6. JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了

    JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...

  7. JDBC:加载数据库驱动、连接数据库(详细讲解)

    加载数据库驱动: 1)由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构: 2)JDBC将整个数据库驱动器在底层抽象成 ...

  8. java加载驱动

    加载驱动方法 1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2. DriverManager.r ...

  9. 小白自制Linux开发板 番外篇 一 modprobe加载驱动问题(转载整理)

    使用modprobe加载驱动 转载地址:https://blog.csdn.net/qq_39101111/article/details/78773362 前面我们提到,modprobe并不需要指定 ...

随机推荐

  1. poj 2299 Ultra-QuickSort 归并排序求逆序数对

    题目链接: http://poj.org/problem?id=2299 题目描述: 给一个有n(n<=500000)个数的杂乱序列,问:如果用冒泡排序,把这n个数排成升序,需要交换几次? 解题 ...

  2. poj 2632 Crashing Robots 模拟

    题目链接: http://poj.org/problem?id=2632 题目描述: 有一个B*A的厂库,分布了n个机器人,机器人编号1~n.我们知道刚开始时全部机器人的位置和朝向,我们可以按顺序操控 ...

  3. 洛谷 P1600 天天爱跑步

    https://www.luogu.org/problemnew/show/P1600 (仅做记录) 自己的假方法: 每一次跑从a到b:设l=lca(a,b)对于以下产生贡献: a到l的链上所有的点( ...

  4. Create the first sql server 2016 mobile report;创建 第一个 sqlserver 2016 Mobile report

    在微软收购了datazen之后,sqlserver2016 集成了mobilereport,mobile report 基于html5,兼容各类主流浏览器,之前ssrs2008 R2中很多chart类 ...

  5. LinkedList,SortedList 基本用法

    LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList<int> ma = new LinkedList<int>(); ...

  6. [转]符号和运算符参考 (F#)

    本文转自:http://msdn.microsoft.com/zh-cn/library/dd233228.aspx 本主题包含一个表,其中列出了 F# 语言中使用的符号和运算符. 符号和运算符表   ...

  7. composer Failed to decode zlib stream 无法解码zlib流

    Win7 中安装 Composer (PHP) 国内有些网络不能访问美国的Composer官网,可访问 Composer 中文网 学习. 目标 可以在任何目录下的项目中执行 PHP composer. ...

  8. 如何向妻子解释OOD (转)

       此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非常好,就翻译出来,供不 ...

  9. Scala基础篇-04 try表达式

    1.try表达式 定义 try{} catch{} finally{} //例子 try{ Integer.parseInt("dog") }catch { }finally { ...

  10. 洛谷 P1886 滑动窗口 (数据与其他网站不同。。)

    题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...