Ho creato una stores procedure su DB MySQL di cui posto la dichiarazione:
- Codice: Seleziona tutto
CREATE PROCEDURE prova.`somma_anni`(numeroRigheDaLeggere INT, nomeDaEvitare CHAR(3), OUT sommaAnni INT)
BEGIN
...
END;
La procedura funziona correttamente se la lancio da MySQL, ma se la lancio dal mio metodo Java mi da errore e non capisco perchè:
Qui sotto il codice Java che altro non fa che lanciare la procedura:
- Codice: Seleziona tutto
Connection connection=null;
String DbDriver = "com.mysql.jdbc.Driver";
String DbURL = "jdbc:mysql://localhost:3306/prova?autoReconnect=true&characterEncoding=utf8";
String username = "root";
String password = "root";
try {
Class.forName(DbDriver);
connection = DriverManager.getConnection(DbURL, username, password);
String sql = "{ ? = call somma_anni(?,?) }";
CallableStatement cs = connection.prepareCall(sql);
cs.setInt(2, 3);
cs.setString(3, "xxx");
cs.registerOutParameter(1, Types.INTEGER);
cs.execute();
int outParam = cs.getInt(1);
connection.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Quando viene eseguito cs.execute(); mi genera la seguente eccezione:
- Codice: Seleziona tutto
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: FUNCTION prova.somma_anni does not exist
...ma sia il nome del db (prova) che della procedura (somma_anni) sono corretti.
Non so più a cosa pensare...