Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java C3P0 rawStatementOperation导致IllegalArgumentException:对象不是声明类的实例_Java_Mysql_Reflection_Invoke_C3p0 - Fatal编程技术网

Java C3P0 rawStatementOperation导致IllegalArgumentException:对象不是声明类的实例

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

我的服务器使用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 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)