java JDBC主要组件连接数据库及执行SQL过程示例全面详解

 更新时间:2023年06月05日 11:50:04   作者:移动安全星球  
这篇文章主要为大家介绍了java JDBC主要组件连接数据库及执行SQL的过程示例全面详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

什么是JDBC?

JDBC(Java Database Connectivity)是一个Java API,用于连接和执行SQL语句与关系型数据库进行交互。JDBC提供了一组接口和类,使Java程序能够与各种数据库通信,如MySQL、Oracle、PostgreSQL等。

JDBC的主要组件

JDBC主要由以下几个组件组成:

  • DriverManager:负责加载数据库驱动,并建立与数据库的连接。
  • Connection:表示与数据库的连接。
  • Statement:用于执行SQL语句。
  • PreparedStatement:用于执行预编译的SQL语句。
  • ResultSet:表示查询结果集。

连接数据库

在连接数据库之前,需要确保已经安装了相应的数据库驱动并将其添加到项目中。以下是一个简单示例,演示如何使用JDBC连接到MySQL数据库:

import java.sql.Connection;
import java.sql.DriverManager;
public class JdbcConnectExample {
    public static void main(String[] args) {
        try {
            // 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 连接到数据库
            String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "mypassword";
            Connection connection = DriverManager.getConnection(url, username, password);
            System.out.println("Connected to database!");
            // 关闭连接
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行SQL查询

要使用JDBC执行SQL查询,可以创建一个Statement对象,然后调用其executeQuery()方法。以下是一个简单示例,演示如何查询数据库中的数据:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcQueryExample {
    public static void main(String[] args) {
        try {
            // 加载数据库驱动并连接到数据库
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "mypassword";
            Connection connection = DriverManager.getConnection(url, username, password);
            // 创建Statement对象并执行SQL查询
            Statement statement = connection.createStatement();
            String sql = "SELECT id, name FROM users";
            ResultSet resultSet = statement.executeQuery(sql);
            // 处理结果集
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                System.out.println("ID: " + id + ", Name: " + name);
            }
            // 关闭资源
            resultSet.close();
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行SQL更新

要使用JDBC执行SQL更新(如插入、更新或删除),可以创建一个Statement对象,然后调用其executeUpdate()方法。以下是一个简单示例,演示如何向数据库中插入数据:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class JdbcUpdateExample {
    public static void main(String[] args) {
        try {
            // 加载数据库驱动并连接到数据库
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "mypassword";
            Connection connection = DriverManager.getConnection(url, username, password);
            // 创建Statement对象并执行SQL更新
            Statement statement = connection.createStatement();
            String sql = "INSERT INTO users (name, age) VALUES ('John Doe', 30)";
            int rowsAffected = statement.executeUpdate(sql);
            System.out.println("Rows affected: " + rowsAffected);
            // 关闭资源
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
**6. 使用PreparedStatement**
`PreparedStatement`是一个预编译的`Statement`对象,可以提高SQL语句的执行效率。它还可以防止SQL注入攻击。以下是一个简单示例,演示如何使用`PreparedStatement`插入数据:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JdbcPreparedStatementExample {
    public static void main(String[] args) {
        try {
            // 加载数据库驱动并连接到数据库
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "mypassword";
            Connection connection = DriverManager.getConnection(url, username, password);
            // 创建PreparedStatement对象并执行SQL更新
            String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, "Jane Doe");
            preparedStatement.setInt(2, 28);
            int rowsAffected = preparedStatement.executeUpdate();
            System.out.println("Rows affected: " + rowsAffected);
            // 关闭资源
            preparedStatement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

事务处理

事务是一组逻辑操作单元,执行这些操作要么全部成功,要么全部失败。在JDBC中,可以使用Connection对象的commit()rollback()方法进行事务处理。以下是一个简单示例,演示如何使用事务处理:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class JdbcTransactionExample {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            // 加载数据库驱动并连接到数据库
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "mypassword";
            connection = DriverManager.getConnection(url, username, password);
            // 关闭自动提交(开启事务)
            connection.setAutoCommit(false);
            // 执行SQL更新
            String sql = "UPDATE users SET age = age + 1 WHERE id = ?";
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1, 1);
            preparedStatement.executeUpdate();
            // 提交事务
            connection.commit();
            System.out.println("Transaction committed.");
        } catch (Exception e) {
            // 回滚事务
            try {
                if (connection != null) {
                    connection.rollback();
                    System.out.println("Transaction rolled back.");
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (preparedStatement != null) {
                    preparedStatement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

关闭资源

在JDBC中,需要确保及时关闭资源,如ConnectionStatementResultSet等。可以使用close()方法或者Java 7中引入的try-with-resources语句进行资源关闭。以下是一个简单示例,演示如何使用try-with-resources关闭资源:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcCloseResourceExample {
    public static void main(String[] args) {
        try {
            // 加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 连接到数据库
            String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "mypassword";
            try (Connection connection = DriverManager.getConnection(url, username, password);
                 Statement statement = connection.createStatement()) {
                // 执行SQL查询并处理结果集

以上就是java JDBC主要组件连接数据库及执行SQL过程示例全面详解的详细内容,更多关于java JDBC连接数据库的资料请关注脚本之家其它相关文章!

相关文章

  • Springboot工具类FileCopyUtils使用教程

    Springboot工具类FileCopyUtils使用教程

    这篇文章主要介绍了Springboot内置的工具类之FileCopyUtils的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java ArrayList的基本概念和作用及动态数组的机制与性能

    Java ArrayList的基本概念和作用及动态数组的机制与性能

    在Java中,ArrayList是一个实现了List接口的动态数组,它可以根据需要自动增加大小,因此可以存储任意数量的元素,这篇文章主要介绍了探秘Java ArrayList的基本概念和作用及动态数组的机制与性能,需要的朋友可以参考下
    2023-12-12
  • Java Socket上的Read操作阻塞问题详解

    Java Socket上的Read操作阻塞问题详解

    这篇文章主要介绍了Java Socket上的Read操作阻塞问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot 2.x整合Log4j2日志的详细步骤

    SpringBoot 2.x整合Log4j2日志的详细步骤

    log4j2优越的性能其原因在于log4j2使用了LMAX,一个无锁的线程间通信库代替了,logback和log4j之前的队列,并发性能大大提升,下面这篇文章主要给大家介绍了关于SpringBoot 2.x整合Log4j2日志的相关资料,需要的朋友可以参考下
    2022-10-10
  • Java导出Excel统计报表合并单元格的方法详解

    Java导出Excel统计报表合并单元格的方法详解

    我们在日常编程过程中,总是会碰见导出相关表格信息的需求,所以就让我们一起来学习一下,这篇文章主要给大家介绍了关于Java导出Excel统计报表合并单元格的相关资料,需要的朋友可以参考下
    2021-10-10
  • InputStream数据结构示例解析

    InputStream数据结构示例解析

    这篇文章主要为大家介绍了InputStream数据结构示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 一个简陋的java图书管理系统

    一个简陋的java图书管理系统

    这篇文章主要为大家详细介绍了一个简陋的java图书管理系统,简单的实现功能测试,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Springboot获取jar包中resources资源目录下的文件

    Springboot获取jar包中resources资源目录下的文件

    今天在项目中遇到一个业务场景,需要用到resources资源目录下的文件,本文主要介绍了Springboot获取jar包中resources资源目录下的文件,感兴趣的可以了解一下
    2023-12-12
  • Javabean转换成json字符并首字母大写代码实例

    Javabean转换成json字符并首字母大写代码实例

    这篇文章主要介绍了javabean转成json字符并首字母大写代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Spring实现动态切换多数据源的解决方案

    Spring实现动态切换多数据源的解决方案

    这篇文章主要给大家介绍了Spring实现动态切换多数据源的解决方案,文中给出了详细的介绍和示例代码,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考学习,下面来一起看看吧。
    2017-01-01

最新评论