![](/img/trans.png)
[英]createArrayOf string in hsqldb.jdbc returns AbstractMethodError
[英]createArrayOf AbstractMethodError
我試圖使用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調用失敗並出現上述錯誤。
根據我的研究,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());
}
需要幫忙 。 謝謝
我強烈懷疑你的應用程序的有效CLASSPATH中有一個舊版本的c3p0。 我已經從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;
//...
}
雖然這不太可能是您的問題的原因,但我建議您升級到c3p0-0.9.5.1而不是使用預發布版本。
要查看應用程序實際使用的c3p0版本,請在日志文件中查看初始化c3p0庫時打印的橫幅的INFO。 它應該看起來像這樣:
INFO: Initializing c3p0-0.9.5.1 [built 16-June-2015 00:06:36 -0700; debug? true; trace: 10]
我懷疑你會看到一個較舊的版本,在某個地方,也許在傳遞依賴項中,你正在引入該庫的0.9.1.x或0.9.2.x版本。
祝好運!
我可以看到你正在使用舊版本的c3p0庫。
如果您使用的是maven,請將庫更新到您的pom文件中的更高版本
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
至
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
我希望它可以幫助別人。
將依賴更新到以下解決了我的問題。
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.