用线程入库的操作 OperateDB 03

public static void batchInsert(TableName_Field[] tablelist)
{
long start = 0l;
if (logger.isInfoEnabled())
{
start = System.currentTimeMillis();
}
logger.debug("Ready insert TableName_Field size:" + tablelist.length);
Connection connection = ConnectionTools.getConnection();
PreparedStatement pstatement = null;
// 如果取不到数据库连接则抛出异常
if (connection == null)
{
logger.error("Can not get link Connection. ");
//throw new DbException("Can't get fetch Connection", -1);
}
//定义以表名为key的SQL语句.
Map<String, PreparedStatement> preParedMap = new HashMap<String, PreparedStatement>(
3);
try
{
String sqls=null;
for(TableName_Field table:tablelist)
{
if(preParedMap.get(table.getTableName())==null)
{
sqls=getPstatementsql(table);
pstatement=connection.prepareStatement(sqls);
preParedMap.put(table.getTableName(), pstatement);
putValue2Pstatement(table, pstatement);
pstatement.addBatch();
}
else
{
putValue2Pstatement(table,
preParedMap.get(table.getTableName()));
preParedMap.get(table.getTableName()).addBatch();
}
}
for(Map.Entry<String, PreparedStatement> entry : preParedMap
.entrySet())
{
entry.getValue().executeBatch();
}
connection.commit();
if(logger.isInfoEnabled())
{
logger.info("Insert TableName_Field[] size = "
+ tablelist.length + " and process time : "
+ (System.currentTimeMillis() - start));
}
}
catch (Exception e)
{
logger.error("Excute Batch sql exception :", e);
try
{
connection.rollback();
}
catch (SQLException e1)
{
logger.error(
"Excute Batch sql is rollback, but has exception :", e1);
}

}
finally
{
try
{
for (Map.Entry<String, PreparedStatement> entry : preParedMap
.entrySet())
{
entry.getValue().cancel();
entry.setValue(null);
}
}
catch (Exception e2)
{
logger.error("Can't close DB Connection", e2);
}
try
{
connection.close();
}
catch (Exception e2)
{
logger.error("Can't close DB Connection", e2);
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值