连接Oracle,Oracle批量插入

1、加载资源

DriverManagerDataSource dataSource = JdbcTemplateUtil.getDataSource("driverClassName", "url", "username", "password");
JdbcTemplate jdbcTemplate = JdbcTemplateUtil.getJdbcTemplate(dataSource); 

2、执行查询sql

jdbcTemplate.queryForList(sql);

3、事务管理

DataSourceTransactionManager transactionManager = JdbcTemplateUtil.getTransactionManager(dataSource);
TransactionStatus status = JdbcTemplateUtil.getTransactionStatus(transactionManager,
						TransactionDefinition.PROPAGATION_REQUIRED);
String sql = "insert into db(id1,id2) values(?,?)";
try {
    //初始化事务
	jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
        // 这个方法设定更新记录数,通常saveList里面存放的都是我们要更新的,所以返回list.size();
	    public int getBatchSize() {
	        return saveList.size();
	    }
	    public void setValues(PreparedStatement ps, int i) throws SQLException {
		    Map<String, Object> map = (Map<String, Object>) saveList.get(i);
            //根据sql问号顺序
		    ps.setString(1, StringUtils.isEmpty(map);
		    ps.setString(2, StringUtils.isEmpty(data);
	    }
	});
    //提交事务
	transactionManager.commit(status);
} catch (Exception e) {
	// 出现异常,回滚事务,以免出现脏数据,数据不完整的问题
	transactionManager.rollback(status);
	log.info(MessageFormat.format("入库操作异常。数据为:[{0}]", e.toString()));
	e.printStackTrace();
}

做过一些项目,以前没想过总结。特此总结一下,希望能帮助需要帮助的人同学,如有描述不准确的,恳请指正,谢谢。

 

=============补充分割线==========

工具类:

public class JDBCConnPoolUtil {

	public JDBCConnPoolUtil() {
		super();
	}
	static LinkedList<Connection> pool = null;
	public static Connection getConnection(String driver, String url, String username, String password, int initSize)
			throws SQLException, ClassNotFoundException {
		Connection conn = null;
		// 判断是否为空
		if (pool == null) {
			pool = new LinkedList<Connection>();
			Class.forName(driver);
			for (int i = 0; i < initSize; i++) {
				conn = DriverManager.getConnection(url, username, password);
				pool.add(conn);
			}
		}
		if (pool.size() > 0) {
			conn = pool.removeFirst();
		} else {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
		}
		return conn;
	}
	// 写回收方法
	public static void backConnection(Connection conn) {
		if (pool.size() > 2) {
			closeConn(conn);
		} else {
			pool.add(conn);
		}
	}
	public static void closeRS(ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	public static void closeStat(Statement stat) {
		if (stat != null) {
			try {
				stat.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	public static void closeConn(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

代码: 

public static void InsertVehData(List<Map<String, Object>> dataList, String data) {
        System.out.println("插入操作");
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = JDBCConnPoolUtil.getConnection("oracle.jdbc.driver.OracleDriver", "数据库地址", "账号", "密码", 1);
            String sql = "insert into temp t (t.vin,t.cdate,t.vom) values(?,?,?) ";
            conn.setAutoCommit(false);
            ps = conn.prepareStatement(sql);
            for (Map<String, Object> map : dataList) {
                ps.setString(1, map.get("vin").toString());
                ps.setString(2, data);
                ps.setString(3, map.get("vecOptMod").toString());
                ps.addBatch();
            }
            ps.executeBatch();
            conn.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCConnPoolUtil.closeStat(ps);
            JDBCConnPoolUtil.backConnection(conn);
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值