从java调用带有UDT参数的postgres函数给SQL尚未实现异常
Posted
技术标签:
【中文标题】从java调用带有UDT参数的postgres函数给SQL尚未实现异常【英文标题】:calling postgres function with UDT parameter from java giving SQL is not yet implemented exception 【发布时间】:2015-10-12 11:04:59 【问题描述】:我正在将 postgres9.4 EDB 用于带有 UDT(用户定义类型)的函数,给出 Is Not Yet Implemented 异常。 我正在为 JDBC 使用 postgres 驱动程序 postgresql-9.4-1203.jdbc41.jar。 上面的jar是否支持UDT功能?这个实现是部分的吗?
请帮帮我。
下面是代码,
public static void oracleToPosgresUDTCall()
System.out.println("@@@ inside oracleToPosgresUDTCall...");
Connection c = null;
try
Class.forName("org.postgresql.Driver");
c = DriverManager
.getConnection("jdbc:postgresql://localhost:5433/pgtest", "postgres", "root");
System.out.println(c.getMetaData().getDriverVersion());
//you can mad your UDT to pojo here Great !!!
Map<String, Class<?>> m = c.getTypeMap();
m.put("typ_address", Address.class);
m.put("typ_test", AddressTypeTest.class);
c.setTypeMap(m);
// Procedure call
CallableStatement cstmt = c.prepareCall("call fn_test_t(?,?,?)");
cstmt.setString(1, "791000252423");
cstmt.registerOutParameter(2, Types.ARRAY);
cstmt.registerOutParameter(3, Types.ARRAY);
boolean b = cstmt.execute();
Array arr = cstmt.getArray(1); //output array starts from index 1
System.out.println("arr:" + arr.getBaseTypeName());
Object obj = arr.getArray();
System.out.println("Address obj:" + obj);
Address[] a = (Address[])obj;
System.out.println("Address obj:" + a[0].getAdd1());
System.out.println("Address obj:" + a[0].getTypeTest().getT1());
System.out.println("=======================================================");
//MORE
List<Address> list = Arrays.asList(a);
for(Address aa: list)
System.out.println(aa.getAdd1());
System.out.println(aa.getAdd2());
System.out.println("t1:" + aa.getTypeTest().getT1());
cstmt.close();
catch (Exception e)
e.printStackTrace();
System.err.println(e.getClass().getName()+": "+e.getMessage());
System.exit(0);
System.out.println("Opened database successfully");
【问题讨论】:
【参考方案1】:Postgres 官方驱动版本不支持大部分 JDBC 一致性。
非官方驱动链接,
pgjdbc-ng
PGJDBC-NG 0.5 API
【讨论】:
以上是关于从java调用带有UDT参数的postgres函数给SQL尚未实现异常的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JNI 从 JAVA 调用带有 C++ 参数的函数?