1.实例
@Test
public void teseInsertBatch()
{
Connection conn = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");
conn.setAutoCommit(false);
String sql = "INSERT INTO person(name,age) VALUES(?,?)";
PreparedStatement prest = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
for(int i = 0; i < 100; i++)
{
prest.setString(1, "192.168.1.1");
prest.setInt(2, i);
prest.addBatch();
}
prest.executeBatch();
conn.commit();
conn.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
catch (ClassNotFoundException ex)
{
ex.printStackTrace();
}
finally
{
if(conn!=null)
{
try
{
conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}2.解释
PreparedStatement java.sql.Connection.prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
说明一下构造PreparedStatement最后两个参数的意思
(1)resultSetType
指定ResultSet的type,可选的值有:
1)TYPE_FORWARD_ONLY
缺省类型。只允许向前访问一次,并且不会受到其他用户对数据库所做修改的影响
2)TYPE_SCROLL_INSENSITIVE
允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第4个记录或者从当前位置后移2个记录。不会受到其他用户对该数据库所做更改的影响
3)TYPE_SCROLL_SENSITIVE
像TYPE_SCROLL_INSENSITIVE一样,允许在记录中定位。这种类型受其他用户所做更改的影响。如果用户在执行完查询后删除一个记录,那么记录将从resultSet中消失。类似的,对数据的修改也将反映在ResultSet中
(2)resultSetConcurrency
指定ResultSet的并发性,表示是否可以更新ResultSet,可选的值有:
1)CONCUR_READ_ONLY
这是 缺省值,表示不可以更新2)CONCUR_UPDATABLE
表示可以更新ResultSet
注意:使用批量操作必须要取消事务的自动提交,所以必须有:
conn.setAutoCommit(false);
1815

被折叠的 条评论
为什么被折叠?



