java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java JDBC批量插入

Java实现JDBC向数据库批量插入

作者:境里婆娑

在Java项目中可能会出现大量向数据库中插入的情况,本文主要介绍了Java实现JDBC向数据库批量插入,具有一定的参考价值,感兴趣的可以了解一下

使用Java数据库连接(JDBC)实现批量插入可以提高数据库操作的效率,特别是在需要一次性插入多条数据时。

一、JDBC实现批量插入几种方式

String sql = "INSERT INTO your_table (column1, column2) VALUES (?, ?), (?, ?), (?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置占位符的值
preparedStatement.setString(1, value1);
preparedStatement.setString(2, value2);
preparedStatement.setString(3, value3);
preparedStatement.setString(4, value4);
preparedStatement.setString(5, value5);
preparedStatement.setString(6, value6);
// 执行批处理
int[] batchResults = preparedStatement.executeBatch();
Statement statement = connection.createStatement();
statement.addBatch("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')");
statement.addBatch("INSERT INTO your_table (column1, column2) VALUES ('value3', 'value4')");
statement.addBatch("INSERT INTO your_table (column1, column2) VALUES ('value5', 'value6')");
int[] batchResults = statement.executeBatch();

二、PreparedStatement addBatch方法使用

PreparedStatementaddBatch方法用于将多个SQL语句添加到批处理中,以便一次性执行多个SQL操作。这可以显著提高数据库操作的性能,尤其是在需要插入、更新或删除多个数据行时。 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BatchInsertExample {
    public static void main(String[] args) {
        String jdbcUrl = "jdbc:mysql://localhost:3306/tbl";
        String username = "root";
        String password = "root";
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            // 建立数据库连接
            connection = DriverManager.getConnection(jdbcUrl, username, password);
            // SQL插入语句,使用占位符来防止SQL注入
            String sql = "INSERT INTO goods(name, price) VALUES (?, ?)";
            // 创建PreparedStatement对象,并设置为批处理模式
            preparedStatement = connection.prepareStatement(sql);
            connection.setAutoCommit(false); // 设置为手动提交
            // 循环添加多个批处理操作
            for (int i = 0; i < 10; i++) {
                // 设置占位符的值
                preparedStatement.setString(1, "value" + i);
                preparedStatement.setString(2, "value" + (i * 2));
                // 添加到批处理中
                preparedStatement.addBatch();
            }
            // 执行批处理
            int[] batchResults = preparedStatement.executeBatch();
            // 手动提交事务
            connection.commit();
            // 检查批处理执行结果
            for (int result : batchResults) {
                if (result == PreparedStatement.SUCCESS_NO_INFO || result == PreparedStatement.EXECUTE_FAILED) {
                    // 处理失败的情况
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
            try {
                // 发生异常时回滚事务
                if (connection != null) {
                    connection.rollback();
                }
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        } finally {
            try {
                // 关闭PreparedStatement和Connection
                if (preparedStatement != null) {
                    preparedStatement.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

在上述示例中,我们创建了一个PreparedStatement对象,将多个插入操作添加到批处理中,并最后执行批处理。注意以下几点:

connection.setAutoCommit是用于设置JDBC连接的自动提交模式的方法。在JDBC中,自动提交是指每个SQL操作是否都立即提交到数据库,或者是否需要手动调用commit方法来提交事务。

默认情况下,JDBC连接的自动提交模式是打开的(true)。这意味着每个SQL操作都会立即提交到数据库,形成一个独立的事务。这对于简单的操作非常方便,但在某些情况下,你可能希望将多个SQL操作组合成一个事务以确保数据的一致性。

你可以使用connection.setAutoCommit(false)来关闭自动提交模式,这样就可以手动管理事务。一旦关闭了自动提交,你可以通过调用connection.commit()来提交事务,将之前的SQL操作组合成一个事务。

三、Statement 和PreparedStatement 区别 

StatementPreparedStatement是Java JDBC(Java数据库连接)中两种执行SQL语句的方式,它们在使用和性能上有一些重要的区别。

Statement:

PreparedStatement:

综上所述,如果你需要执行动态SQL查询、提高安全性和性能,通常建议使用PreparedStatementStatement适用于那些不需要参数化查询,只需要执行静态SQL语句的情况。 

到此这篇关于Java实现JDBC向数据库批量插入的文章就介绍到这了,更多相关Java JDBC批量插入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文