JDBCTM 指南:入门3 – DriverManager

yizhihongxing

下面是详细讲解“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日

相关文章

  • 基于Spring Boot应用ApplicationEvent案例场景

    下面是基于Spring Boot应用ApplicationEvent案例场景的完整攻略,包括了示例演示。 1. Spring Boot中的ApplicationEvent Spring Boot是基于Spring框架的快速开发工具,而Spring框架中的事件机制是一个非常重要的组件。在Spring Boot应用中,可以通过ApplicationEvent来实…

    Java 2023年5月19日
    00
  • Maven安装与配置图文教程

    Maven是一个Java项目的构建工具,通过它可以方便地进行项目管理,包括编译、测试、打包等。下面是Maven安装与配置的图文教程,包括Windows和Mac两个平台的操作步骤。 系统需求 Maven 3.x 或更高版本 JDK 1.8 或更高版本 Windows下安装与配置Maven 第一步:下载Maven 前往Maven官网 https://maven.…

    Java 2023年5月20日
    00
  • SpringBoot自定义Starter与自动配置实现方法详解

    SpringBoot自定义Starter与自动配置实现方法详解 什么是SpringBoot Starter SpringBoot Starter是一种用于扩展SpringBoot框架功能的一种技术手段,它可以将应用程序中涉及到的依赖库集成到SpringBoot环境中,使得应用程序更加简单、灵活且易于扩展。 Starter的实现过程主要有自定义Starter和…

    Java 2023年5月20日
    00
  • java 如何为文件及文件夹添加权限

    为文件或文件夹添加权限是一个常见的操作,Java可以通过修改文件或文件夹的访问控制列表(ACL)来实现对文件或文件夹的权限控制。为文件或文件夹添加权限的步骤如下: Step 1:创建一个ACL对象 java.nio.file.attribute.AclFileAttributeView类可以用来管理文件或文件夹的ACL。使用Files.getFileAttr…

    Java 2023年5月20日
    00
  • java连接sql server 2008数据库代码

    下面是Java连接SQL Server 2008数据库的完整攻略。 第一步:导入SQL Server JDBC驱动 在项目中导入SQL Server的JDBC驱动,可以从Microsoft官网下载。 下载完成后,在Java项目中引入JDBC驱动程序。如果使用Maven管理项目,可以在pom.xml文件中添加以下依赖: <dependency> &…

    Java 2023年5月19日
    00
  • SpringBoot+Quartz+数据库存储的完美集合

    下面我会详细讲解如何使用SpringBoot+Quartz+数据库存储来实现定时任务的完美集合。 1. 简介 Quartz是一个轻量级的、开源的定时任务框架,支持复杂的定时任务调度和集群调度,并且可以与Spring无缝集成。 SpringBoot是一个快速开发框架,提供了快速创建项目、简化配置、自动配置等特性。 结合SpringBoot和Quartz,可以快…

    Java 2023年5月20日
    00
  • Windows下Apache+Tomcat7负载均衡配置方法详解

    Windows下Apache+Tomcat7负载均衡配置方法详解 在Windows系统中使用Apache和Tomcat实现负载均衡是常见的配置方法之一。下面将详细讲解如何在Windows中实现Apache和Tomcat7的负载均衡配置。 步骤一:安装Apache和Tomcat7 首先需要在Windows系统中安装Apache和Tomcat7。可以从Apach…

    Java 2023年5月19日
    00
  • java后台防止表单重复提交方法详解

    针对Java后台防止表单重复提交的方法,我会提供以下完整攻略。 1. 问题定义 在Web应用中,提交表单是非常常见的操作。不过,我们可能会遇到一个叫“表单重复提交”的问题。其核心原因是当用户对某个表单数据进行了提交操作之后,客户端会向服务端发出请求,创建一个新的请求,这个新的请求和之前的请求有相同的数据。这个问题带来的结果可能是用户会在数据库中创建重复记录,…

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