JDBCTM 指南:入门3 – DriverManager

下面是详细讲解“JDBCTM 指南:入门3 - DriverManager”的完整攻略。

JDBCTM 指南:入门3 - DriverManager

在本文中,我们将介绍JDBC中的DriverManager类,它是Java SQL API的一个基本组件,用于管理数据库驱动程序。

什么是 DriverManager

DriverManager是Java提供的一个用于负责管理JDBC驱动程序的类。当应用程序的Java代码使用JDBC API重点连接数据库时,该类负责在后台加载适当的驱动器程序。

所有的JDBC驱动程序都必须实现java.sql.Driver接口,以便被DriverManager识别和管理。

DriverManager的主要方法

下面是一些DriverManager类中的主要方法:

  • getConnection(String url, String user, String password):返回一个表示与给定数据库的连接的Connection对象。其中,url是数据库的URL,user是连接数据库的用户名,password是连接数据库的密码。
  • getDriver(String url):尝试查找已经注册的或者自动装载的Driver对象,以备给定的URL可以连接。如果没有则会抛出异常。
  • registerDriver(Driver driver):向DriverManager注册给定的 Driver对象。
  • deregisterDriver(Driver driver):注销已经注册的Driver对象。
  • getDrivers():返回 已经加载的所有 JDBC 驱动程序的枚举对象。

简单示例

下面是一个使用DriverManager连接MySQL数据库的简单示例:

import java.sql.*;

public class JDBCExample {
   // MySQL数据库连接的参数
   private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   private static final String DB_URL = "jdbc:mysql://localhost/TEST";
   private static final String USER = "root";
   private static final String PASS = "password";

   public static void main(String[] args) {
       Connection conn = null;
       Statement stmt = null;
       try {
           // 注册 JDBC 驱动器
           Class.forName(JDBC_DRIVER);

           // 打开一个连接
           System.out.println("连接到数据库...");
           conn = DriverManager.getConnection(DB_URL, USER, PASS);

           // 执行一个查询 SQL 语句
           System.out.println("实例化Statement对象...");
           stmt = conn.createStatement();
           String sql;
           sql = "SELECT id, name, age FROM Employees";
           ResultSet rs = stmt.executeQuery(sql);

           // 展开结果集数据库
           while(rs.next()) {
              // 通过字段检索
              int id  = rs.getInt("id");
              int age = rs.getInt("age");
              String name = rs.getString("name");

              // 输出数据
              System.out.print("ID: " + id);
              System.out.print(", 名字: " + name);
              System.out.print(", 年龄: " + age);
              System.out.println();
           }
           // 清理环境
           rs.close();
           stmt.close();
           conn.close();
       } catch(SQLException se) {
           // 处理 JDBC 错误
           se.printStackTrace();
       } catch(Exception e) {
           // 处理 Class.forName 错误
           e.printStackTrace();
       } finally {
           // 最后是用于关闭资源的块
           try {
               if(stmt != null) stmt.close();
           } catch(SQLException se2) {
           } // 什么都不做
           try {
               if(conn != null) conn.close();
           } catch(SQLException se) {
               se.printStackTrace();
           } // 结束finally try
       } // 结束try
       System.out.println("Goodbye!");
   }
}

这个示例演示了使用DriverManager连接MySQL数据库,执行了一个查询SQL语句,并将结果集输出到控制台。

DriverManager性能问题

请注意,DriverManager在连接数据库时通常会导致性能问题,因为它的连接字符串和驱动程序都存储在静态的单例变量中。这意味着每次使用getConnection方法时都会重新解析连接字符串,创建新的实例并加载驱动程序。

为了避免这些性能问题,建议使用连接池来管理数据库连接。

示例:使用Apache Common DBCP连接池

下面是使用Apache Common DBCP连接池连接MySQL数据库的示例:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;

public class DBCPExample {
   // MySQL数据库连接的参数
   private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   private static final String DB_URL = "jdbc:mysql://localhost/TEST";
   private static final String USER = "root";
   private static final String PASS = "password";

   // 连接池的参数
   private static final int MAX_TOTAL = 10;
   private static final int MAX_IDLE = 5;
   private static final int MIN_IDLE = 2;
   private static final boolean TEST_ON_BORROW = true;

   public static void main(String[] args) {
       try {
           // 创建带有连接池的数据源
           BasicDataSource dataSource = new BasicDataSource();
           dataSource.setDriverClassName(JDBC_DRIVER);
           dataSource.setUrl(DB_URL);
           dataSource.setUsername(USER);
           dataSource.setPassword(PASS);
           dataSource.setMaxTotal(MAX_TOTAL);
           dataSource.setMaxIdle(MAX_IDLE);
           dataSource.setMinIdle(MIN_IDLE);
           dataSource.setTestOnBorrow(TEST_ON_BORROW);

           // 从连接池中获取数据库连接
           System.out.println("连接到数据库...");
           Connection conn = dataSource.getConnection();

           // 执行一个查询 SQL 语句
           System.out.println("实例化PreparedStatement对象...");
           PreparedStatement ps = conn.prepareStatement("SELECT id, name, age FROM Employees");
           ResultSet rs = ps.executeQuery();

           // 展开结果集数据库
           while(rs.next()) {
              // 通过字段检索
              int id  = rs.getInt("id");
              int age = rs.getInt("age");
              String name = rs.getString("name");

              // 输出数据
              System.out.print("ID: " + id);
              System.out.print(", 名字: " + name);
              System.out.print(", 年龄: " + age);
              System.out.println();
           }
           // 清理环境
           rs.close();
           ps.close();
           conn.close();
           dataSource.close();
       } catch(Exception e) {
           e.printStackTrace();
       }
       System.out.println("Goodbye!");
   }
}

这个示例中,我们使用Apache Common DBCP连接池代替直接使用DriverManager来管理数据库连接。连接池中的连接是预先创建的,因此连接池中的所有连接都已经经过初始化并获得了与数据库的连接。我们只需要从连接池中请求一个可用连接即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JDBCTM 指南:入门3 – DriverManager - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • JDBC程序更新数据库中记录的方法

    下面是JDBC程序更新数据库中记录的方法的完整攻略。 更新数据 在JDBC程序中,更新数据使用UPDATE语句,具体步骤如下: 加载JDBC驱动程序 建立数据库连接 创建Statement对象或PreparedStatement对象 准备SQL语句 执行SQL语句 关闭数据库连接 下面是代码示例: // 加载JDBC驱动程序 Class.forName(&q…

    Java 2023年5月19日
    00
  • 浅谈SpringMVC对RESTfull的支持

    浅谈SpringMVC对RESTful的支持 什么是RESTful RESTful是一种基于HTTP协议的Web服务架构风格,它是一种轻量级、简单易用的架构风格,可以用于构建分布式系统。RESTful架构风格的核心是资源,每个资源都有一个唯一的URI,通过HTTP协议的GET、POST、PUT、DELETE等方法对资源进行操作。 SpringMVC对REST…

    Java 2023年5月17日
    00
  • IDEA插件开发之环境搭建过程图文详解

    首先,要进行IDEA插件开发,需要搭建相应的开发环境。下面是我准备的完整攻略: 环境准备 Java环境 IDEA插件开发需要Java的支持,所以需要先安装Java环境。如果还没有安装,可以在Java官网上下载对应版本的Java开发包,并按照官方文档进行安装操作。 IntelliJ IDEA安装 下载并安装IntelliJ IDEA开发环境。建议下载最新版本。…

    Java 2023年5月26日
    00
  • js动态创建标签示例代码

    动态创建标签是Javascript中常用的技术之一,可以在不改变HTML结构的情况下来改变页面内容,增强用户交互性。以下是JS动态创建标签示例代码的完整攻略: 创建元素 通过 document.createElement(tagName) 方法创建一个HTML元素,tagName是想要创建的元素的标签名,如div、p、span等。 var div = doc…

    Java 2023年6月15日
    00
  • JVM类加载机制原理及用法解析

    JVM类加载机制原理及用法解析 Java虚拟机是Java语言实现”Write Once, Run Anywhere”程序设计理念的一个关键组成部分,而Java虚拟机中最重要的一个子系统就是类加载子系统。该子系统负责对字节码文件(.class文件)中的类进行加载、验证、准备、解析、初始化等操作,从而在程序的运行中实现类的动态加载和管理。那么,下面我们就来详细讲…

    Java 2023年6月15日
    00
  • java实现银行家算法(Swing界面)

    Java实现银行家算法(Swing界面)攻略 银行家算法(Banker’s Algorithm)是一种经典的死锁预防算法,常用于操作系统中。在多进程环境下,进程需要占用资源,但是资源并不足够,如果资源分配策略不合理,则可能会出现死锁的情况。银行家算法通过资源的最大需求量和已分配需求量来判断分配资源是否会导致死锁的发生,从而保障系统运行的安全性。 本文基于Ja…

    Java 2023年5月19日
    00
  • SpringBoot整合sharding-jdbc实现分库分表与读写分离的示例

    下面我将为您介绍如何通过Spring Boot整合sharding-jdbc实现分库分表和读写分离。 一、概述 sharding-jdbc是一个基于JDBC规范的分布式数据库中间件,它提供了易于使用、高度定制化的分片、读写分离、柔性事务等功能。Spring Boot是一款开发快速的Java企业开发框架,在分布式项目中得到广泛应用。 对于需要进行数据分片和读写…

    Java 2023年5月20日
    00
  • Java日常练习题,每天进步一点点(48)

    该题目是一道Java语言的练习题,侧重于帮助学习者通过自我练习提高Java编程能力,增强对Java知识的掌握和理解。 本题主要包含以下几个部分: 题目描述:阐述了本题需要实现的功能要求以及细节要求,一般以文字的形式呈现。 代码说明:该部分通常提供的是代码的框架,可能包含已经定义好的变量、方法和类等基本的代码结构,需要学习者根据题目要求进行补充和完善。 解题思…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部