oracle批量添加数据

来源:互联网 发布:国际空间站直播软件 编辑:程序博客网 时间:2024/06/14 00:58
很久没有做数据库的批量处理,最近恰好遇到这个任务,原本想用基础的addBatch,但是发现有点复杂,临时要用的话不方便,所以简单写了一个批处理的demo,关于一些特殊类型的转换,自行在接口中做修改,后期会陆续添加update,select以及delete等批处理demo,不足之处还请给出高见,谢谢。




/**
     * Do insert with a list.
     *
     * @param tableName
     *            表名
     * @param cols
     *            添加数据的列名


     * @param data
     *            对应cols的参数集(必须与cols里面的字段对应)  


     * @return a boolean whose success return true then return false.
     */


public static boolean saveData(String tableName, List<String> cols, List<List<String>> data) {
        if (null == data || 0 == data.size() || null == cols || 0 == cols.size() || data.get(0).size() != cols.size()) {
            logger.error("Input paras have problems, plz check.");
            return false;
        }


        StringBuffer sb = new StringBuffer("insert into ");
        sb.append(tableName + "(");
        for (String col : cols)
            sb.append(col + ",");
        sb.replace(sb.length() - 1, sb.length(), ")");
        int preLen = sb.length();


        // insert multiple data once
        for (List<String> item : data) {
            if (sb.length() == preLen)
                sb.append(" select ");
            else
                sb.append(" union select ");
            for (String tt : item) {
                if (tt != null)
                    sb.append("'" + tt + "'" + ",");
                else
                    sb.append(tt + ",");
            }
            sb.replace(sb.length() - 1, sb.length(), " from dual");
        }
        String sql = sb.toString();


        return DBHandler.insert(sql, null);
    }