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

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日

相关文章

  • js判断IE6/IE7/FF的代码[XMLHttpRequest]

    判断IE6/IE7/FF的代码是前端开发中常用的技巧之一,可以根据用户使用的浏览器类型,来应用不同的兼容性处理方式,提高网站的访问体验和兼容性。 这里我分享一下判断IE6/IE7/FF的代码的攻略步骤及其代码示例,希望对大家有所帮助。 步骤一:创建XMLHttpRequest对象 在JavaScript代码中,创建一个XMLHttpRequest对象,用来请…

    Java 2023年6月15日
    00
  • 非常全面的Java SpringBoot点赞功能实现

    Java SpringBoot点赞功能实现攻略 一、前置知识 在进行本文中介绍的Java SpringBoot点赞功能实现之前,我们需要掌握以下技能: 熟练掌握Java编程语言。 掌握Java SpringBoot框架的基本使用方法。 熟练使用MySQL数据库。 了解前端开发技术,如HTML、CSS、JavaScript等。 二、功能实现步骤 以下是在Jav…

    Java 2023年5月31日
    00
  • Eclipse添加xml文件提示及Hibernate配置学习

    让我为您详细讲解“Eclipse添加xml文件提示及Hibernate配置学习”的完整攻略。 Eclipse添加xml文件提示 问题描述 在Eclipse中,当我们需要添加一个XML文件时,常常会发现Eclipse没有提供对应的文件类型提示,让我们很难找到正确的文件类型进行添加。所以本文将为大家介绍如何在Eclipse中添加XML文件类型提示功能。 解决方法…

    Java 2023年5月20日
    00
  • Java 超详细讲解核心类Spring JdbcTemplate

    Java 超详细讲解核心类Spring JdbcTemplate 简介 Spring JdbcTemplate 是 Spring Framework 提供的一个核心类,用于操作关系型数据库。使用 JdbcTemplate 可以避免手动创建和释放数据库连接的繁琐过程,同时也可以更加方便地执行 SQL 查询和操作数据库。 配置 在使用 Spring JdbcTe…

    Java 2023年5月19日
    00
  • Java 最优二叉树的哈夫曼算法的简单实现

    Java 最优二叉树的哈夫曼算法的简单实现 一、哈夫曼编码算法简介 哈夫曼编码(Huffman coding)是一种无损压缩编码,广泛用于数据的压缩和传输。哈夫曼编码利用字符出现的频率进行编码,出现频率高的字符对应的编码短,反之出现频率低的字符对应的编码长,从而达到减少数据存储空间和传输带宽的目的。 哈夫曼编码的核心思想是构造哈夫曼树,将出现频率高的字符作为…

    Java 2023年5月19日
    00
  • mybatis plus实体类中字段映射mysql中的json格式方式

    下面是关于如何使用MybatisPlus实体类中字段映射MySQL中JSON格式的完整攻略。 1. 引入依赖 在pom.xml中加入以下依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter&l…

    Java 2023年5月26日
    00
  • Java 创建线程的两个方法详解及实例

    Java 创建线程的两个方法详解及实例 在 Java 中,创建线程有两种方法,一种是继承Thread类,另一种是实现Runnable接口。本文将详细介绍这两种方法并提供示例代码。 1. 继承Thread类 继承Thread类是一种创建线程的简单方法,只需要继承Thread类并重写run方法即可。 示例代码: public class MyThread ext…

    Java 2023年5月18日
    00
  • 关于Java for循环的正确用法介绍

    关于Java for循环的正确用法介绍 循环是Java中非常重要的一种语句。for循环是循环语句中最为常用和灵活的一种,它可以重复执行一段代码,在Java语言中,for循环的语法格式如下: for (初始化表达式; 布尔表达式; 更新表达式) { // 循环体 } 初始化表达式:初始化表达式在循环开始前执行,而且只会执行一次。这里我们一般做循环变量的初始化操…

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