sql >> Database >  >> RDS >> Mysql

Opgeslagen procedures aanroepen vanuit Java

Procedure en Java-code hebben weinig adoptie nodig. Dus laten we beginnen met de procedure:

create DEFINER=`root`@`localhost` PROCEDURE `comprobarUsuario`(
IN usu varchar(20),
IN pass varchar(20),
OUT idusuarios int)
BEGIN
  SELECT usuarios.idusuarios
  into idusuarios
  FROM usuarios
  WHERE usuarios.nombreUsuario = usu and usuarios.contraseña = pass;
end

U wilt de waarde "idusuarios" uit de database halen. Je moet het dus opslaan in de parameterwaarde. Zorg ervoor dat parameter en waarde in de select-clausule van elkaar verschillen of geef de kolomnaam op via [tabelnaam].[kolom] of alias.

Java-probleem:u hebt het ResultSet-object helemaal niet nodig. Gebruik cs.getInt() geleverd door de klasse CallableStatement om toegang te krijgen tot de waarde van een uitvoerparameter van een procedure.

public void mostrarDatos(){
    Connection con = null;
    try {
        con = getConnection();
        CallableStatement cs = con.prepareCall("{CALL comprobarUsuario(?,?,?)}");
        cs.setString(1, "Jorge");
        cs.setString(2, "1627Jorge");
        cs.registerOutParameter(3, java.sql.Types.INTEGER);
        cs.executeUpdate();

        int resultado = cs.getInt(3);
        System.out.println(resultado);  

    } catch (Exception e) {
        System.out.println(e);
    } finally {
        if(con != null) {
            try {
                con.close();
            } catch (SQLException e) {
                System.out.println(e);
            }
        }
    }
}


  1. Wijzig de opdracht in de Aurora DB (voeg een nieuwe kolom toe)

  2. Haal het weeknummer van een datum in PostgreSQL

  3. Migratiefout in django 2; AttributeError:'str' object heeft geen attribuut 'decode'

  4. Index auto-increment voor Microsoft SQL Server 2008 R2