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. Hdu 3488 Tour (KM 有向环覆盖)

    题目链接: Hdu 3488 Tour 题目描述: 有n个节点,m条有权单向路,要求用一个或者多个环覆盖所有的节点.每个节点只能出现在一个环中,每个环中至少有两个节点.问最小边权花费为多少? 解题思路 ...

  2. _bzoj1001 [BeiJing2006]狼抓兔子【平面图】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 顺便推荐一个ppt,里面有对平面图的介绍:浅析最大最小定理在信息学竞赛中的应用. 这里 ...

  3. GUID的学习

    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...

  4. 奇葩问题: lsattr -d /data 显示:----------I--e- /data/

    奇葩问题 lsattr -d /data 显示:----------I--e- /data/ 问题影响: 其他权限中I(大写i) 目录下不能删除文件,不能添加文件 ================== ...

  5. CF916C Jamie and Interesting Graph

    思路:构造 实现: #include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n ...

  6. javascript中函数的四种调用模式详解

    介绍函数四种调用模式前,我们先来了解一下函数和方法的概念,其实函数和方法本质是一样,就是称呼不一样而已.函数:如果一个函数与任何对象关系,就称该函数为函数.方法:如果一个函数作为一个对象属性存在,我们 ...

  7. win7+idea+maven搭建spark源码阅读环境

    1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...

  8. Protostuff序列化和反序列化

    序列化和反序列化是在应对网络编程最常遇到的问题之一. 序列化就是将Java Object转成byte[]:反序列化就是将byte[]转成Java Object. 这里不介绍JDK serializab ...

  9. 浅谈Key-value 存储——SILT

    摘要:本文以文章SILT: A Memory Efficient High Performance Key-Value Store 为基础,探讨SILT存储系统是如何实现内存占用低和高性能的设计目标, ...

  10. swal用法

    swal({   title: "确认删除?",   text: "Your will not be able to recover this imaginary fil ...