我正在使用grails项目,该项目使用大型第三方数据库,每个表中包含大量表和多个字段。我们采取了根据需要手动将这些字段添加到域类的方法。
我正处于我希望系统访问所有字段的地步,我想知道是否有办法在不将其添加到我的域类的情况下执行此操作。例如,如果我知道列名,我想知道数据库中的数据类型(即,它是字符串,double,int,bool,date)。
我不需要以编程方式访问字段,因为我可以使用第三方供应商提供的REST API与这些表进行交互。我想知道我是否可以确定他们期望的数据类型。
我发现grails有一个反向工程插件,但我不确定这是我想要的,因为我不想创建一个域类,我只想要这样的东西:
// this is what I work for fields I've added to the domain class
Type works = MyDomainClass.getDeclaredField("declaredFieldName").genericType
// is there a way to do this without adding it to the domain class?
Type needed = someAPI(MyDomainClass,"unDeclaredFieldName")
答案 0 :(得分:1)
查看逆向工程插件正在使用的hibernate tools。具体来说,它会创建DatabaseCollector
:
DatabaseCollector readDatabaseSchema(String catalog, String schema) {
catalog = catalog ?: settings.defaultCatalogName
schema = schema ?: settings.defaultSchemaName
JDBCReader reader = JDBCReaderFactory.newJDBCReader(cfg.properties, settings,revengStrategy, cfg.serviceRegistry)
DatabaseCollector dbs = new MappingsDatabaseCollector(mappings, reader.metaDataDialect)
reader.readDatabaseSchema dbs, catalog, schema, new ReverseEngineerProgressListener()
dbs
}
答案 1 :(得分:-1)
我认为你可以直接使用SQL实例
SELECT DATA_TYPE FROM all_tab_columns WHERE table_name = 'TABLE NAME' AND column_name = 'COLUMN NAME'
您可以直接从Groovy sql http://docs.groovy-lang.org/latest/html/api/groovy/sql/Sql.html
调用SQL