有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java确定groovy中Oracle查询结果的数据类型。sql

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

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


共 (1) 个答案

  1. # 1 楼答案

    要从查询结果集中获取SQL类型,需要结果集的ResultSetMetaData。幸运的是,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类型是java.sql.Types中的SQL类型