模拟从一个库读取数据插入到另一个库中

--源数据库AS400,目标数据库为sqlserver

package aia.com.cn.sis.syndata.service.impl;



import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import aia.com.cn.sis.syndata.service.SyndataService;

@Service
public class SyndataServiceImpl implements SyndataService {
    @Override
    public boolean SyndataByPlanCode(String planCode){
        // TODO Auto-generated method stub
        boolean syndataSuccess =false;
        String planCode1 ="";
        Connection conn = null;
//        DataSource ds = (DataSource) SpringContextUtil.getBean("dataSource");                
        for(int i=0;i<planCode.split(";").length;i++){          
            PreparedStatement pstmt  = null;
            try {    
//                conn = ds.getConnection();
                conn = SyndataServiceImpl.getConnection();
                CallableStatement cs = conn.prepareCall("{? = call dbo.sp_import_product(?,?)}");
                planCode1=planCode.split(";")[i];
                cs.registerOutParameter(1, java.sql.Types.INTEGER);
                cs.setString(2,planCode1);
                cs.registerOutParameter(3, java.sql.Types.INTEGER);
                cs.execute();
                int result = cs.getInt(3);
                if(result == 1)
                    syndataSuccess = true;
                else
                    syndataSuccess = false;
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                SISUtils.closeConnection(conn, pstmt, null);
            }
        }    
        return syndataSuccess;
    }
    public static void main(String[] args) {
        boolean isSuccess = new SyndataServiceImpl().SyndataByPlanCode("AIOJ19E2;AIOJ25E2");
        System.out.println("存储过程执行结果:"+isSuccess);
    }
 // 获取连接
     public static Connection getOlasConnection() {
         Connection con = null;
         try {
             // 注册AS400
             java.sql.DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
             con = DriverManager.getConnection("jdbc:as400://AIASH.AIA.BIZ;naming=system", "nsnp540", "Test@1234");
             // 测试 获取sqlserver某张表的所有字段,插入sql打印 正常情况下不要放开
             // Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
             // con =
             // DriverManager.getConnection("jdbc:sqlserver://chot3r8csts02:1433;DatabaseName=CHOA1SIS",
             // "devplogin", "devplogin");
         } catch (Exception e) {
             e.printStackTrace();
         }
         return con;
     }
    public static Connection getConnection() {
        Connection con = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
            con = DriverManager.getConnection("jdbc:sqlserver://chot3r8csts02:1433;DatabaseName=newsis", "devplogin",
                    "devplogin");
            // 设置windows连接
            // con =
            // DriverManager.getConnection("jdbc:sqlserver://chot3r8csts02:1433;DatabaseName=CHOA1SIS;"
            // + "integratedSecurity=true;");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return con;
    }
 // 获取连接
     public static Connection getSISConnection() {
         Connection con = null;
         try {
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
             con = DriverManager.getConnection("jdbc:sqlserver://chot3r8csts02:1433;DatabaseName=CHOA1SIS", "devplogin",
                     "devplogin");
             // 设置windows连接
             // con =
             // DriverManager.getConnection("jdbc:sqlserver://chot3r8csts02:1433;DatabaseName=CHOA1SIS;"
             // + "integratedSecurity=true;");
         } catch (Exception e) {
             e.printStackTrace();
         }
         return con;
     }
    @Override
    public List<Object[][]> getDatas(String dataBaseName, String tableName, String plancode) throws Exception {
        List<Object[][]> lists = new ArrayList<Object[][]>();
        for (String tableName1 : tableName.split(";")) {
            for (String plancode1 : plancode.split(";")) {
                Object[][] datas = null;
                Connection con = null;
                PreparedStatement pStatement = null;
                ResultSet rSet = null;
                String sql = SISUtils.getFindSql(dataBaseName, tableName1);// 测试查询sqlserver的完整sql语句需要将此注掉
                // String sql="select * from "+dataBaseName+"."+tableName;
                try {
                    con = getOlasConnection();
                    pStatement = con.prepareStatement(sql);
                    pStatement.setString(1, "%" + plancode1 + "%");// 测试查询sqlserver的完整sql语句需要将此注掉
                    rSet = pStatement.executeQuery();
                    // 获取查询表列数
                    int columnCounts = rSet.getMetaData().getColumnCount();
                    // //获取表字段
                    List<String> columnNames = new ArrayList<String>();
                    for (int i = 1; i <= columnCounts; i++) {
                        columnNames.add(rSet.getMetaData().getColumnName(i));
                    }

                    // 打印某张表的sql dbo打印insert语句,非dbo打印select语句
                    // String sqlString="";
                    // String column=StringUtils.join(columnNames.toArray(),
                    // ",");
                    // String countColon="";//测试多少个占位符
                    // for(int i=0;i<columnNames.size();i++){
                    // countColon=countColon+",?";
                    // }
                    // countColon=countColon.substring(1);
                    // if(dataBaseName != null &&
                    // "dbo".equals(dataBaseName)){
                    // sqlString="insert into "+tableName + "("+column+")
                    // values("+countColon+");";
                    // }else{
                    // sqlString="select "+column +" from
                    // "+dataBaseName+"."+tableName;
                    // }
                    // System.out.println("完整sql语句为:" + sqlString);

                    // 获取表数据值
                    List<Object[]> valueLists = new ArrayList<Object[]>();
                    while (rSet.next()) {
                        // 每行数据封装成数组
                        Object[] rowData = new Object[columnCounts];
                        int i = 0;
                        for (int j = 0; j < columnCounts; j++) {
                            String columnName = columnNames.get(j);
                            rowData[i++] = rSet.getObject(columnName);
                        }
                        valueLists.add(rowData);
                    }
                    datas = new Object[valueLists.size()][columnCounts];// 定义数组长度
                    // 存值
                    int i = 0;
                    for (Object[] temp : valueLists) {
                        datas[i++] = temp;
                    }
                    lists.add(datas);
                } catch (Exception e) {
                    e.printStackTrace();
                    throw new Exception("获取数据失败!");
                } finally {
                    // 关闭连接
                    SISUtils.closeConnection(con, pStatement, rSet);
                }
            }
    }
    return lists;
    }
    @Override
    public boolean importDatas(String planCode, String tableName, List<Object[][]> lists) throws Exception {
        boolean isSuccess = false;
        Connection con = getSISConnection();
        PreparedStatement pStatement = null;
        con.setAutoCommit(false);
        if (tableName != null && tableName.split(";").length > 0 && planCode != null && lists != null
                && lists.size() > 0 && (planCode.split(";").length * tableName.split(";").length == lists.size())) {
            for (int a=0,b=0; a < lists.size() && b < tableName.split(";").length; b++) {
                String tableName1 = tableName.split(";")[b];                
                for(int c=0;c<planCode.split(";").length;c++){                                                            
                    Object[][] datas = lists.get(a);
                    a++;
                    final int batchSize = 1000;
                    // 获取sql
                    String sql = SISUtils.getSql(tableName1);
                    int count = 0;
                    try {
                        pStatement = con.prepareStatement(sql);
                        if (datas != null && datas.length > 0) {
                            for (int i = 0; i < datas.length; i++) {
                                Object[] rows = datas[i];
                                int whichCol = 0;
                                for (int j = 0; j < rows.length; j++) {
                                    pStatement.setObject((whichCol + 1), rows[j]);
                                    whichCol++;
                                }
                                pStatement.addBatch();
                                if (++count % batchSize == 0) {
                                    pStatement.executeBatch();
                                }
                            }
                            pStatement.executeBatch();
                            System.out.printf("%s%n", "插入数据完毕!");
                            isSuccess = true;
                        }
                    } catch (Exception e) {
                        isSuccess = false;
                        e.printStackTrace();
                        con.rollback();
                        throw new Exception("插入数据失败!");
                    } finally {
                        SISUtils.closeConnection(null, pStatement, null);
                    }
                }
            }
        }

        if (isSuccess) {
            con.commit();
        } else {
            con.rollback();
        }
        SISUtils.closeConnection(con, null, null);
        return isSuccess;
    }
}

--controller层

package aia.com.cn.sis.syndata.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import aia.com.cn.sis.syndata.service.SyndataService;


/**
 * 公式配置
 *
 * @author Administrator
 *
 */

@Controller
@RequestMapping("/admin/syndata")
public class SyndataController {

    @Autowired
    private SyndataService syndataService;

    @RequestMapping("/index")
    public ModelAndView index(
            ) {
        ModelAndView view = new ModelAndView();
        view.setViewName("/admin/syndata/index");
        return view;
    }
    
    @ResponseBody
    @RequestMapping(method = RequestMethod.POST, value = "syndata")
    public String syndata(String dataBaseName,String tableNames,String planCode){            
        String rs="数据同步成功!";
        try {
            // 根据页面填写的olas库名、表名及对应plancode查询AS400数据库
            List<Object[][]> datas = syndataService.getDatas(dataBaseName, tableNames, planCode);
            if (datas != null && datas.size() > 0) {
                // 查询成功则插入老sis表
                boolean isSuccess = syndataService.importDatas(planCode,tableNames, datas);
                if (!isSuccess) {// 插入失败直接返回
                    rs = "在插入老sis表时数据错误,请检查数据库相关填写是否正确!";
                }else{
                    //开始执行存储过程,将老sis数据同步至新sis
                    isSuccess = syndataService.SyndataByPlanCode(planCode);
                    if(!isSuccess)
                        rs="存储过程执行从老sis同步数据至新sis失败!";
                }
            } else {
                rs = "在查询AS400数据库时失败,请检查数据库相关填写是否正确!";
            }
        } catch (Exception e) {
            rs = "数据同步失败";
            e.printStackTrace();
        }
        return rs;
    }

}

--共有部分

package aia.com.cn.sis.syndata.service.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class SISUtils {
    //关闭连接
        public static void closeConnection(Connection con,PreparedStatement pStatement,ResultSet rSet){
            try{
                if(con != null){
                    con.close();
                }
                if(pStatement != null){
                    pStatement.close();
                }
                if(rSet != null){
                    rSet.close();
                }
            }catch(Exception e){
                System.out.println("关闭连接失败!");
            }
        }        
        // 表名不同,查询sql语句不同,这里采用起始表与目标表的sql语句字段名称与数量对应的匹配方式,后面有动态方式可优化
        public static String getFindSql(String dataBaseName, String tableName) {
            String sql = "";
            if (tableName != null && "LADPJ".equals(tableName)) {
                sql = "select DDS_PJ_CO,DDS_PJ_PLAN,DDS_PJ_COVERAGE_TYPE,DDS_PJ_COVERAGE_GROUP,DDS_PJ_TERM_COVERAGE,DDS_PJ_RCCPLAN,DDS_PJ_COMMFLAT,DDS_PJ_ACFLAT,"
                        + "DDS_PJ_PRMFLAT,DDS_PJ_CASECNT,DDS_PJ_FLAG1,DDS_PJ_FLAG2,DDS_PJ_FLAG3,DDS_PJ_DATE1,DDS_PJ_DATE2,DDS_PJ_CODE1,DDS_PJ_CODE2,DDS_PJ_CODE3,"
                        + "DDS_PJ_INT1,DDS_PJ_INT2,DDS_PJ_AMT1,DDS_PJ_AMT2,DDS_PJ_NUM1,DDS_PJ_NUM2,DDS_PJ_NUM3 from "
                        + dataBaseName + "." + tableName + " where DDS_PJ_PLAN like ?";
            } else if (tableName != null && "lldpa".equals(tableName)) {
                sql = "select DDS_PA_CO,DDS_PA_PLAN,DDS_PA_SHORT_NAME,PAPLOB,PAVTBL,PAVLIV,PAVINT,PAVMETH,PAVCLS,PAVIADUSE,PAVIADCHG,PAVINT2,PAVRPUPLAN,PASEXUSE,"
                        + "PAVTBLF,PANTBLF,PAETITBLF,PAGSADUSE,PAGSAGEDUR,PAOPT9TBL,PANTBL,PANETITBL,PANLIV,PANINT,PANMETH,PANCLS,PANIADUSE,PANIADCHG,PANINT2,"
                        + "PANRPUPLAN,PANPUAPLAN,PALOAGE,PAHIAGE,PAPUPUSE,PAPAYUP,PAMXUSE,PAMX,PAVPU,PARPU,PAETI,PAAPL,PAPAR,PAPAROPT,PANFOPT,PALEVDUR,PAMRULE,"
                        + "PAARULE,PACPLAN,PARPLAN1,PARPLAN2,PAAPUUSE,PAADBPU,PAACSUSE,PAACEASE,PAWPPUUSE,PAWPPAYU,PAWPCSUSE,PAWPCEASE,PAGIPUUSE,PAGIPAYU,PAGICSUSE,"
                        + "PAGICEASE,PAPDEPUSE,PAPDEPAYU,PAPDECUSE,PAPDECEASE,PAPDIPUSE,PAPDIPAYU,PAPDICUSE,PAPDICEASE,PAPHPUSE,PAPHPAYU,PAPHCUSE,PAPHCEASE,PAP1PUSE,"
                        + "PAP1PAYU,PAP1CUSE,PAP1CEASE,PABNDUSE,PABNDNUM,PABNDCD1,PABNDHI1,PABNDCD2,PABNDHI2,PABNDCD3,PABNDHI3,PABNDCD4,PABNDHI4,PABNDCD5,PABNDHI5,PABNDCD6,"
                        + "PABNDHI6,PABNDCD7,PABNDHI7,PABNDCD8,PABNDHI8,PABNDCD9,PABNDHI9,PABNDCD10,PABNDHI10,PAPRMCHG,PASBCHG,PAVPUCHG,PAETIINT,PAPUATBL,PAPUAINT,PANEWPLAN,"
                        + "PAMINSIZE,PAFYCOST,PASURRMETH,PARENEWUSE,PARENEW,PAMTSEXUSE,PAMTAGEUSE,PAMTAGE,PAEXCESINT,PAFILLER from "
                        + dataBaseName + "." + tableName + " where DDS_PA_PLAN like ?";
            } else if (tableName != null && "lldpg".equals(tableName)) {
                sql = "select PGCO,PGPLAN,PGSEX,PGBAND,PGAGE,PGBASIC,PGAD,PGWP,PGAIWP,PGAI,PGAX,PGCPA,PGIWP from "
                        + dataBaseName + "." + tableName + " where PGPLAN like ?";
            } else if (tableName != null && "nladpa".equals(tableName)) {
                sql = "select PLANCO,PLANCODE,PLANNAME,CSVPRINT,APPPRINT,PIPPRINT,CSVFLD,CSVFMT,CNTRNO,OLDPLAN,PIPRMCD,CSVRMCD,RIDRMCD,DOCNAME,DOCPATH,DOCPAGE,ENDRSFLG,ENDRSNAM,RESFLD1,RESFLD2,RESFLD3 from "
                        + dataBaseName + "." + tableName + " where PLANCODE like ?";
            } else if (tableName != null && "nladpipcsv".equals(tableName)) {
                sql = "select PCCO,PCPLAN,PCAGE,PCSEX,PCDUR,PCBACSV,PCBARPU,PCRB,PCRBCSV,PCRBRPU,PCSA,PCRDCSV,PCTTCSV from "
                        + dataBaseName + "." + tableName + " where PCPLAN like ? and pcband ='00'";
            }
            return sql;
        }
        // 不同的表插入语句不通
        public static String getSql(String tableName) {
            String sql = "";
            // 模拟一些测试bk表,后续改成正式表
            if (tableName != null && "ladpj".equals(tableName)) {
                sql = "INSERT INTO [dbo].ladpj11(PJCO,PJPLAN,PJCOVTYP,PJCOVGRP,PJTERMCOV,PJRCCPLAN,PJCOMMFLAT,PJACFLAT,PJPRMFLAT,PJCASECNT,PJFLAG1,PJFLAG2,PJFLAG3,PJDATE1,PJDATE2,"
                        + "PJCODE1,PJCODE2,PJCODE3,PJINT1,PJINT2,PJAMT1,PJAMT2,PJNUM1,PJNUM2,PJNUM3) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            } else if (tableName != null && "lldpa".equals(tableName)) {
                sql = "insert into lldpa11(PACO,PAPLAN,PASNAME,PAPLOB,PAVTBL,PAVLIV,PAVINT,PAVMETH,PAVCLS,PAVIADUSE,PAVIADCHG,PAVINT2,PAVRPUPLAN,PASEXUSE,PAVTBLF,PANTBLF,PAETITBLF,PAGSADUSE,PAGSAGEDUR,PAOPT9TBL,PANTBL,PANETITBL,PANLIV,PANINT,PANMETH,PANCLS,PANIADUSE,PANIADCHG,PANINT2,PANRPUPLAN,PANPUAPLAN,PALOAGE,PAHIAGE,PAPUPUSE,PAPAYUP,PAMXUSE,PAMX,PAVPU,PARPU,PAETI,PAAPL,PAPAR,PAPAROPT,PANFOPT,PALEVDUR,PAMRULE,PAARULE,PACPLAN,PARPLAN1,PARPLAN2,PAAPUUSE,PAADBPU,PAACSUSE,PAACEASE,PAWPPUUSE,PAWPPAYU,PAWPCSUSE,PAWPCEASE,PAGIPUUSE,PAGIPAYU,PAGICSUSE,PAGICEASE,PAPDEPUSE,PAPDEPAYU,PAPDECUSE,PAPDECEASE,PAPDIPUSE,PAPDIPAYU,PAPDICUSE,PAPDICEASE,PAPHPUSE,PAPHPAYU,PAPHCUSE,PAPHCEASE,PAP1PUSE,PAP1PAYU,PAP1CUSE,PAP1CEASE,PABNDUSE,PABNDNUM,PABNDCD1,PABNDHI1,PABNDCD2,PABNDHI2,PABNDCD3,PABNDHI3,PABNDCD4,PABNDHI4,PABNDCD5,PABNDHI5,PABNDCD6,PABNDHI6,PABNDCD7,PABNDHI7,PABNDCD8,PABNDHI8,PABNDCD9,PABNDHI9,PABNDCD10,PABNDHI10,PAPRMCHG,PASBCHG,PAVPUCHG,PAETIINT,PAPUATBL,PAPUAINT,PANEWPLAN,PAMINSIZE,PAFYCOST,PASURRMETH,PARENEWUSE,PARENEW,PAMTSEXUSE,PAMTAGEUSE,PAMTAGE,PAEXCESINT,PAFILLER) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
            } else if (tableName != null && "lldpg".equals(tableName)) {
                sql = "insert into lldpg11(PGCO,PGPLAN,PGSEX,PGBAND,PGAGE,PGBASIC,PGAD,PGWP,PGAIWP,PGAI,PGAX,PGCPA,PGIWP) values(?,?,?,?,?,?,?,?,?,?,?,?,?);";
            } else if (tableName != null && "nladpa".equals(tableName)) {
                sql = "insert into nladpa11(PLANCO,PLANCODE,PLANNAME,CSVPRINT,APPPRINT,PIPPRINT,CSVFLD,CSVFMT,CNTRNO,OLDPLAN,PIPRMCD,CSVRMCD,RIDRMCD,DOCNAME,DOCPATH,DOCPAGE,ENDRSFLG,ENDRSNAM,RESFLD1,RESFLD2,RESFLD3) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
            } else if (tableName != null && "nladpipcsv".equals(tableName)) {
                sql = "insert into nladpipcsv11(PCCO,PCPLAN,PCAGE,PCSEX,PCDUR,PCBACSV,PCBARPU,PCRB,PCRBCSV,PCRBRPU,PCSA,PCRDCSV,PCTTCSV) values(?,?,?,?,?,?,?,?,?,?,?,?,?);";
            }
            return sql;
        }
//        public static void main(String[] args) {
//            String input="<script aaaaa> aaaaaaaaaa </script><iframe aaaaa> aaaaaaaaaa </iframe>";
//            //Pattern pattern = RegexpUtil.getPattern("<[[script]|[iframe]][^>]*>[\\w|[^x00-xff]]*<\\/[[script]|[iframe]]>");
//            Pattern pattern = RegexpUtil.getPattern("<script[^>]*>[\\w|[^x00-xff]]*<\\/script>");
//             while (true) {
//                 Matcher m= pattern.matcher(input);    
//                 if(m.find()){
//                     input=m.replaceAll("*");
//                 }else{
//                     break;
//                 }
//             }
//             Pattern pattern1 = RegexpUtil.getPattern("<iframe[^>]*>[\\w|[^x00-xff]]*<\\/iframe>");
//             while (true) {
//                 Matcher m= pattern1.matcher(input);    
//                 if(m.find()){
//                     input=m.replaceAll("*");
//                 }else{
//                     break;
//                 }
//             }
//             System.out.println(input);
//        }
        
        //测试导入数据过程
        public static void main(String[] args) throws Exception {
//            String tableName="nladpipcsv;lldpg";
//            String planCode="AIOJ19E2;AIOJ25E2";
//            java.util.List<Object[][]> lists =ConnectionAs400.getDatas("ES1708003N",tableName,planCode);//as400打印查询语句
//            boolean isSuccess = ConnectionSIS.importDatas(planCode,tableName, lists);
//            System.out.println("导入数据是否成功:"+isSuccess);
        }
        
}

--最后一步是将导入的数据在通过存储过程插入到另一个表中,这里不做介绍,可忽略。




猜你喜欢

转载自blog.csdn.net/qq_35255384/article/details/79295424
今日推荐