JdbcTemplate学习笔记(更新插入删除等)

加载数据库数据到缓存 其实也就是将数据库表的查询结果封装到java的list<对象>这种形式 ;

JdbcTemplate 为spring 封装的jdbc

1、使用JdbcTemplate的execute()方法执行SQL语句 

Java代码  

  1. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");  

2、如果是UPDATE或INSERT,可以用update()方法。 

Java代码  

  1. jdbcTemplate.update("INSERT INTO USER VALUES('"  
  2.            + user.getId() + "', '"  
  3.            + user.getName() + "', '"  
  4.            + user.getSex() + "', '"  
  5.            + user.getAge() + "')");  

3、带参数的更新 

Java代码  

  1. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});  

Java代码  

  1. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});  


4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法 

Java代码  

  1. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");  

Java代码  

  1. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);  

Java代码  

  1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  

Java代码  

  1. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  
  2. Iterator it = rows.iterator();  
  3. while(it.hasNext()) {  
  4.     Map userMap = (Map) it.next();  
  5.     System.out.print(userMap.get("user_id") + "\t");  
  6.     System.out.print(userMap.get("name") + "\t");  
  7.     System.out.print(userMap.get("sex") + "\t");  
  8.     System.out.println(userMap.get("age") + "\t");  
  9. }  

   JdbcTemplate将我们使用的JDBC的流程封装起来,包括了异常的捕捉、SQL的执行、查询结果的转换等等。spring大量使用Template Method模式来封装固定流程的动作,XXXTemplate等类别都是基于这种方式的实现。 
    除了大量使用Template Method来封装一些底层的操作细节,spring也大量使用callback方式类回调相关类别的方法以提供JDBC相关类别的功能,使传统的JDBC的使用者也能清楚了解spring所提供的相关封装类别方法的使用。 

JDBC的PreparedStatement 

Java代码  

  1. final String id = user.getId();  
  2. final String name = user.getName();  
  3. final String sex = user.getSex() + "";  
  4. final int age = user.getAge();  
  5.   
  6. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",  
  7.                      new PreparedStatementSetter() {  
  8.                          public void setValues(PreparedStatement ps) throws SQLException {  
  9.                              ps.setString(1, id);  
  10.                              ps.setString(2, name);            
  11.                              ps.setString(3, sex);  
  12.                              ps.setInt(4, age);  
  13.                          }  
  14.                      });  

Java代码  

  1. final User user = new User();  
  2. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",  
  3.                     new Object[] {id},  
  4.                     new RowCallbackHandler() {  
  5.                         public void processRow(ResultSet rs) throws SQLException {  
  6.                             user.setId(rs.getString("user_id"));  
  7.                             user.setName(rs.getString("name"));  
  8.                             user.setSex(rs.getString("sex").charAt(0));  
  9.                             user.setAge(rs.getInt("age"));  
  10.                         }  
  11.                     });  

Java代码  

  1. class UserRowMapper implements RowMapper {  
  2.     public Object mapRow(ResultSet rs, int index) throws SQLException {  
  3.         User user = new User();  
  4.   
  5.         user.setId(rs.getString("user_id"));  
  6.         user.setName(rs.getString("name"));  
  7.         user.setSex(rs.getString("sex").charAt(0));  
  8.         user.setAge(rs.getInt("age"));  
  9.   
  10.         return user;  
  11.     }  
  12. }  
  13.   
  14. public List findAllByRowMapperResultReader() {  
  15.     String sql = "SELECT * FROM USER";  
  16.     return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));  
  17. }  

在getUser(id)里面使用UserRowMapper 

Java代码  

  1. public User getUser(final String id) throws DataAccessException {  
  2.     String sql = "SELECT * FROM USER WHERE user_id=?";  
  3.     final Object[] params = new Object[] { id };  
  4.     List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));  
  5.   
  6.     return (User) list.get(0);  
  7. }  

网上收集 
org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL   不能于Object[]一起用 

Java代码  

  1. public PreparedStatement createPreparedStatement(Connection con) throws SQLException {  
  2.  return con.prepareStatement(sql);  
  3. }  


1.增删改 
org.springframework.jdbc.core.JdbcTemplate   类(必须指定数据源dataSource) 

Java代码  

  1. template.update("insert into web_person values(?,?,?)",Object[]);  

  或 

Java代码  

  1. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ 匿名内部类 只能访问外部最终局部变量  
  2.   
  3.  public void setValues(PreparedStatement ps) throws SQLException {  
  4.   ps.setInt(index++,3);  
  5. });  


org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL 

Java代码  

  1. public void setValues(PreparedStatement ps) throws SQLException {  
  2.  ps.setInt(index++,3);  
  3. }  


2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler) 
org.springframework.jdbc.core.RowMapper   记录映射接口  处理结果集 

Java代码  

  1. public Object mapRow(ResultSet rs, int arg1) throws SQLException {   int表当前行数  
  2.   person.setId(rs.getInt("id"));  
  3. }  
  4. List template.query("select * from web_person where id=?",Object[],RowMapper);  


org.springframework.jdbc.core.RowCallbackHandler  记录回调管理器接口 处理结果集 

Java代码  

  1. template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){  
  2.  public void processRow(ResultSet rs) throws SQLException {  
  3.   person.setId(rs.getInt("id"));  
  4. });  

以下为项目中遇到的实例应用;

/*
 * @(#)ArteryBsaeDao.java 2018-3-2下午5:34:25 jcwzsjrh Copyright 2018 Thuisoft,
 * Inc. All rights reserved. THUNISOFT PROPRIETARY/CONFIDENTIAL. Use is subject
 * to license terms.
 */
package com.thunisoft.jcwzsjrh.dao;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Repository;

import com.itextpdf.text.pdf.PdfStructTreeController.returnType;
import com.thunisoft.jcwzsjrh.entity.Rhbxx;
import com.thunisoft.jcwzsjrh.entity.ZT;
import com.thunisoft.jcwzsjrh.entity.Zdyxj;
import com.thunisoft.jcwzsjrh.entity.ZsjZdxx;
import com.thunisoft.jcwzsjrh.pojo.Yxjcbh;
import com.thunisoft.jcwzsjrh.pojo.Zdyxjs;
import com.thunisoft.jcwzsjrh.pojo.ZjZdYxj;
import com.thunisoft.jcwzsjrh.pub.ABJdbcTemplate;
import com.thunisoft.jcwzsjrh.pub.Constants;

/**
 * ArteryBsaeDao
 * 
 * @author zhangjianxin
 * @version 1.0
 * 
 */
@Repository
public class ArteryBsaeDao {

    @Autowired
    private ABJdbcTemplate abaseconn;

    /**
     * 通过主体类型查询主体
     * 
     * @param ztlx
     * @return
     */
    public ZT getZtByZtlx(Integer ztlx) {

        StringBuilder sql = new StringBuilder();
        sql.append("select c_bh,n_ztlx,c_zsjbmc,c_zsj_rhjgbmc");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zt");
        sql.append(" where n_ztlx = ?");
        return abaseconn.queryForObject(sql.toString(), new Object[] { ztlx }, new BeanPropertyRowMapper<ZT>(ZT.class));
    }

    /**
     * 通过主体编号查询融合表信息
     * 
     * @param ztbh
     * @return
     */
    public List<Rhbxx> queryRhbxx(String ztbh) {
        StringBuilder sql = new StringBuilder();
        sql.append("select rhb.c_bh as rhbbh,rhb.c_bh_zt as ztbh,rhb.c_bh_ysjb as bbh,bjg.c_name as bmc,");
        sql.append("bjg.c_db_name as dbname, rhb.c_ysj_zjzdmc as zjzdmc, rhb.c_ysj_wybs AS wybs, rhb.c_ysj_pxzd AS pxzd");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_ztrhb rhb");
        sql.append(" inner join ").append(Constants.YSJ_SCHEMA).append(".t_sjkbjgxxb bjg");
        sql.append(" on bjg.c_bh = rhb.c_bh_ysjb");
        sql.append(" where rhb.c_bh_zt = ?");

        return abaseconn.query(sql.toString(), new Object[] { ztbh }, new BeanPropertyRowMapper<Rhbxx>(Rhbxx.class));
    }

    /**
     * 查询字段优先级
     * 
     * @param ztbh
     * @return
     */
    public List<Zdyxj> queryZdyxj(String ztbh) {
        StringBuilder sql = new StringBuilder();
        sql.append("select yxj.c_bh_zt as ztbh,yxj.c_bh_ztrhb rhbbh,yxj.c_bh_ysjb as bbh,bjg.c_name as bmc,");
        sql.append("yxj.c_bh_ysjbzd as zdbh,yxj.c_zsj_bzdmc as zsjbzdmc,yxj.n_yxj as yxj,yxj.n_zxd as zxd,");
        sql.append("zdxx.c_zdmc as ysjzdmc,yxj.c_mrz as mrz");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zdyxj yxj");
        sql.append(" inner join ").append(Constants.YSJ_SCHEMA).append(".t_sjkbjgxxb bjg");
        sql.append(" on bjg.c_bh = yxj.c_bh_ysjb");
        sql.append(" left join ").append(Constants.YSJ_SCHEMA).append(".t_sjkzdxxb zdxx");
        sql.append(" on zdxx.c_sjkjgxxb_id = yxj.c_bh_ysjb and zdxx.c_bh = yxj.c_bh_ysjbzd");
        sql.append(" where c_bh_zt = ? ");

        return abaseconn.query(sql.toString(), new Object[] { ztbh }, new BeanPropertyRowMapper<Zdyxj>(Zdyxj.class));
    }

    /**
     * 查询主数据字段信息
     * 
     * @param zsjbmc
     * @return
     */
    public List<ZsjZdxx> queryZsjZdxx(String zsjbmc) {
        StringBuilder sql = new StringBuilder();
        sql.append("select c_bmc, c_zdmc, c_zdbm, n_zdfl ");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zsjbxx ");
        sql.append(" where c_bmc = ?");
        sql.append(" order by n_order");

        return abaseconn.query(sql.toString(), new Object[] { zsjbmc }, new BeanPropertyRowMapper<ZsjZdxx>(ZsjZdxx.class));
    }

    /**
     * 查询主数据参与融合字段信息
     * 
     * @param zsjbmc
     * @return
     */
    public List<ZsjZdxx> queryZsjRhZdxx(String zsjbmc) {
        StringBuilder sql = new StringBuilder();
        sql.append("select c_bmc, c_zdmc, c_zdbm, n_zdfl ");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zsjbxx ");
        sql.append(" where c_bmc = ? and n_zdfl > 1");
        sql.append(" order by n_order");

        return abaseconn.query(sql.toString(), new Object[] { zsjbmc }, new BeanPropertyRowMapper<ZsjZdxx>(ZsjZdxx.class));
    }
    /**
     * 质检接口返回的实体 插入原数据质检字段优先级表
     * @param c_zdmc
     * @param c_zdly_bm
     * @param c_zdly_wbj
     * @param c_zdly_bbh
     * @param n_yxj
     * @param n_zxd
     * @param n_order
     */
    public void insertZjzdyxj(String c_bh,String c_zdmc,String c_zdly_bm,String c_zdly_wbj,String c_zdly_bbh,String c_zdly_zdbh,int n_yxj,double n_zxd){
        StringBuilder sql = new StringBuilder();
        sql.append("INSERT INTO db_jcwzsj.t_zjzdyxj VALUES(?,?,?,?,?,?,?,?)");
        abaseconn.update(sql.toString(), new Object[] {c_bh,c_zdmc,c_zdly_bm,c_zdly_wbj, c_zdly_bbh,c_zdly_zdbh,n_yxj,n_zxd});      
    }
    /**
     * 重新将对象修改后的字段优先级以及置信度插回zdyxj表
     * @param yxjzxd
     */
    public void insertzdyxj(Zdyxjs yxjzxd){
        StringBuilder sql = new StringBuilder();
        sql.append("INSERT INTO db_jcwzsj.t_zdyxj VALUES(?,?,?,?,?,?,?,?,?,?,?)");
        abaseconn.update(sql.toString(), new Object[] {yxjzxd.getCbh(),yxjzxd.getCbhzt(),yxjzxd.getCbhysjb(),yxjzxd.getCbhysjbzd(), yxjzxd.getCzsjbzdmc(),yxjzxd.getNyxj(),yxjzxd.getNzxd(),yxjzxd.getCkxly(),yxjzxd.getNorder(),yxjzxd.getCbhztrhb(),yxjzxd.getCmrz()});      
    }
    
    /**
     * 查询主数据别名对应的字段名称
     * 
     * @param c_zdbm
     * @return
     */
    public ZsjZdxx queryZdmc(String c_zdbm) {
        StringBuilder sql = new StringBuilder();
        sql.append("select c_bmc as CBmc, c_zdmc as CZdmc, c_zdbm as CZdbm, n_zdfl as NZdfl ");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zsjbxx ");
        sql.append(" where c_zdbm = ?");
        System.out.println(abaseconn);
        
        return abaseconn.queryForObject(sql.toString(), new Object[] { c_zdbm }, new BeanPropertyRowMapper<ZsjZdxx>(ZsjZdxx.class));
    }
    /**
     * 查询字段优先级表编号
     * 
     * @param ztbh
     * @return
     */
    public Yxjcbh queryZdyxjbh(String c_bh_ysjb,String c_bh_ysjbzd) {
        StringBuilder sql = new StringBuilder();
        sql.append("select c_bh as Cbh");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zdyxj ");
        sql.append(" where c_bh_ysjb = ? and c_bh_ysjbzd = ? ");
        return abaseconn.queryForObject(sql.toString(), new Object[] { c_bh_ysjb,c_bh_ysjbzd }, new BeanPropertyRowMapper<Yxjcbh>(Yxjcbh.class));
    }
    /**
     * 加载字段优先级表到缓存
     * 
     * @param ztbh
     * @return
     */
    public List<Zdyxjs> loadCacheZdyxj() {
        StringBuilder sql = new StringBuilder();
        sql.append("select c_bh as cbh,c_bh_zt as cbhzt,c_bh_ysjb as cbhysjb,c_bh_ysjbzd as cbhysjbzd,c_zsj_bzdmc as czsjbzdmc,COALESCE(n_yxj, 0) as nyxj,COALESCE(n_zxd, 0.0) as nzxd,c_kxly as ckxly,n_order as norder,c_bh_ztrhb as cbhztrhb,c_mrz as cmrz");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zdyxj ");
        return abaseconn.query(sql.toString(),new BeanPropertyRowMapper<Zdyxjs>(Zdyxjs.class));
    }
    /**
     * 加载质检字段优先级表到内存
     */
    public List<ZjZdYxj> loadCacheZjZdyxj() {
        StringBuilder sql = new StringBuilder();
        sql.append("select c_bh as cbh,c_zdmc as czdmc,c_zdly_bm as czdlybm,c_zdly_wbj as czdlywbj,c_zdly_bbh as czdlybbh,c_zdly_zdbh as czdlyzdbh,COALESCE(n_yxj, 0) as nyxj,COALESCE(n_zxd, 0.0) as nzxd");
        sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zjzdyxj ");
        return abaseconn.query(sql.toString(),new BeanPropertyRowMapper<ZjZdYxj>(ZjZdYxj.class));
    }
    /**
     * 加载zsjbxx表到内存
     */
    public List<ZsjZdxx> loadCacheZsjbxx() {
         StringBuilder sql = new StringBuilder();
         sql.append("select c_bmc as CBmc, c_zdmc as CZdmc, c_zdbm as CZdbm, n_zdfl as NZdfl ");
         sql.append(" from ").append(Constants.ZSJ_SCHEMA).append(".t_zsjbxx ");
        return abaseconn.query(sql.toString(),new BeanPropertyRowMapper<ZsjZdxx>(ZsjZdxx.class));
    }
    
    /**
     * 清空字段优先级表
     */
    public void clearZdyxj() {
        List<String> tables = new ArrayList<String>();
        tables.add(".t_zdyxj");
        String[] sqls = new String[tables.size()];
        for (int i = 0; i < tables.size(); i++) {
            sqls[i] = "truncate table " + Constants.ZSJ_SCHEMA + tables.get(i);
        }
        abaseconn.batchUpdate(sqls);
    }
    /**
     * 批量更新zjzdyxj表yxj字段
     */
    public int updateZdyxj() {
        StringBuilder sql = new StringBuilder();
        sql.append("UPDATE db_jcwzsj.t_zjzdyxj AS P SET n_yxj = A .yxj2 FROM(SELECT c_bh,c_zdmc,ROW_NUMBER () OVER (PARTITION BY c_zdmc ORDER BY n_zxd DESC) AS yxj2 FROM db_jcwzsj.t_zjzdyxj) AS A WHERE P .c_bh = A .c_bh;");
      return  abaseconn.update(sql.toString());
    }
    
}

更新置信度,这个 任务 首先将另一个接口返回的json数据转换成对象 然后落库  然后用到了批量更新 落库后的yxj字段,然后将更新后的表加载到内存封装成list  然后把另一个表数据加载到内存封装成list  然后清空该表   然后在根据三个表的关联关系  将对象某个属性值进行修改 然后将该对象重新插会该表;这些就实现了根据另一个表来批量更新这个表;

**
 * ZxdcqService
 * 
 * @author liubo
 * @version 1.0
 * 
 */
@Service
public class ZxdcqService {

    private static Logger logger = LoggerFactory.getLogger(ZxdcqService.class);

    @Autowired
    private ArteryBsaeDao abasedao;

    public List<Object> setZxdData() {
        String uri = ArteryConfigUtil.getProperty("zxd.url");
        String action = "/api/service/zsjzb";
        String result = HttpClientUtil.getResult(uri, action);
        //获取实体对象
        ZxdPojo pojo = JSON.parseObject(result, ZxdPojo.class);
        List<XxxPojo> list = pojo.getZsjzb();
        List<Double> bjls = new ArrayList<>();
        List<Integer> bjls1 = new ArrayList<>();
        List<Double> zxds = new ArrayList<>();
        List<String> sjlyzdlys = new ArrayList<>();
        List<String> zsjZdxxs = new ArrayList<>();
        // 加载字段优先级表到内存
        List<Zdyxjs> zdyxjs = abasedao.loadCacheZdyxj();
        for (Zdyxjs zdyxjs2 : zdyxjs) {
            String sjlyzdly = zdyxjs2.getCbhysjb() + zdyxjs2.getCbhysjbzd();
            sjlyzdlys.add(sjlyzdly);
        }
        // 转成map形式
        HashMap<String, Zdyxjs> zdyxjMap = new HashMap<>();
        // 加载zsjbxx表到内存
        List<ZsjZdxx> zsjbxxs = abasedao.loadCacheZsjbxx();
        for (ZsjZdxx zsjZdxx : zsjbxxs) {
            String zdbm = zsjZdxx.getCZdbm();
            zsjZdxxs.add(zdbm);
        }
        System.out.println(list.size()+"+++++++++++++++++++++++++++++++++++++++");
        //循环对象获取对应的实体
        for (int i = 0; i < list.size(); i++) {
            XxxPojo xxxPojo = list.get(i);
            // 获取对象的字段别名
            String zdbm = xxxPojo.getXxx();
            System.out.println(zdbm+"-----------------");
            if (zsjZdxxs.contains(zdbm)) {
                // 获取当前对象的字段名
                String zdmc = abasedao.queryZdmc(xxxPojo.getXxx()).getCZdmc();
                System.out.println(zdmc + "zdmc++++++++++++++++++++++++");
                List<ZdzbjgPojo> zdzbjgPojos = xxxPojo.getZdzbjg();
                // 获取一个字段指标结果下的所有表记录数
                for (ZdzbjgPojo zdzbjgPojo : zdzbjgPojos) {
                    bjls1.add(Integer.parseInt(zdzbjgPojo.getBjls()));
                }
                // 将所有的表记录数升序
                Collections.sort(bjls);
                // 反转 则转成降序
                Collections.reverse(bjls);
                for (ZdzbjgPojo zdzbjgPojo : zdzbjgPojos) {
                    // 得到委办局
                    String wbj = zdzbjgPojo.getWbjdw();
                    // 得到表来源编号
                    String bbh = zdzbjgPojo.getBbs();
                    // 得到字段来源编号
                    String zdbh = zdzbjgPojo.getZdbs();
                    System.out.println(bbh+"-----"+zdbh);
                    // 当前质检字段优先级编号
                    if (sjlyzdlys.contains(bbh + zdbh)) {
                        Yxjcbh yxjbh = abasedao.queryZdyxjbh(bbh, zdbh);
                        System.out.println(yxjbh.getCbh()+"-------------");
                        // 获得当前字段的表记录数
                        int dqsjly = Integer.parseInt(zdzbjgPojo.getBjls());
                        // 得到当前字段置信度
                        int bjlsmax = (int) Collections.max(bjls1);
                        double zxd = ((double)dqsjly/ (double)bjlsmax) * 100;
                        // 因为分子相同 分母越大的值越大 yxj为索引+1                    
                        bjls.add(zxd);
                        // 得到当前字段优先级
                        int yxj = bjls.indexOf(zxd) + 1;
                        System.out.println(yxj+"----------------"+zxd);
                        abasedao.insertZjzdyxj(yxjbh.getCbh(), zdmc, zdbm, wbj,
                                bbh,zdbh, yxj, zxd);
                    } else {
                        continue;
                    }
                }
            }else {
                continue;
            }
        }

        // 清空字段优先级表
        abasedao.clearZdyxj();
        // 转成map形式
        for (Zdyxjs zdy : zdyxjs) {
            zdyxjMap.put(zdy.getCbh(), zdy);
        }
        // 加载质检字段优先级表到内存
        List<ZjZdYxj> zjZdYxjs = abasedao.loadCacheZjZdyxj();
        for (ZjZdYxj zjYxj : zjZdYxjs) {
            int count = 0;
            if (zdyxjMap.containsKey(zjYxj.getCbh())) {
                double newzxd = zjYxj.getNzxd();
                int newyxj = zjYxj.getYxj();
                Zdyxjs yxjzxd = zdyxjMap.get(zjYxj.getCbh());
                // 修改该对象的置信度,优先级字段
                yxjzxd.setNzxd(newzxd);
                yxjzxd.setNyxj(newyxj);
                // 重新将数据插入数据到zdyxj表中
                abasedao.insertzdyxj(yxjzxd);
                count++;
            }
            // 如果关联插入异常则将原来的数据插会zdyxj表中
            if (count == 0) {
                for (int i = 0; i < zdyxjs.size(); i++) {
                    abasedao.insertzdyxj(zdyxjs.get(i));
                }
            }
        }

        return null;

    }

}

猜你喜欢

转载自blog.csdn.net/weixin_40803329/article/details/81744674
今日推荐