-1

我们正在尝试使用Apache MetaModel. 用ORACLE, 对于一LOB列(或者CLOBBLOB),我们得到isLarge()=true。但是对于与我们相同的专栏,SQL Server 2008 R2我们正在争取false它。在SQL Server 2008 R2我们的LOB专栏中是varChar(Max)针对 CLOB 和varbinary(Max)针对 BLOB。

有没有办法用一个解决方案来处理两个数据库?

4

2 回答 2

0

Apache MetaModel 有一个您可以设置的系统属性,它会自动将所有 CLOB 转换为字符串,并将所有 BLOB 转换为字节数组。

您可以通过命令行上的字符串值或以下方式设置此属性:

-Dmetamodel.jdbc.convert.lobs=true

或者您可以从代码中执行此操作,在这种情况下,您可以使用一个方便的常量:

System.setProperty(JdbcDataContext.SYSTEM_PROPERTY_CONVERT_LOBS, true);

祝你好运。

于 2016-02-02T10:00:38.283 回答
-1

一种可能的方法是使用java.sql.Types。任何支持 JDBC 的数据库系统都应该可靠地映射到这种类型。

JDBC 定义了getMetaData方法,该方法返回有关 ResultSet 的所有列的信息。关键方法是返回上述 sql 类型的getColumnType,(例如 2004 来自 BLOB)。

这是一个使用 Groovy 而不是 Java 来检查表my_tab列的小示例

def stmt = con.createStatement() 

def rs = stmt.executeQuery('select * from my_tab')

def rsmd = rs.getMetaData();
def colCount = rsmd.getColumnCount()

println "getColumnCount ${colCount}"

colCount.times {i ->
  println "---------------------------------"
  println "columnName ${rsmd.getColumnName(i+1)}"
  println "columnTypeName ${rsmd.getColumnTypeName(i+1)}" 
  println "columnType ${rsmd.getColumnType(i+1)}"   
} 

结果是

getColumnCount 3
---------------------------------
columnName C1
columnTypeName BLOB
columnType 2004

---------------------------------
columnName C2
columnTypeName CLOB
columnType 2005

---------------------------------
columnName C3
columnTypeName DATE
columnType 93

除了 Oracle 之外,我对 getMetaData 方法没有太多经验,但在我看来,这是解决这个问题的最简单方法。

于 2015-12-25T20:56:35.137 回答