Java 确定groovy.sql中Oracle查询结果的数据类型

Java 确定groovy.sql中Oracle查询结果的数据类型,java,groovy,Java,Groovy,在开始处理查询结果之前,有没有办法确定查询结果中各个列的数据类型 import groovy.sql.* rdb = Sql.newInstance('jdbc:oracle:thin:@(conn)', 'usr', 'pwd','oracle.jdbc.driver.OracleDriver') String query = '''select * from sample_data''' // Ne

在开始处理查询结果之前,有没有办法确定查询结果中各个列的数据类型

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数据字典,但如果您有通用查询,这不是最好的方法-我必须首先从查询中创建一些表。

要从查询结果集中获取SQL类型,您需要结果集的。幸运的是,GroovySQL提供了一种获得它的方法。这有点奇怪,但它是有效的:

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类型是中的SQL类型。

要从查询结果集中获取SQL类型,您需要结果集的。幸运的是,GroovySQL提供了一种获得它的方法。这有点奇怪,但它是有效的:

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类型是中的类型。

为什么不使用instanceof检查类型?如果选择切换数据库,那么在切换时也会更好。为什么不使用instanceof来检查类型呢?如果选择切换DB,也会更好