我试图使用 java 代码将数组插入到 postgres,但我总是收到此错误:
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;
使用的代码
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);
如果我通过主类运行该函数,它工作正常,但部署到 tomcat 服务器后,http 调用失败并出现上述错误。
- 使用的数据库 - Postgres
- JDBC 驱动程序 postgres-9.1-901-1.jdbc4
- c3p0-0.9.5-pre10
- tomcat-8.0.24
根据我所做的研究,createArrayOf() 应该与 jdbc4 和 c3p0-0.9.5 一起使用。
使用这个效果很好,但我不认为这是正确的方法
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());
}
需要帮忙 。
谢谢