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. Ubuntu install and uinstall

    一.Ubuntu中软件安装方法 1.APT方式 (1)普通安装:apt-get install softname1 softname2 -; (2)修复安装:apt-get -f install so ...

  2. tac命令的实现 分类: linux 2014-06-02 00:08 344人阅读 评论(0) 收藏

    此程序实现简化的linux中的tac命令.即对文件按行倒序输出. 首先将文件指针置于文件尾,从后向前移动指针, 将两个换行符'\n'间的内容作为一行输出. #include<stdio.h> ...

  3. 最简单的struts实例介绍

    struts2环境配置   struts2框架,大多数框架都在使用.由于工作需要,开始做Java项目.先学个struts2. 一.下载struts2 有好多版本,我下载的是struts-2.2.1.1 ...

  4. IOS - PDF合并 - 转

    来自:http://www.cnblogs.com/tx8899/p/4082749.html #pragma mark - Merge PDF - (void)mergePDF { NSArray  ...

  5. iOS开发系列--通知与消息机制--转

    来自:http://www.cocoachina.com/ios/20150318/11364.html 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户 ...

  6. JMeter(十三)进行简单的数据库(mysql)压力测试

    1.点击测试计划,再点击“浏览”,把JDBC驱动添加进来: 注:JDBC驱动一般的位置在java的安装地址下,路径类似于:    \java\jre\lib\ext 文件为:mysql-connect ...

  7. SpringBoot_自定义配置属性

    @ConfigurationProperties 在aplication.properties 中添加如下一段配置: mysql.jdbcName=com.mysql.jdbc.Driver mysq ...

  8. CCF|路径解析|Java

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=ne ...

  9. R Programming week 3-Debugging

    Something’s Wrong! Indications that something’s not right message: A generic notification/diagnostic ...

  10. C++学习_继承覆盖重载

    今天通过对实验二继承,重载,覆盖的学习,让我更深一步理解了这些概念的区别. 首先来明确一个概念,函数名即地址,也就是说函数名就是个指针. 编译阶段,编译器为每个函数的代码分配一个地址空间并编译函数代码 ...