I am trying to insert an array to postgres using java code , but I always get this error :
SEVERE [http-nio-8080-exec-2]org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [] in context with path [/] threw exception [Servlet execution threw an exception] with root cause java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyConnection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;
Code Used
pst = getConnection().prepareStatement(INSERT_QUERY,PreparedStatement.RETURN_GENERATED_KEYS); pst.setString(1, t.getname()); pst.setString(2, t.getEmail()); Array itemIds = conn.createArrayOf("bigint", t.getItemIds()); pst.setArray(3, itemIds);
If I run the function through main class it works fine , but after deploying to tomcat server, http calls fail with above error .
- DB Used - Postgres
- JDBC Driver postgres-9.1-901-1.jdbc4
- c3p0-0.9.5-pre10
- tomcat-8.0.24
As per research I have done , createArrayOf() supposed to work with jdbc4 and c3p0-0.9.5 .
Using this works fine , but I don't see it as right approach
if (conn instanceof C3P0ProxyConnection) { C3P0ProxyConnection proxy = (C3P0ProxyConnection) conn; try { Method m = Connection.class.getMethod("createArrayOf", String.class, Object[].class); Object[] args = { "bigint", t.getItemIds() }; itemIds = (Array) proxy.rawConnectionOperation(m, C3P0ProxyConnection.RAW_CONNECTION, args); } catch (IllegalArgumentException e) { throw new SQLException(e); } } else { itemIds = conn.createArrayOf("bigint", t.getItemIds()); }
Need help . Thanks