在开始处理这些列之前,有没有办法确定查询结果中各列的数据类型?
import groovy.sql.*
rdb = Sql.newInstance('jdbc:oracle:thin:@(conn)',
'usr',
'pwd','oracle.jdbc.driver.OracleDriver')
String query = '''select * from sample_data'''
// Need to know data types of columns here so I can prepare
// for the row processing
rdb.eachRow(query) {
// do something with each row
}
rdb.close()
我正在考虑查询Oracle数据字典,但如果你有通用查询,这不是最好的方法 - 我必须先从查询中创建一些表。
答案 0 :(得分:4)
要从查询结果集中获取SQL类型,您需要结果集ResultSetMetaData。幸运的是,Groovy Sql提供了一种获取它的方法。这有点奇怪,但它确实有效:
def columnTypes = [:]
def metaClosure = { metaData ->
/* I'm called once by Sql.eachRow() with a ResultSetMetaData. */
columnTypes = (1..metaData.columnCount).collectEntries {
[(metaData.getColumnName(it)): metaData.getColumnType(it)]
}
}
rdb.eachRow('SELECT * FROM person', metaClosure) { row ->
/*
* The result set SQL types and row values are available here.
* Examples:
* def value = row['column_name']
* def type = columnTypes['column_name']
*/
}
在我的示例中,我使用列名作为键,但可能(并且更可靠)使用列索引。返回的SQL类型是java.sql.Types中的类型。