简体   繁体   English

createArrayOf AbstractMethodError

[英]createArrayOf AbstractMethodError

I am trying to insert an array to postgres using java code , but I always get this error : 我试图使用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;

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 . 如果我通过主类运行该函数它工作正常,但在部署到tomcat服务器后,http调用失败并出现上述错误。

  • DB Used - Postgres 使用DB - Postgres
  • JDBC Driver postgres-9.1-901-1.jdbc4 JDBC驱动程序postgres-9.1-901-1.jdbc4
  • c3p0-0.9.5-pre10 c3p0-0.9.5-pre10
  • tomcat-8.0.24 Tomcat的8.0.24

As per research I have done , createArrayOf() supposed to work with jdbc4 and c3p0-0.9.5 . 根据我的研究,createArrayOf()应该与jdbc4和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 谢谢

I strongly suspect that you have an older version of c3p0 somewhere in your application's effective CLASSPATH. 我强烈怀疑你的应用程序的有效CLASSPATH中有一个旧版本的c3p0。 I've downloaded and verified from c3p0-0.9.5-pre10.jar and c3p0-0.9.5.1.jar on Maven Central that com.mchange.v2.c3p0.impl.NewProxyConnection does in fact contain the createArrayOf method. 我已经从Maven Central上的c3p0-0.9.5-pre10.jar和c3p0-0.9.5.1.jar下载并验证了com.mchange.v2.c3p0.impl.NewProxyConnection确实包含createArrayOf方法。

% javap -sysinfo -cp ./c3p0-0.9.5.1.jar com.mchange.v2.c3p0.impl.NewProxyConnection
Classfile jar:file:/Users/swaldman/tmp/c3p0jars/c3p0-0.9.5.1.jar!/com/mchange/v2/c3p0/impl/NewProxyConnection.class
  Last modified Jun 16, 2015; size 27098 bytes
  MD5 checksum c1ff36b87219ddc84c92fb6c1445a2d1
  Compiled from "NewProxyConnection.java"
public final class com.mchange.v2.c3p0.impl.NewProxyConnection implements java.sql.Connection,com.mchange.v2.c3p0.C3P0ProxyConnection {
   //...
   public synchronized java.sql.Array createArrayOf(java.lang.String, java.lang.Object[]) throws java.sql.SQLException;
   //...
}

Although this is not likely the cause of your problem, I recommend that you do upgrade to c3p0-0.9.5.1 rather than using the prerelease version. 虽然这不太可能是您的问题的原因,但我建议您升级到c3p0-0.9.5.1而不是使用预发布版本。

To see what version of c3p0 your application is actually using, look at INFO in your log files for the banner printed when the c3p0 library is initialized. 要查看应用程序实际使用的c3p0版本,请在日志文件中查看初始化c3p0库时打印的横幅的INFO。 It should look something like this: 它应该看起来像这样:

INFO: Initializing c3p0-0.9.5.1 [built 16-June-2015 00:06:36 -0700; debug? true; trace: 10]

I suspect that you will see an older version, that somewhere, perhaps among the transitive dependencies, you are pulling in 0.9.1.x or 0.9.2.x versions of the library. 我怀疑你会看到一个较旧的版本,在某个地方,也许在传递依赖项中,你正在引入该库的0.9.1.x或0.9.2.x版本。

Good luck! 祝好运!

I can see you are using old version of the c3p0 library. 我可以看到你正在使用旧版本的c3p0库。

if you are using maven, update the library to higher version in you pom file from 如果您使用的是maven,请将库更新到您的pom文件中的更高版本

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

to

<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>

I hope it help someone. 我希望它可以帮助别人。

Updating dependency to following solved my problem. 将依赖更新到以下解决了我的问题。

<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 hsqldb.jdbc中的createArrayOf字符串返回AbstractMethodError - createArrayOf string in hsqldb.jdbc returns AbstractMethodError java.lang.AbstractMethodError:在sqlite上调用createArrayOf方法时出现org.sqlite.Conn.createArrayOf错误 - java.lang.AbstractMethodError: org.sqlite.Conn.createArrayOf error while calling createArrayOf method on sqlite 未捕获的可抛出 java.lang.AbstractMethodError: org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf - Uncaught Throwable java.lang.AbstractMethodError: org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createArrayOf JDBC 错误:AbstractMethodError:com.microsoft.sqlserver.jdbc.SQLServerConnection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array - JDBC ERROR : AbstractMethodError: com.microsoft.sqlserver.jdbc.SQLServerConnection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array ArrayList的JDBC createArrayOf - JDBC createArrayOf from ArrayList Connection.createArrayOf 抛出 SQLFeatureNotSupportedException - Connection.createArrayOf throws SQLFeatureNotSupportedException 方法createArrayOf的mysql JDBC驱动程序出现错误 - Error with mysql JDBC driver for method createArrayOf SQLXML的AbstractMethodError - AbstractMethodError for SQLXML jdbc 连接的 `createArrayOf` 的最大元素数 - max number of elements for a jdbc connection's `createArrayOf` java.sql.Connection createArrayOf()始终返回null - java.sql.Connection createArrayOf() always returns null
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM