How can I solve this type of error when testing?

1

When executing in the console it happens that a "next" error that is hosted in the "while" bounce

  

java.sql.SQLException: Unable to perform recovery on a   PLSQL statement: next at   oracle.jdbc.driver.OracleResultSetImpl.next (OracleResultSetImpl.java:254)     at upeu.juan.daoimp.registroimp.read (registroimp.java:45)

public registro read(int id) {
        // TODO Auto-generated method stub
        registro f = new registro();

        try {
            c = x.prepareCall("{Call pro_reg (?,?,?,?)}");
            c.registerOutParameter(1, java.sql.Types.INTEGER);
            c.registerOutParameter(2, java.sql.Types.VARCHAR);
            c.registerOutParameter(3, java.sql.Types.INTEGER);
            c.setInt(4,id);
            r=c.executeQuery();
            while (r.next()){
                f.setId(r.getInt("cod_bus"));
                f.setPlacas(r.getString("placa_bus"));
                f.setViajes(r.getInt("count(*)"));
            }


        }catch (SQLException e){
            e.printStackTrace();

        }
        return f;
    
asked by Juan 29.08.2018 в 07:13
source

1 answer

0

According to the JDBC escape syntax the keywords are > case sensitive . And since you return a single result according to the id, you should use execute () only.

Note: see comments to understand step by step.

read (int id):

        // obtener conexión a base de datos oracle
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:caspian";
        String username = "root";
        String password = "root";
        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, username, password);

        // preparar CallableStatement
        String pro_reg = "{ call pro_reg(?, ?, ?, ?) }";
        CallableStatement cs = conn.prepareCall(pro_reg);
        // definir parametro de entrada 
        cs.setInt(4,id);

        // Registrar parametros de salir
        cs.registerOutParameter(1, java.sql.Types.INTEGER);
        cs.registerOutParameter(2, java.sql.Types.VARCHAR);
        cs.registerOutParameter(3, java.sql.Types.INTEGER);

        // ejecutar procedimiento
        cs.execute();

        Registro f = new Registro(); //clase debería estar capitalizada
        //obtienes parametros y los seteas a tu registro
        f.setId(cs.getInt("cod_bus"));
        f.setPlacas(cs.getString("placa_bus"));
        f.setViajes(cs.getInt("count(*)"));


        return f;
    
answered by 30.08.2018 / 05:51
source