我正在尝试从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
我发现只有当我在sql-String中使用注释时才会发生这种情况。
所以,当我的SQL是:
1)(无评论但参数)
"SELECT * FROM DUAL WHERE 1 = ?" --> no error occurs
2)(评论和参数)
"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = ?" --> the indexoutofbounds exception occurs
3)(评论但没有参数)
"/* mySampleComment */ SELECT * FROM DUAL WHERE 1 = 1" --> no error occurs
我想知道这是不是我和我不能在我的sqls中使用评论或者我是否遗漏了某些东西...... 有人知道这个吗?
EDIT1: 使用--comments而不是/ ** /导致相同的行为。 EDIT2: 它似乎根本没有,我有一个包含
的大SQL\n\t\t\t\t--great
获得异常。 如果将这个包含在样本sqls仍然是postet,它将工作
如果我遗漏了一些信息,请提出要求。 提前谢谢。
答案 0 :(得分:0)
在执行.getParameterMetaData()
之前,您应该为语句设置参数PreparedStatement stmt = myOracleConn.prepareStatement(sql);
stmt.setString(1,"test");
ParameterMetaData metadata = stmt.getParameterMetaData();