我有一个sql过程,我在groovy(java)中用我想要的参数访问它,然后返回游标。在resultset的帮助下,我将数据作为数据集返回。但我面临一个问题。表中的字段有3种类型:数字、字符串和日期。当我已经在groovy(java)中工作时,numeric被识别为一个带点的数字,因此我得到的数字末尾带有“.0”,尽管数据库中的记录是正常的(没有“.0”)。例如,在数据库中字段是“10”,但在groovy(java)中运行时得到“10.0”。
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)
}
}
我也尝试了第二种选择。我将数据放在“list”中,它是这样工作的,但是在本例中,要以数据集的形式返回它,我必须形成“names”、“types”,然后只传递值其类型必须与“类型”对应。因此,已经存在两个问题:
bigdecimal(同一点)
时间戳(对于日期字段)
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”更改为“integer”,这样就可以正常读取“types”和值不包含“.0”
将类型从“timestamp”更改为“string”,以便可以正常读取“types”和值是“11/19/2020 00:00”,但不是11/19/2020 00:00(不是字符串)。我该怎么做?或者,在第一种情况下,如何在不更改类型的情况下删除“.0”?
1条答案
按热度按时间cidc1ykv1#
有几种方法可以做到这一点。对于(1),您可以从整数中创建值,如下所示:
for(2)mytimestamp.tostring()返回可以解析的字符串。