当需要向mysql中插入大批量数据时,通过Java程序向数据库逐一插入会比较慢,而批量插入可以提高插入效率。下面就讲解一下如何Java实现批量向mysql写入数据的方法。
1. 准备工作
在开始之前,需要先检查好已经安装好了Mysql的Java驱动,可以在官网下载或在maven中引入即可。
另外,在写程序之前,需要先创建一个mysql表,以下示例代码将插入数据到名为"student"的表中。
CREATE TABLE `student` (
`id` int primary key not null auto_increment,
`name` varchar(20),
`age` int(3),
`gender` varchar(10),
`address` varchar(40)
);
2. Java批量插入数据
2.1 使用PreparedStatement
PreparedStatement是Java中操作数据库的常用类,使用该类插入数据时,批量插入只需要稍作修改即可。具体步骤如下:
- 创建PreparedStatement对象。
- 编写插入数据的SQL语句。
- 循环向preparedstatement对象添加参数并调用
addBatch()
方法。 - 使用
executeBatch()
方法一次性提交。
以下是示例代码:
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
String username = "root";
String password = "root";
Connection conn = null;
PreparedStatement ps = null;
try {
conn = DriverManager.getConnection(url, username, password);
conn.setAutoCommit(false);
String sql = "insert into student(name,age,gender,address) values (?,?,?,?)";
ps = conn.prepareStatement(sql);
for (int i = 1; i <= 100000; i++) {
ps.setString(1, "name_" + i);
ps.setInt(2, i % 100);
ps.setString(3, i % 2 == 0 ? "男" : "女");
ps.setString(4, "address_" + i);
ps.addBatch();
if (i % 10000 == 0) {
ps.executeBatch();
ps.clearBatch();
}
}
ps.executeBatch();
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
2.2 使用Statement
Statement也是Java中操作数据库的常用类,使用该类插入数据时,需要通过修改mysql配置文件实现批量插入。具体步骤如下:
- 创建Statement对象。
- 将mysql的批量插入属性设置成开启状态。
- 循环执行插入数据的SQL语句。
以下是示例代码:
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&rewriteBatchedStatements=true";
String username = "root";
String password = "root";
Connection conn = null;
Statement statement = null;
try {
conn = DriverManager.getConnection(url, username, password);
statement = conn.createStatement();
conn.setAutoCommit(false);
for (int i = 1; i <= 100000; i++) {
String sql = "insert into student(name,age,gender,address) values ('name_" + i + "'," + (i % 100) + ",'" + (i % 2 == 0 ? "男" : "女") + "','address_" + i + "')";
statement.addBatch(sql);
if (i % 10000 == 0) {
statement.executeBatch();
statement.clearBatch();
}
}
statement.executeBatch();
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (statement != null) {
statement.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
3. 总结
使用PreparedStatement或Statement均可实现批量插入mysql,PreparedStatement相比于Statement更加安全,且代码稍微复杂一些。同时,需要注意mysql的配置参数,保证批量插入的顺利进行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现批量向mysql写入数据的方法 - Python技术站