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日

相关文章

  • jsp Hibernate批量更新和批量删除处理代码

    下面我将为您详细讲解“jsp Hibernate批量更新和批量删除处理代码”的完整攻略。 什么是Hibernate? Hibernate是一个开源的面向关系型数据库的Java对象关系映射(ORM)框架,它将Java类与数据库表映射,将Java对象与数据库记录进行转换。使用Hibernate可以让我们像操作Java对象一样操作数据库,从而提高开发效率。 批量更…

    Java 2023年6月15日
    00
  • eclipse配置tomcat10的详细步骤总结

    以下是详细讲解”Eclipse配置Tomcat10的详细步骤总结”的完整攻略: 1. 下载并解压Tomcat10 首先,从Tomcat官方网站https://tomcat.apache.org/下载Tomcat10的二进制文件,并解压至本地磁盘上的任意目录下,例如: D:\tomcat10 2. 在Eclipse中配置Tomcat 点击Eclipse的”Wi…

    Java 2023年5月19日
    00
  • Java多线程CountDownLatch的实现

    下面是我对于“Java多线程CountDownLatch的实现”的完整攻略。 CountDownLatch简介 CountDownLatch是JavaSE5中并发包(java.util.concurrent)中的一个类,它可以允许一个线程等待一组线程完成操作后再继续执行。 具体来说,CountDownLatch 常用于某个线程需要等待其它线程执行完毕某些操作…

    Java 2023年5月18日
    00
  • 使用fastjson中的JSONPath处理json数据的方法

    使用fastjson中的JSONPath处理json数据的方法,可以方便地获取、筛选、输出JSON中所需的数据。下面是具体的攻略: 一、什么是JSONPath JSONPath是一种类似XPath的JSON操作语言,它可以方便地查询JSON文本,并支持通配符、条件表达式、函数等多种用法。JSONPath常见于JSON解析库中,比如fastjson、Json.…

    Java 2023年5月26日
    00
  • 基于spring-mvc.xml和application-context.xml的配置与深入理解

    以下是关于“基于spring-mvc.xml和application-context.xml的配置与深入理解”的完整攻略,其中包含两个示例。 1. 前言 Spring MVC是一种常用的Java Web开发框架,它提供了一种灵活的方式来开发Web应用程序。在Spring MVC中,可以使用spring-mvc.xml和application-context.…

    Java 2023年5月16日
    00
  • Java如何判断字符串中是否包含某个字符

    如果需要在Java中判断一个字符串是否包含某个字符,可以使用String类的contains()方法或indexOf()方法。 方法1:contains()方法 contains()方法用于判断一个字符串中是否包含另一个字符串。它返回一个布尔值,表示待判断的字符串是否包含指定的字符或字符串。 下面是一个例子: String str = "hello…

    Java 2023年5月27日
    00
  • springboot jpa分库分表项目实现过程详解

    那我就来详细讲解一下“springboot jpa分库分表项目实现过程详解”的完整攻略。 1. 什么是分库分表 分库分表是一种水平扩展数据库的方式。 在一个分库分表的架构中,一个应用的数据被分为多个库或表。 这些库或表通常基于某个可配置的关键字划分数据。 比如用户ID可以作为划分关键字,用户的数据会根据关键字散列到多个库或表中。 2. 分库分表的优缺点 2.…

    Java 2023年5月20日
    00
  • java中Timer定时器的使用和启动方式

    Java中Timer定时器的使用和启动方式 Timer是Java中的一个定时调度工具,通过它可以实现定时任务的执行。本文将对Timer定时器的使用和启动方式进行详细讲解。 Timer类 Timer类是Java的一个定时调度工具,它可以在指定的时间间隔内执行任务。它位于java.util包中。 Timer类的构造方法如下: public Timer() pub…

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