标签:入参 auto 脏数据 values void nec 属性 创建 trace
这两个对象的区别:
1.Statement它更适合执行不同sql的批处理,它没有提供预处理功能,性能比较低。
2.PreparedStatement它适合执行相同的批处理,它提供了预处理功能,属性比较高。
/**
* @param args
* @throws SQLException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
// 定义sql 语句
String sql1 = "create table person(id int,name varchar(20))";
String sql2 = "insert into person values(1,‘tom‘)";
String sql3 = "insert into person values(2,‘fox‘)";
String sql4 = "insert into person values(3,‘tony‘)";
String sql5 = "update person set name=‘张三‘ where id=1";
String sql6 = "delete from person where id=3";
Connection conn = jdbcUtils.getConnection();
Statement st = conn.createStatement();
// 添加批处理sql
st.addBatch(sql1);
st.addBatch(sql2);
st.addBatch(sql3);
st.addBatch(sql4);
st.addBatch(sql5);
st.addBatch(sql6);
// 执行批处理sql
st.executeBatch();
st.clearBatch();
st.close();
conn.close();
}
使用版本高一点的 jdbc的jar包时加入参数可开启缓存在url中加参数:
?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true
/**
* @param args
* @throws SQLException
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException,
SQLException {
String sqlString = "insert into person values(?,?)";
Connection conn = jdbcUtils. getConnection();
PreparedStatement pst = conn.prepareStatement(sqlString);
long l = System. currentTimeMillis();
for ( int i = 0; i < 10000; i++) {
pst.setInt(1, i);
pst.setString(2, "name" + i);
pst.addBatch();
if (i % 1000 == 0) {
pst.executeBatch();
pst.clearBatch(); // 清空缓存
}
}
pst.executeBatch();
pst.close();
conn.close();
System. out.println(System. currentTimeMillis() - l);
}
方法:
-
public static Connection getConnection(){
-
-
Class.forName("com.mysql.jdbc.Driver");
-
ct = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","squirrel","xiaoyang");
-
-
-
-
-
-
-
-
public static void closeConnection(){
-
-
-
-
-
-
-
-
-
-
} catch (SQLException e) {
-
-
-
-
测试方法:
-
-
-
-
public static void excuteBatchInsertDatabase(){
-
-
-
-
-
-
ps=ct.prepareStatement("insert into user(name,passwd,age,gender) values(?,?,?,?)");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
} catch (SQLException e1) {
-
-
-
-
-
-
执行excuteBatchInsertDatabase()方法数据库记录:
数据库数据记录表明:sql语句批量执行成功
注意:
批量查询最好交由一个事务组控制,如果出现操作异常可以进行事务回滚,不至于造成部分数据更新部分数据更新失败的尴尬局面,避免你脏数据污染数据库
Statement及PreparedStatement执行多个sql
标签:入参 auto 脏数据 values void nec 属性 创建 trace
原文地址:https://www.cnblogs.com/endv/p/12017452.html