hace tiempo me dejaron una practica de diseñar una aplicacion en java para ingresar datos a traves de una interfas grafica la cual hice con net beans 7.3.1 la base de datos la hice con postgres, la base si me conecta con la aplicacion este es mi codigo de la conexion:
Código:
como puedeb ver es un metdo el cual yo lo coloco en el constructor de la aplicacion para que cuando se inicie la aplicacion el constructor ejecute la funcion y pueda conectar a la base de datos esto si lo hace de echo hice unos procedimientos almacenados para consultas y si me retorna los valores, ahora este es mi codigo del procedimiento almacenado en postgres://variables para la conexion y para el //llamado de procedimientos private Connection conexion; public Statement sentencia; public ResultSet resultado; public CallableStatement procedimiento; //metodo para conectar a la base de datos public void ConectarPostgres(){ try { //contiene el controlador para la base de datos final String CONTROLADOR = "org.postgresql.Driver"; Class.forName( CONTROLADOR ); //contiene la ruta donde esta guardada la base de datos asi como su nombre final String RUTA_BD ="jdbc:postgresql://localhost:5432/salario_trabajador"; //establece la conexion con la base de datos indicando la ruta //el usuario y la contraseña para poder conectarse conexion = DriverManager.getConnection(RUTA_BD,"postgres","root"); sentencia = conexion.createStatement(); }//termina try catch (ClassNotFoundException ex) { JOptionPane.showMessageDialog(null,"Error Carga Driver"); System.exit(1); }//termina catch catch (SQLException ex1) { JOptionPane.showMessageDialog(null,"Error Creacion Statement"); System.exit(1); }//termina catch }//termina metodo ConectarPostgres
Código:
este codigo estoy seguro en un 100% que si funciona ya que desde el gestor de la base de datos ejecute un par de veces el procedimiento ingresado valores y si los inserta en la tabla ahora el codigo del boton de insertar en mi aplicativo java:CREATE OR REPLACE FUNCTION insertar(id integer, nombre character, pago integer) RETURNS void AS 'insert into salarios (id_salario,nombre,salario) values (id,nombre,pago);' LANGUAGE sql VOLATILE COST 100; ALTER FUNCTION insertar(integer, character, integer) OWNER TO postgres;
Código:
como pueden ver y por lo que pude investigar ya que no encontre mucha informacion solo algunos ejemplos los datos los obtengo de las cajas de texto luego parceo el id y el salario ya que no numericos y el de nombre queda tal cual por que es texto, tambien investigue que para llamar procedimientos almacenados se utiliza la libreria de "import java.sql.CallableStatement;" en conjunto con la variable de conexiony el metodo de prepareCall asi como la sintaxis que se manda como argumento de dicha funcion para llamar al procedimiento al yo ingresar los datos en las cajas y presionar el boton se ejecuta el codigo y deberia de insertar los datos pero no lo hace me marca el mensaje de error ¿que estoy haciendo mal?, ¿acaso me faslta algo? he estado investigando y eso pero no encuentro nada que me pueda ayudar a solucionar este problema asi que puedo suponer que mi parseo de los datos pudiera estar mal y puede que no coincida con el tipo de dato que reuiera el procedimiento almacenado, espero que puedan ayudarme, como ultima cosa coloco el codigo de la creacion de la tabla salario hay esta el tipo de dato de cada campo, igual pudiera ser eso ¿ustedes que opinan?try{ int id; String nombre; int salario; id=Integer.parseInt(txtId.getText()); nombre=txtNombre.getText(); salario=Integer.parseInt(txtSalario.getText()); //prepara la funcion a ejecutar procedimiento=conexion.prepareCall("{call insertar(?,?,?)}"); //ejecuta la funcion procedimiento.setInt("id", id); procedimiento.setString("nombre", nombre); procedimiento.setInt("pago", salario); procedimiento.execute(); }//termina try catch(Exception e){ JOptionPane.showMessageDialog(null,"Error"); }//termina catch
Código:
CREATE TABLE salarios ( id_salario integer NOT NULL, nombre character(25), salario integer, CONSTRAINT salarios_pkey PRIMARY KEY (id_salario) )