OracleJDBC之防sql注入带事务回滚和批量提交Demo
如题,直接上代码:
public static void Demo(List<List> list) {
Connection conn = null;
PreparedStatement pst = null;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@IP:PORT/orcl";
String username = "NAME";
String password = "PSWORD";
if (conn == null) {
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, username, password);
Date date = new Date(0L);
String sql = "INSERT INTO BI_VISIT_COUNT (VC_ID,VC_VALUE,VC_LATEST_TIME)";
sql += "VALUES (?, ?, ?)";
System.out.println(sql);
//关闭事务自动提交
conn.setAutoCommit(false);
pst = conn.prepareStatement(sql);
for (List<String> list1 : list) {
pst.setString(1, list1.get(0));
pst.setInt(2, Integer.parseInt(list1.get(1)));
pst.setDate(3, date);
System.out.println(Integer.parseInt(list1.get(1)));
pst.addBatch();
}
//执行批量更新
pst.executeBatch();
//提交事务
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
try {
//报错回滚
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
}
}