在Oracle数据库下面:
PreparedStatement pstatement = connection.prepareStatement("select * from person where 0 = 1 ");
如果不执行pstatement.excute();则 pstatement.getMetaData() 会报如下异常 java.sql.SQLException: ORA-01003: 语句未进行语法分析,请问有没有什么好的办法解决这个问题。
PreparedStatement pstatement = connection.prepareStatement("select * from person where 0 = 1 ");
如果不执行pstatement.excute();则 pstatement.getMetaData() 会报如下异常 java.sql.SQLException: ORA-01003: 语句未进行语法分析,请问有没有什么好的办法解决这个问题。
ResultSetMetaData getMetaData()
throws SQLException
检索包含有关 ResultSet 对象的列消息的 ResultSetMetaData 对象,ResultSet 对象将在执行此 PreparedStatement 对象时返回。 而如果你不执行,那么也就没有产生ResultSet所以会报异常·!
或许是prepareStatement实现机制不一样。
因为 PreparedStatement 对象被预编译,所以可以知道不必执行就会返回的 ResultSet 对象。因此,可以在 PreparedStatement 对象上调用 getMetaData 方法,而不必等待执行该对象,然后在返回的 ResultSet 对象上调用 ResultSet.getMetaData 方法。也有点迷糊了,是不是不同的驱动实现的机制不同呀?