Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] problema procedimiento almacenado

Estas en el tema de problema procedimiento almacenado en el foro de Java en Foros del Web. saludos amigos soy nuevo en el foro y quisiera exponer mi duda a ver si pueden ayudarme, no se si valla en esta seccion o ...
  #1 (permalink)  
Antiguo 05/08/2013, 20:20
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta problema procedimiento almacenado

saludos amigos soy nuevo en el foro y quisiera exponer mi duda a ver si pueden ayudarme, no se si valla en esta seccion o en otra pero yo a mi parecer siento que va mas enfocada en este espacio:

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:
//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
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:

Código:
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;
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:

Código:
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
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?

Código:
CREATE TABLE salarios
(
  id_salario integer NOT NULL,
  nombre character(25),
  salario integer,
  CONSTRAINT salarios_pkey PRIMARY KEY (id_salario)
)
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #2 (permalink)  
Antiguo 06/08/2013, 04:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problema procedimiento almacenado

Off-topic en Postgre.

Movido a Foro de Java
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/08/2013, 19:05
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: problema procedimiento almacenado

o perdon por poner el tema de mi duda dond e no iba jeje veo que lo movieron al lugar correcto jeje lo siento de igual forma es un placer conocerlos y espero que puedan ayudarme gracias.
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #4 (permalink)  
Antiguo 07/08/2013, 00:42
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: problema procedimiento almacenado

¿Puedes decir cuál era el mensaje de error?
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 07/08/2013, 05:22
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta Respuesta: problema procedimiento almacenado

hola el error es este:

Código:
catch(Exception e){
             JOptionPane.showMessageDialog(null,"Error");
          }//termina catch
en la parte del catch, aun no se el por que ya que como dije tengo otros procedimientos almacenados no de insercion de datos si no para consultarlos y esos si me los ejecuta correctamente si pudieras orientarme.
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #6 (permalink)  
Antiguo 07/08/2013, 05:40
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: problema procedimiento almacenado

Aparte de la línea donde da el error, es importante ver el mensaje de error que da java.

Para eso no puedes pasar de la excepción como estás haciendo, añádele al catch un e.printStackTrace para que te lo pinte en consola.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 07/08/2013, 19:42
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 10 años, 8 meses
Puntos: 0
Información Respuesta: problema procedimiento almacenado

ya agrege la linea de codigo que me decias al correr el programa e intentar insertar datos me muestra eston en el IDE:

Código:
run:
java.sql.SQLFeatureNotSupportedException: Method org.postgresql.jdbc4.Jdbc4CallableStatement.setInt(String,int) is not yet implemented.
	at org.postgresql.Driver.notImplemented(Driver.java:710)
	at org.postgresql.jdbc3.AbstractJdbc3Statement.setInt(AbstractJdbc3Statement.java:633)
	at Interfaz_Principal.cmdInsertarActionPerformed(Interfaz_Principal.java:427)
	at Interfaz_Principal.access$100(Interfaz_Principal.java:13)
	at Interfaz_Principal$2.actionPerformed(Interfaz_Principal.java:204)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6267)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6032)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
BUILD SUCCESSFUL (total time: 16 seconds)
¿que podra ser lo que ocaciona el error? leyendo un poco del codigo me da a entender que me falta declar alguna libreria o metodo en especial o algo por el estilo
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #8 (permalink)  
Antiguo 08/08/2013, 00:19
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: problema procedimiento almacenado

Cambia los drivers de postgresql por los de la versión jdbc4, creo que el problema puede venir por ahí.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #9 (permalink)  
Antiguo 08/08/2013, 19:06
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 10 años, 8 meses
Puntos: 0
Información Respuesta: problema procedimiento almacenado

ya cambie el driver, lo descargue de esta pagina [URL="http://jdbc.postgresql.org/download.html"]http://jdbc.postgresql.org/download.html[/URL] pero no me da me sigue marcando ese error, cambie el driver por este 9.2-1003 JDBC 4 pero sigue sin funcionar, prove tambien los procedimientos almacenados de consulta y esos si dan con esa libreria éro el de insertar no me da
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #10 (permalink)  
Antiguo 09/08/2013, 01:34
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: problema procedimiento almacenado

No he entendido nada de tu mensaje, sólo que cambiaste los drivers.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #11 (permalink)  
Antiguo 09/08/2013, 05:23
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 10 años, 8 meses
Puntos: 0
Pregunta Respuesta: problema procedimiento almacenado

jajajaja perdon decia que ya cambie el driver como me dijiste pero nada sigue igual me marca el mismo error que antes
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."
  #12 (permalink)  
Antiguo 09/08/2013, 06:14
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: problema procedimiento almacenado

Error mío, ya estabas usando JDBC4, simplemente no está implementado el pasar un parámetro indicando el nombre de columna.

Hazlo indicando el número de parámetro/interrogante. Empiezan en 1.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #13 (permalink)  
Antiguo 09/08/2013, 18:57
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 10 años, 8 meses
Puntos: 0
De acuerdo Respuesta: problema procedimiento almacenado

jajajaja muchas gracias por la ayuda compañero Xerelo me ha servido de maravila jejeje, despues de tanto tiempo picandole al programa al fin pude resolverlo jejeje colo el codigo ya como debio haber quedado hace tiempo para todos aquellos que igual podrian tener el mismo problema que yo:

Código:
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(1, id);
             procedimiento.setString(2, nombre);
             procedimiento.setInt(3, salario);
             
             procedimiento.execute();
          }//termina try
          catch(Exception e){
             JOptionPane.showMessageDialog(null,"Error");
             e.printStackTrace();
          }//termina catch
muchas gracias, por cierto quien debe de marcar que el tema esta ya solucionado yo o el que debe de hacerlo es el administrador.
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."

Etiquetas: almacenado, as, postgres, postgresql, procedimiento, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:48.