En Java invocar a un procedimiento almacenado que no devuelve valores es bastante sencillo hacerlo desde JDBC, funciona de la misma manera que con cualquier base de datos, solo es cuestión de cambiar la cadena de conexión y el driver, el resto va igual.
En el ejemplo veremos con MySQL, pero como vengo diciendo cambien los 2 factores y podrán usarlo con cualquier otro motor de base de datos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package conexionDB; import java.sql.Connection; public class ConexionMySQL { public static Connection con_mysql; public static Connection conectar(String pHost, String pUser, String pPassword, String pDataBase) throws Exception { try { String databaseURL = "jdbc:mysql://" + pHost + "/" + pDataBase; Class.forName("com.mysql.jdbc.Driver"); con_mysql = java.sql.DriverManager.getConnection(databaseURL, pUser, pPassword); //System.out.println("Conexion con MySQL Establecida.."); } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } return con_mysql; } } |
En la siguiente clase veremos como implementar la clase anterior para hacer la conexion, además de invocar el procedimiento almacenado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | // imports necesarios import conexionDB.ConexionMySQL; import java.sql.CallableStatement; . . Connection connMY = null; try{ // creamos la conexion connMY = ConexionMySQL.conectar("192.168.1.100", "sa", "*******", "devtroce"); // establecemos que no sea autocommit, // asi controlamos la transaccion de manera manual connMY.setAutoCommit(false); /* instanciamos el objeto callable statement * que usaremos para invocar el SP * La cantidad de "?" determina la cantidad * parametros que recibe el procedimiento */ CallableStatement prcProcedimientoAlmacenado = connMY.prepareCall("{ call NuestroProcedimientoAlmacenado(?,?,?) }"); // cargar parametros al SP prcProcedimientoAlmacenado.setInt("pParametro1", 1); prcProcedimientoAlmacenado.setString("pParametro2", "Devtroce.com"); prcProcedimientoAlmacenado.setInt("pParametro3", 49); // ejecutar el SP prcProcedimientoAlmacenado.execute(); // confirmar si se ejecuto sin errores connMY.commit(); } catch (Exception e) { // deshacer la ejecucion en caso de error connMY.rollback(); // informar por consola e.printStackTrace(); } finally { // cerrar la conexion connMY.close(); } |
A pedido de Moise, edito el post y agrego la estructura de la tabla y un Stored Procedure que cumple para ejecutar con el código aquí:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CREATE TABLE devtroce( id int NOT NULL, campo2 varchar(50) NOT NULL, campo3 int NOT NULL ) ON PRIMARY CREATE PROCEDURE NuestroProcedimientoAlmacenado @id int, @campo2 varchar(50), @campo3 int AS BEGIN INSERT INTO devtroce VALUES ( @id, @campo2, @campo3); END |
Articulos Relacionados:









en
en
en
hola.. una consulta,(no se si sera un poco tonta pero me quiero sacar la duda)
En el caso de cuando se ejecuta una consulta que te devuelve varios registros, se guardan en una variable del tipo ResultSet (En java), que tipo de variable usas para guardar el resultado que te devuelve una funcion en mysql? en todo caso como es la sintaxis?
Es la misma sintaxis, solo que tu query sql seria
Y solo te retornará un valor escalar.
haa.. bien, o sea que ese resultado lo puedo guardar en una variable, que sea del tipo que retorna simplemente? no hace falta un ResultSet
como lleno un combo con un sp por lo geneal lo lleno con resulset y mientras se verdad lo lleno como hago eso un SP
Buenas, el import:
import conexionDB.ConexionMySQL;
no lo reconoce. y en mi netbeans no aparece esa libreria, y la e buscado y no la encuentro. alquien por favor me podria decir, como encontrarla, o en su defecto enviarmela a mi correo. cejebuto@hotmail.com gracias.
Hola!, te recomiendo que dejes de buscar esa libreria ya que no existe en ningun ide. Te explico lo que quiere decir:
“import conexionDB.ConexionMySQL;”
conexionDB //hace referencia a la carpeta o paquete donde se guarda la clase.
ConexionMySQL //es la clase que esta al inicio de esta pagina, y con la cual se realiza la conexion, y si no te diste cuenta aqui te la pego tal cual:
————————————————————
package conexionDB; //<– VES ES LA CARPETA DONDE SE GUARDA!!!
import java.sql.Connection;
public class ConexionMySQL { //<— ESTA ES LA CLASE Y SIGUE!!!
public static Connection con_mysql;
public static Connection conectar(String pHost, String pUser, String pPassword, String pDataBase) throws Exception {
try {
String databaseURL = "jdbc:mysql://" + pHost + "/" + pDataBase;
Class.forName("com.mysql.jdbc.Driver");
con_mysql = java.sql.DriverManager.getConnection(databaseURL, pUser, pPassword);
//System.out.println("Conexion con MySQL Establecida..");
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);
}
return con_mysql;
}
}
———————————————————–
Espero haberte ayudado!, Si quieres seguir el ejemplo solo cambia la ruta del import con el nombre del paquete donde haz guardado esta clase y con el nombre que le diste. Bye!
Muchas gracias por el material un saludo desde mexico…
Gran Aporte GEEK… saludos desde Panamá
Tarde pero seguro.
Gracias GeekZero he logrado solucionar el problema.
GRACIAS!!!!!!!!
Muy interesante el ejemplo pero tengo una duda los valores que mandas en el .setString(“pParametro1″,1); que significa ese 1? es necesario darle valores, si no le pongo valores no funcionara?
de antemano gracias.
Hola Alex, esos son los parametros que debe recibir el stored procedure, siempre debes enviar la misma cantidad de parametros como parametros de entrada tenga el SP y obligatoriamente debes asignarle un algun valor. En caso que tu SP no reciba parametros omites esas lineas, nada mas debes invocar al metodo execute();
Recuerda que deben coincidir tambien en el tipo de dato los parametros..
Una ayudadita por favor.
Si quiero utilizar este codigo para invocar a un proceso almacenado que no recibe ni retorna parametros. ¿que parte debo omitir? a mi juicio deberia omitir la parte del codigo donde se le mandan los parametro pero no me resulta.
De antemano muchas gracias.
Hola Lalo, estas lineas nada mas debes eliminar.
Que error te devuelve la ejecucion?
Gracias por el aporte, solo para solicitarles un ejemplo mas detallado con stored procedure creado en sql server y ejecutado desde java.
Hola Moises, he agregado al Post una tabla y un SP para mayor comprension, espero te sirva