package erp_java_code.Connect;import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.CallableStatement;
import java.sql.Types;
import java.sql.PreparedStatement;
import java.sql.DatabaseMetaData;
import java.sql.ParameterMetaData;public class Test {    public static Connection Test() throws ClassNotFoundException,
            SQLException {
        String drivername = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@xxx:xxx:xxx";
        Class.forName(drivername);
        return DriverManager.getConnection(url, "xxx", "xxx");
    }    public static void main(String args[]) {
        try {
            Test conn = new Test();
            ResultSet rs = null;            //dbmd获取存储过程的类型
            DatabaseMetaData dbmd = conn.Test().getMetaData();
            ResultSet rs1 = dbmd.getProcedureColumns(null, null,
                    "xxxxxxxxxxxxx", "%");            while (rs1.next()) {
                System.out.println(rs1.getString("COLUMN_NAME") + "-" +
                                   rs1.getShort("COLUMN_TYPE") + "-" +
                                   rs1.getString("TYPE_NAME"));
            }            //callableStatement执行存储过程,付参数
            CallableStatement cstmt = null;
            cstmt = conn.Test().prepareCall(
                    "{call xxxxxxxx(?,?,?)}");            cstmt.setString("xxxxx", "");
            cstmt.setString("xxxxx", "3070");
            cstmt.registerOutParameter("xxxxxx",
                                       oracle.jdbc.OracleTypes.CURSOR);
            ParameterMetaData pmd=null;
            pmd=cstmt.getParameterMetaData();
            System.out.println(pmd.getParameterCount());
            
            cstmt.execute();
            rs = (ResultSet) cstmt.getObject("p_result_tbl");
            while (rs.next()) {
                System.out.println(rs.getString("per_no") + "-" +
                                   rs.getString("lgn_id"));
            }        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
}
以上是我的代码,在执行到红色代码时报错,把那两行去掉正确运行.错误提示是:Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.T4CPreparedStatement.getParameterMetaData()Ljava/sql/ParameterMetaData;请教高手帮忙解决一下!

解决方案 »

  1.   

    对照了,没错,这是一个测试程序,用的是最简单的方法,应该不会有问题
    是ORACLE驱动里报的错.
      

  2.   


    你单独在plsql里面执行存储过程报错没有啊?
      

  3.   


    我遇到了同样的问题解决了。
    我把oralce10G中把ojdbc14.jar包引到了工程中,就好用了。
    路径如下:oracle\product\10.2.0\db_1\jdbc\lib你引去弄个新驱动包试试看,希望能帮到你。