我试图从java.sql.PreparedStatement对象获取ParameterMetaData.
虽然文档说它在数据库出现问题时抛出了SQLException,但我现在得到一个ArrayIndexOutOfBoundsException.
我正在使用这个JDBC驱动程序URL:oracle.jdbc.driver.OracleDriver我正在使用ojdbc6.jar和64位JDK 1.6.0.45.
我正在做以下事情:
PreparedStatement stmt = myOracleConn.prepareStatement(sql);
preparedStatements.add(stmt);
ParameterMetaData bla2 = stmt.getParameterMetaData(); //this Line throws the Exception
Run Code Online (Sandbox Code Playgroud)
我发现只有当我在sql-String中使用注释时才会发生这种情况.
所以,当我的SQL是:
1)(没有评论但参数)
"SELECT * FROM DUAL WHERE 1 = ?" --> no error occurs
Run Code Online (Sandbox Code Playgroud)
2)(评论和参数)
"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = ?" --> the indexoutofbounds exception occurs
Run Code Online (Sandbox Code Playgroud)
3)(评论但没有参数)
"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = 1" --> no error occurs
Run Code Online (Sandbox Code Playgroud)
我想知道这是不是我和我不能在我的sqls中使用评论或者我是否遗漏了某些东西......有人对此有所了解吗?
edit1:使用--comments而不是/**/导致相同的行为.edit2:它似乎根本没有,我有一个包含的大SQL
\n\t\t\t\t--great
Run Code Online (Sandbox Code Playgroud)
得到例外.当将这个包含在样本sqls仍然postet时,它将工作
如果我遗漏了一些信息,只需要求它.提前致谢.
您应该在执行 .getParameterMetaData() 之前为语句设置参数
PreparedStatement stmt = myOracleConn.prepareStatement(sql);
stmt.setString(1,"test");
ParameterMetaData metadata = stmt.getParameterMetaData();
Run Code Online (Sandbox Code Playgroud)