2013-02-01 30 views
1

我有通过本机JDBC驱动程序执行SQL查询的问题。此查询使用我的程序,使Informix数据库架构的raport:http://code.activestate.com/recipes/576621-dump-informix-schema-to-text/如何通过JDBC显示Informix sysprocedures.paramtypes列?

SELECT procname, numargs, isproc, paramtypes, variant, handlesnulls, parallelizable 
FROM sysprocedures 
WHERE internal='f' AND mode IN ('D', 'd', 'O', 'o') 
ORDER BY procname, numargs, procid 

它的工作原理,当我使用ODBC,但这个程序可以通过Jython和JDBC运行,并在JDBC我有例外:

Dla tego typu danych jest wymagana dostosowana mapa typów. [SQLCode: -79769], [SQLState: IX000] 

英语翻译(我讨厌母语JDBC错误的描述,他们只当你搜索在网络解决方案闹事):

-79769 A customized type map is required for this data type 
Explanation: You must register a customized type map to use any opaque types. 

我也试过了:

SELECT * FROM sysprocedures 

但是这在JDBC中也不起作用。

我看到,paramtypes是一个问题:如果我删除它,查询的作品。

必须注册哪些内容才能将此列映射到JDBC可以显示的内容?

回答

1

paramtypes列是一个复杂的列类型,使用Informix的一些扩展功能创建。我怀疑ODBC驱动程序通过做相当于:

SELECT procname, numargs, isproc, paramtypes::LVARCHAR, variant, handlesnulls, parallelizable 
    FROM sysprocedures 
WHERE internal = 'f' AND mode IN ('D', 'd', 'O', 'o') 
ORDER BY procname, numargs, procid 

也就是说,它强制转换为字符串。当我运行查询时(在我的SQLCMD中),我得到输出,但很多procnames都是空字符串。我不太确定那里发生了什么。

+0

投射到'LVARCHAR'工程!我尝试过'VARCHAR',但没有成功。现在它返回像“integer,integer,varchar”这样的字符串。谢谢! –