Java C3P0 rawStatementOperation导致IllegalArgumentException:对象不是声明类的实例
我的服务器使用hibernate 3.6和c3p0-0.9.5.2以及mysql数据库。 我尝试使用mysql jdbc驱动程序的这个特殊功能Java C3P0 rawStatementOperation导致IllegalArgumentException:对象不是声明类的实例,java,mysql,reflection,invoke,c3p0,Java,Mysql,Reflection,Invoke,C3p0,我的服务器使用hibernate 3.6和c3p0-0.9.5.2以及mysql数据库。 我尝试使用mysql jdbc驱动程序的这个特殊功能 com.mysql.jdbc.Statement.setLocalInfileInputStream(InputStream is) 所以作为c3p0文档,我需要使用com.mchange.v2.c3p0.impl.NewProxyStatement的rawStatementOperation()函数: InputStream is = new Byt
com.mysql.jdbc.Statement.setLocalInfileInputStream(InputStream is)
所以作为c3p0文档,我需要使用com.mchange.v2.c3p0.impl.NewProxyStatement的rawStatementOperation()函数:
InputStream is = new ByteArrayInputStream("myString".getBytes());
Method m = com.mysql.jdbc.Statement.class.getMethod("setLocalInfileInputStream", new Class[]{InputStream.class});
NewProxyStatement proxyStatement = (NewProxyStatement) connection.createStatement();
proxyStatement.rawStatementOperation(m, NewProxyStatement.RAW_STATEMENT, new Object[]{is});
它有错误:
这就好像它不将ByteArrayInputStream识别为InputStream的子类一样
我还尝试使用ByteArrayInputStream.class而不是InputStream.class创建方法,但它找不到函数
NoSuchMethodException:
setLocalInfileInputStream(java.io.ByteArrayInputStream)
我做错了什么?
非常感谢很抱歉这么晚才开始。这是一个令人困惑的问题,你没有做任何明显的错误。但是仅根据堆栈跟踪行号,我怀疑您没有使用您认为的c3p0版本,在0.9.5.2 rawStatementOperation中(…)的行号会更高。但是,那又怎样?c3p0的原始语句操作是一个旧的API,它应该适用于几乎任何版本。您可以尝试使用
unwrap(…)
方法获取原始语句,并对其进行操作。但是unwrap(…)
在旧版本中不会出现。您还可以使用原始语句ops调用静态方法,如:publicstaticvoidcheat(statement stmt){return stmt;}
来使用原始语句ops提取内部语句,并仔细查看您所拥有的内容。是的,我在不知不觉中使用了一个旧版本,我更正了它,并且能够使用unwrap()
方法来获取mysql语句。但是,我仍然不明白为什么使用java.lang.reflect.method.invoke(Object paramObject,Object…paramVarArgs)的rawStatementOperation()
方法
无法识别我的参数。@NamHUYNH我也遇到了同样的问题。你找到解决这个问题的办法了吗?
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.mchange.v2.c3p0.impl.NewProxyStatement.rawStatementOperation(NewProxyStatement.java:1077)