使用JDBC在MySQL数据库中进行批量插入数据可以大大提高数据插入的效率。以下是详细步骤:
1.导入MySQL JDBC驱动
首先需要在Java项目中导入MySQL JDBC驱动包,这里以MySQL 8为例,可以从以下链接中下载:https://dev.mysql.com/downloads/connector/j/
2.创建JDBC连接
使用JDBC连接MySQL数据库需要以下信息:
- 数据库URL
- 数据库用户名
- 数据库密码
String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
String username = "root";
String password = "password";
Connection conn = DriverManager.getConnection(url, username, password);
3.创建批处理Statement
需要使用prepareStatement
方法创建一个PreparedStatement
对象,然后使用addBatch
方法将要插入的SQL语句添加到批处理中。
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)");
pstmt.setString(1, "张三");
pstmt.setInt(2, 18);
pstmt.addBatch();
pstmt.setString(1, "李四");
pstmt.setInt(2, 20);
pstmt.addBatch();
pstmt.setString(1, "王五");
pstmt.setInt(2, 22);
pstmt.addBatch();
上面的示例中,我们要将3条记录批量插入到student表中,通过setString
和setInt
方法设置要插入数据的值,然后通过addBatch
方法将SQL语句添加到批处理中。
4.执行批处理操作
调用executeBatch
方法执行批处理操作,并将返回结果存储在一个int
类型数组中。
int[] result = pstmt.executeBatch();
如果返回结果数组中的某个值为-2
,则表示插入数据的主键是自动生成的,我们可以通过getGeneratedKeys
方法获取插入数据的主键。
ResultSet rs = pstmt.getGeneratedKeys();
while (rs.next()) {
int id = rs.getInt(1);
System.out.println("插入数据的主键为:" + id);
}
5.关闭JDBC连接
使用完JDBC连接对象、PreparedStatement对象、ResultSet对象后,需要及时关闭它们。在Java 7及以上版本中,可以使用try-with-resources语句自动关闭这些资源。
try (ResultSet rs = pstmt.getGeneratedKeys();
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)")) {
// 执行批处理操作
int[] result = pstmt.executeBatch();
// 遍历结果集获取插入数据的主键
while (rs.next()) {
int id = rs.getInt(1);
System.out.println("插入数据的主键为:" + id);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
示例1:使用JDBC批量插入1000条数据
下面是一个简单示例,使用批处理插入1000条数据。
public static void batchInsert() throws SQLException {
String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
String username = "root";
String password = "password";
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)");
for (int i = 0; i < 1000; i++) {
pstmt.setString(1, "张三" + i);
pstmt.setInt(2, 18 + i);
pstmt.addBatch();
}
int[] result = pstmt.executeBatch();
System.out.println("成功插入" + result.length + "条数据");
pstmt.close();
conn.close();
}
示例2:从CSV文件中读取数据批量插入到MySQL数据库中
我们可以从CSV文件中读取数据批量插入到MySQL数据库中,以下是示例代码:
public static void batchInsertFromCSVFile(String filePath) throws IOException, SQLException {
String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
String username = "root";
String password = "password";
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO student(name, age) VALUES(?, ?)");
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
String[] values = line.split(",");
pstmt.setString(1, values[0]);
pstmt.setInt(2, Integer.parseInt(values[1]));
pstmt.addBatch();
}
}
int[] result = pstmt.executeBatch();
System.out.println("成功插入" + result.length + "条数据");
pstmt.close();
conn.close();
}
在调用该方法时,需要传入一个CSV文件的路径和文件名作为参数,例如:"C:/data.csv"。其中,数据文件中每一行的数据格式为:"姓名,年龄",例如:"张三,18"。
以上就是使用JDBC在MySQL数据库中进行批量插入数据的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用JDBC在MySQL数据库中如何快速批量插入数据 - Python技术站