在Oracle数据库下面:
 PreparedStatement pstatement  = connection.prepareStatement("select * from person where 0 = 1 ");
如果不执行pstatement.excute();则  pstatement.getMetaData() 会报如下异常 java.sql.SQLException: ORA-01003: 语句未进行语法分析,请问有没有什么好的办法解决这个问题。

解决方案 »

  1.   

    应该是这个语句还没有被提交上去,oracle没有对其进行解析
      

  2.   

    JDK原文:
    ResultSetMetaData getMetaData()
                                  throws SQLException
    检索包含有关 ResultSet 对象的列消息的 ResultSetMetaData 对象,ResultSet 对象将在执行此 PreparedStatement 对象时返回。 而如果你不执行,那么也就没有产生ResultSet所以会报异常·!
      

  3.   

    本来就需要先执行才能有Metadata,否则元数据哪里来呢?
      

  4.   

    sybase 数据库的jtds驱动是可以的,excute()。
    或许是prepareStatement实现机制不一样。
      

  5.   

    Sybase不用excute()是可以得到Metadata的。
      

  6.   

    JDK上还有这段话:
    因为 PreparedStatement 对象被预编译,所以可以知道不必执行就会返回的 ResultSet 对象。因此,可以在 PreparedStatement 对象上调用 getMetaData 方法,而不必等待执行该对象,然后在返回的 ResultSet 对象上调用 ResultSet.getMetaData 方法。也有点迷糊了,是不是不同的驱动实现的机制不同呀?