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日

相关文章

  • Spring Data JDBC介绍及实现代码

    Spring Data JDBC 是 Spring Framework 的一个子项目,它通过简化数据持久化操作来降低开发人员的工作量。Spring Data JDBC 不同于其他的 ORM 框架,它并不需要实体类与表间的映射,而是基于传统的 JDBC 封装来进行操作,并且支持 SQL 和存储过程的调用。 Spring Data JDBC 的使用包含以下几个步…

    Java 2023年5月20日
    00
  • 简单谈谈java中匿名内部类构造函数

    Java中匿名内部类是没有名称的内部类,可以用来简化代码的编写。匿名内部类是在使用的时候定义的,它没有构造函数名,创建对象时直接使用new关键字即可,构造函数的参数以及实现的抽象方法直接写在new后面的大括号中。 Java中匿名内部类的语法格式为: new 类或者接口名称(){ //实现类或接口中的抽象方法 } 这样创建的实例是匿名内部类的实例,该实例可以实…

    Java 2023年5月26日
    00
  • Java ArrayList实现班级信息管理系统

    下面我来详细讲解一下“Java ArrayList实现班级信息管理系统”的完整攻略,包括以下内容: 1. 环境准备 首先需要安装Java开发环境,建议使用JDK 8或更高版本。可以到Oracle官网下载安装。 2. 创建班级类 创建一个班级类,可以定义班级名称、班主任姓名、学生列表等属性和方法。一个简单的班级类的示例代码如下: public class Cl…

    Java 2023年5月24日
    00
  • spring mvc实现文件上传并携带其他参数的示例

    关于“spring mvc实现文件上传并携带其他参数的示例”的攻略,请参考以下步骤: 1. 添加依赖 在 pom.xml 文件中添加以下 spring-web 和 commons-fileupload 的依赖: <dependencies> <!– Spring Web –> <dependency> <grou…

    Java 2023年5月20日
    00
  • MySQL示例讲解数据库约束以及表的设计

    “MySQL示例讲解数据库约束以及表的设计”是一篇比较综合性的文章,内容在开始之前应该分章节引出。以下是我根据自己的经验和理解对这个主题进行的完整攻略。 1. 关于数据库约束 “数据库约束”是指在创建数据库表时,针对表内字段相关的行为限制和处理措施。常见的数据库约束有NOT NULL约束、UNIQUE约束、PRIMARY KEY约束、FOREIGN KEY约…

    Java 2023年5月26日
    00
  • spring学习JdbcTemplate数据库事务管理

    Spring学习JdbcTemplate数据库事务管理攻略 在Spring开发中,JdbcTemplate是一种非常常用的使用JDBC来访问和管理数据的工具。在进行数据库操作的过程中,事务管理是必不可少的一部分。通过使用JdbcTemplate和Spring提供的事务管理机制,我们可以非常方便地实现数据库事务管理。 准备工作 在使用JdbcTemplate进…

    Java 2023年5月20日
    00
  • springboot构造树形结构数据并查询的方法

    我会为你讲解“springboot构造树形结构数据并查询的方法”的完整攻略,以下是步骤: 1.引入依赖 首先,在pom.xml文件中引入mybatis-plus和fastjson依赖,用于操作数据库和处理Json数据。具体依赖如下: <dependencies> <dependency> <groupId>com.baom…

    Java 2023年5月20日
    00
  • java中读写Properties属性文件公用方法详解

    Java中读写Properties属性文件公用方法详解 什么是Properties属性文件? Properties属性文件是Java中常用的一种配置文件,使用键值对的形式来保存配置数据。通常我们将应用程序中需要用户自行配置的数据以及程序运行时需要用到的配置数据都存储在Properties属性文件中进行统一管理。这种文件通常采用.properties扩展名。 …

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