Java 如何更改结果集或列表中值的类型?

Java 如何更改结果集或列表中值的类型?,java,groovy,resultset,Java,Groovy,Resultset,我有一个sql过程,我在groovy(java)中使用我想要的参数访问它,然后返回游标。在ReSultSet的帮助下,我将数据作为数据集返回。但我面临一个问题。表中的字段有3种类型:数字、字符串、日期。当我已经在groovy(java)中工作时,numeric被识别为一个带点的数字,因此,尽管数据库中的记录是正常的(没有“.0”),但最后我得到了带“.0”的数字。例如,在数据库中,字段是“10”,但在groovy(java)中运行时,我得到了“10.0” 我还尝试了第二种选择。我将数据放在“列表

我有一个sql过程,我在groovy(java)中使用我想要的参数访问它,然后返回游标。在ReSultSet的帮助下,我将数据作为数据集返回。但我面临一个问题。表中的字段有3种类型:数字、字符串、日期。当我已经在groovy(java)中工作时,numeric被识别为一个带点的数字,因此,尽管数据库中的记录是正常的(没有“.0”),但最后我得到了带“.0”的数字。例如,在数据库中,字段是“10”,但在groovy(java)中运行时,我得到了“10.0”

我还尝试了第二种选择。我将数据放在“列表”中,它是这样工作的,但在本例中,要以数据集的形式返回数据,我必须形成“名称”、“类型”,然后只传递值​​其类型必须与“类型”对应。因此,已经存在两个问题:

  • BigDecimal(同一点)
  • 时间戳(用于日期字段)
  • OutParameter CUR\u SERVICE=new OutParameter(){
    公共int getType(){
    返回OracleTypes.CURSOR;
    }
    }
    试一试{
    call(“{call test.test(a=>?,b=>?,c=>?,pcur=>?)}”
    ,[a,
    B
    C
    CUR_服务
    ]) {
    ResultSet行\服务->//reader.readResultSet(行\服务)
    ResultSetMetaData md=row_service.getMetaData();
    int columns=md.getColumnCount();
    ArrayList=新建ArrayList();
    while(row_service.next()){
    HashMap行=新的HashMap(列);
    对于(int i=1;i
    res.addAll map.keySet()
    物件
    }托利斯先生()
    def typeMap=[:].withDefault{key->“String”}
    list.each{map->
    map.each{键,值->
    如果(值!=null){
    typeMap[key]=values.getClass().simpleName
    }
    }
    }
    def types=names.collect{name->typeMap[name]}
    println(类型)
    reader.outputLinesSetHeaders(名称、类型)
    list.each{e->
    reader.outputLines names.collect{e[it]}
    }
    reader.outputLinesEnd();
    返回null;
    }
    }
    
    简要介绍我需要的:

  • 将类型从“BigDecimal”更改为“Integer”,以便它可以正常读取“types”和值​​不包含“.0”
  • 将类型从“timestamp”更改为“String”,以便可以正常读取“types”和值​​是“11/19/2020 00:00”,但不是11/19/2020 00:00(不是字符串)。 我应该怎么做?或者,在第一种情况下,如何在不更改类型的情况下删除“.0”

  • 有几种方法可以做到这一点。对于(1),可以从整数中创建值,如下所示:

        BigDecimal x = new BigDecimal(55);
        Integer y = new Integer(3);
        
        y = new Integer(x.intValue());
    
    For(2)myTimestamp.toString()返回可以解析的字符串

    OutParameter CUR_SERVICE = new OutParameter() {
                    public int getType() {
                        return OracleTypes.CURSOR;
                    }
                }
    
                try {
                    sql.call("{call test.test (a => ?, b => ?, c => ?, pcur => ?)}"
                            , [a,
                               b,
                               c,
                               CUR_SERVICE
                    ]) {
                        ResultSet row_service -> //reader.readResultSet(row_service)
    
                            ResultSetMetaData md = row_service.getMetaData();
                            int columns = md.getColumnCount();
                            ArrayList list = new ArrayList();
                            while (row_service.next()){
                                HashMap row = new HashMap(columns);
                                for(int i=1; i<=columns; ++i){
                                    row.put(md.getColumnName(i),row_service.getObject(i));
                                    def aabbcc = md.getColumnName(i)
                                    aabbcc
                                }
                                list.add(row);
                            }
    
                            List names = list.inject(new LinkedHashSet<>()) { res, map ->
                                res.addAll map.keySet()
                                res
                            }.toList()
    
    
                            def typeMap = [:].withDefault { key -> "String" }
                            list.each { map ->
                                map.each { key, values ->
                                    if (values != null) {
                                        typeMap[key] = values.getClass().simpleName
                                    }
                                }
                            }
    
                            def types = names.collect { name -> typeMap[name] }
    
                            println(types)
    
                            reader.outputLinesSetHeaders(names, types)
    
                            list.each { e ->
                                reader.outputLines names.collect { e[it] }
                            }
    
                            reader.outputLinesEnd();
                            return null;
    
                    }
    }
    
        BigDecimal x = new BigDecimal(55);
        Integer y = new Integer(3);
        
        y = new Integer(x.intValue());