详解JDBC的概念及获取数据库连接的5种方式

yizhihongxing

JDBC概念介绍

Java数据库连结(JDBC)是用Java编写的一个API(应用程序编程接口),用于与数据库通讯及操作的一套规范接口。它可以让我们用Java语言访问各种不同的SQL数据库。

获取数据库连接的5种方式

前提条件

在使用JDBC连接数据库之前,需要首先导入mysql的JDBC驱动JAR包。这里以MySQL为例,我们需要在Maven或Gradle中引入如下依赖:

<!-- MySQL JDBC -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.20</version>
</dependency>

该JAR包可以在MySQL官方网站上下载。

另外,需要确保已经安装并启动了MySQL数据库服务。

1. DriverManager获取数据库连接

在JDBC中获取数据库连接的最基本方法是使用DriverManager类。它提供了getConnection方法,通过提供数据库连接URL、用户名和密码等信息,返回一个连接到数据库的Connection对象。

String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";

// 注册 JDBC 驱动
Class.forName("com.mysql.cj.jdbc.Driver");

// 获取连接
Connection conn = DriverManager.getConnection(url, user, password);

其中,Class.forName("com.mysql.cj.jdbc.Driver");是加载MySQL JDBC驱动的语句,可用于静态代码块中,或者放在main方法中。

2. DataSource获取数据库连接

DataSource是一个数据源接口,它有多种实现,比如BasicDataSourcec3p0DBCPHikariCP等。其中,HikariCP是市面上最快的连接池之一。

String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";

HikariConfig config = new HikariConfig();
config.setJdbcUrl(url);
config.setUsername(user);
config.setPassword(password);
config.setMaximumPoolSize(10);

DataSource dataSource = new HikariDataSource(config);

Connection conn = dataSource.getConnection();

在上述代码中,我们用了HikariCP作为连接池,并设置了最大连接池数量为10。

3. BasicDataSource获取数据库连接

BasicDataSource是一种开源的连接池,它实现了DataSource接口。

String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
dataSource.setMaxTotal(10);

Connection conn = dataSource.getConnection();

在上述代码中,我们用了BasicDataSource作为连接池,并设置了最大连接池数量为10。

4. JNDI获取数据库连接

在Java Web开发中,可以通过JNDI(Java Naming and Directory Interface)来获取数据库连接,它提供了一种统一的访问方式。在Tomcat等Web容器中,我们可以使用Context.xml或者Web.xml进行配置。

<Resource name="jdbc/your_database" auth="Container"
          type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/your_database" username="your_username" password="your_password"
          maxTotal="10" maxIdle="5" />
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:/comp/env");
DataSource dataSource = (DataSource) envCtx.lookup("jdbc/your_database");

Connection conn = dataSource.getConnection();

在上述代码中,我们使用了Tomcat的Context.xml文件对数据源进行配置,并在代码中通过JNDI方式获取数据库连接。

5. 第三方库获取数据库连接

除了以上几种方式以外,还有一些第三方JDBC与数据库连接相关的库,如JOOQMyBatisSpring JDBC等,它们提供了更加灵活、高级的SQL操作方式。

// 使用JOOQ获取数据库连接
DSLContext dslContext = DSL.using(dataSource, SQLDialect.MYSQL);
Connection conn = dslContext.connection();

在上述代码中,我们使用了JOOQ库获取数据库连接,并通过DSLContext类提供的connection方法获取Connection对象。

示例说明

示例1:使用DriverManager连接MySQL

在此示例中,我们实现了一个连接MySQL数据库的简单Java程序,并通过Statement对象执行了一条查询语句。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MySQLExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_database";
        String user = "your_username";
        String password = "your_password";

        Connection conn = null;
        Statement stmt = null;
        try {
            // 注册 JDBC 驱动
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 打开连接
            conn = DriverManager.getConnection(url, user, password);

            // 执行查询
            stmt = conn.createStatement();
            String sql = "SELECT id, name, age FROM your_table";
            ResultSet rs = stmt.executeQuery(sql);

            // 处理结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");

                System.out.println("ID:" + id + ", Name:" + name + ", Age:" + age);
            }

            // 释放资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
            } catch (Exception e) {}
            try {
                if (conn != null) conn.close();
            } catch (Exception e) {}
        }
    }
}

上述代码中,我们通过DriverManager类获取了MySQL数据库的连接,并使用Statement对象执行了一条查询语句,最后输出了查询结果。

示例2:使用HikariCP连接MySQL

在此示例中,我们使用HikariCP作为连接池来连接MySQL数据库,并通过PreparedStatement对象执行了一条插入语句。

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.UUID;

public class MySQLExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_database";
        String user = "your_username";
        String password = "your_password";

        HikariConfig config = new HikariConfig();
        config.setJdbcUrl(url);
        config.setUsername(user);
        config.setPassword(password);
        config.setMaximumPoolSize(10);

        HikariDataSource dataSource = new HikariDataSource(config);

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            // 获取连接
            conn = dataSource.getConnection();

            // 执行插入
            pstmt = conn.prepareStatement("INSERT INTO your_table (id, name, age) VALUES (?, ?, ?)");
            pstmt.setString(1, UUID.randomUUID().toString());
            pstmt.setString(2, "Wendy");
            pstmt.setInt(3, 25);
            int result = pstmt.executeUpdate();
            System.out.println("Insert rows: " + result);

            // 释放资源
            pstmt.close();
            conn.close();
            dataSource.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (pstmt != null) pstmt.close();
            } catch (Exception e) {}
            try {
                if (conn != null) conn.close();
            } catch (Exception e) {}
        }
    }
}

上述代码中,我们使用了HikariCP作为连接池,并使用了PreparedStatement对象执行了一条插入语句,最后输出了插入结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JDBC的概念及获取数据库连接的5种方式 - Python技术站

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

相关文章

  • Java 锁的知识总结及实例代码

    Java 锁的知识总结及实例代码 在 Java 中,锁机制是一个非常重要的多线程编程的知识点。下面对 Java 锁相关的知识进行总结,并提供两个示例代码说明锁机制的应用。 概念 互斥锁(mutex):用于控制对共享资源的访问。对于任一个时刻,只有一个线程可以访问共享资源,其他的线程必须等待。 读写锁(ReadWriteLock):允许多个线程同时读共享资源,…

    Java 2023年5月23日
    00
  • Java的Struts框架报错“InvalidPathException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidPathException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置路径,则可能会出现此。在这种情况下,需要检查配置文件以解决此问题。 路径错误:如果路径不正确,则可能会出现此。在这种情况下,需要检查路径以解决此问题。 以下是两个实例: 例 1 如果配置文件中没有…

    Java 2023年5月5日
    00
  • Java Apache Commons报错“ConcurrentModificationException”的原因与解决方法

    当使用Java的Struts框架时,可能会遇到“ActionFormException”错误。这个错误通常由以下原因之一起: 表单验证失败:如果表单验证失败,则可能会出现此错误。在这种情况下,需要检查表单验证以解决此问题。 表单配置错误:如果表单配置错误,则可能会出现此错误。在这种情况下,需要检查表单配置以解决此问题。 以下是两个实例: 例1 如果表单验证失…

    Java 2023年5月5日
    00
  • kafka与storm集群环境的安装步骤详解

    Kafka与Storm集群环境的安装步骤详解 Kafka与Storm是一种在大数据处理及分析领域应用广泛的开源组件,它们分别针对消息队列和流处理进行特性优化设计。在实际使用中,需要将它们结合在一起建立完整的流处理环境。本篇文章将介绍Kafka与Storm集群环境的安装步骤,供读者参考。 硬件环境要求 以下是建立Kafka与Storm集群所需的硬件环境要求: …

    Java 2023年5月20日
    00
  • Java之JSP教程九大内置对象详解(上篇)

    下面我来详细讲解“Java之JSP教程九大内置对象详解(上篇)”的完整攻略。 什么是九大内置对象? JSP的九大内置对象是指在JSP页面中JSP引擎默认提供的九个对象,包括request、response、session、application、page、out、config、pageContext、exception对象。 request对象 reques…

    Java 2023年5月26日
    00
  • Spring Data JPA踩坑记录(@id @GeneratedValue)

    Spring Data JPA踩坑记录(@id @GeneratedValue) 问题描述 在使用Spring Data JPA进行开发时,当使用 @Id 和 @GeneratedValue 注解来配置主键时,如果没有正确设置主键生成策略,就有可能会遇到一些奇怪的问题。 问题原因 在JPA规范中,对于主键生成策略,可以通过 @GeneratedValue注解…

    Java 2023年6月2日
    00
  • JavaScript对象数组如何按指定属性和排序方向进行排序

    对JavaScript对象数组进行排序可以使用JavaScript内置的sort()函数,它可以按照指定的属性和排序方向进行排序。 首先,需要使用sort()函数来定义排序规则。sort()函数的参数是一个函数,该函数负责定义排序规则。该函数接收两个参数,分别是要进行比较的两个元素。该函数需要返回一个数值类型的值,根据返回值的不同,sort()函数决定将两个…

    Java 2023年5月19日
    00
  • Mybatis实现动态SQL编写详细代码示例

    针对”Mybatis实现动态SQL编写详细代码示例”这个话题,我为您提供以下完整攻略。 前言 在Mybatis中,动态SQL是非常强大和常用的功能。通过动态SQL可以根据输入参数的不同来生成不同的SQL语句,从而实现更加灵活的数据查询和操作。Mybatis提供了多种动态SQL的方式,如if/where/set/foreach等。本文将详细介绍Mybatis实…

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