当在sql-string

时间:2015-08-25 12:53:20

标签: java oracle jdbc

我正在尝试从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,它将工作

如果我遗漏了一些信息,请提出要求。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

在执行.getParameterMetaData()

之前,您应该为语句设置参数
PreparedStatement stmt = myOracleConn.prepareStatement(sql);
stmt.setString(1,"test"); 
ParameterMetaData metadata = stmt.getParameterMetaData();