Resultados 1 al 7 de 7

Tema: Como retornar el valor de una funcion en posgresql a netbeans??

  1. #1
    Pajarito Nuevo Avatar de Marcraft
    Fecha de ingreso
    19 Jun, 10
    Mensajes
    38

    Como retornar el valor de una funcion en posgresql a netbeans??

    Buenas
    les presento la siguiente una duda...

    tengo un motor de base de datos en posgresql y cree la siguiente funcion..

    CREATE OR REPLACE FUNCTION sumar_tres_numeros(IN x integer, IN y integer, OUT sum integer, OUT prod integer, OUT prod2 integer)
    RETURNS record AS
    $BODY$
    BEGIN
    sum := x + y;
    prod := x * y;
    END
    $BODY$
    LANGUAGE 'plpgsql' VOLATILE
    COST 100;
    ALTER FUNCTION sumar_tres_numeros(integer, integer) OWNER TO postgres;


    como pueden ver la funcion esta en lenguaje PL/SQL, y para crear la funcion es CREATE OR REPLACE FUNCTION, a diferencia de oracle que es store procedure.

    esta funcion funciona al hacer un script SELECT dentro del pgAdmin III que es mi administrador de base de datos.

    De esta forma

    SELECT sumar_tres_numeros(5,5);

    //Devuelve:
    sumar_tres_numeros
    record
    (10,25)


    Bueno ahora quiero que jButtonActionPerformed llame a este funcion pasando los parametros y el resultado desplegar en un jTextField.

    Como podria llamar a la funcion del base de datos posgres desde netbeans pasando parametros y desplegando el resultado en un jTextField???

    ya he buscado mucho espero puedan ayudarme..

    Gracias.
    <MarCraft>
    [email protected]
    ----
    Aclaración.. es Netbeans..!!
    Última edición por Marcraft; 02/12/2010 a las 10:29 Razón: Post unidos

  2. #2
    Deose!! Avatar de Deose
    Fecha de ingreso
    22 Oct, 10
    Ubicación
    Stgo!
    Mensajes
    47

    Re: Como retornar el valor de una funcion en posgresql a netbeans??

    Primero que todo hay que tienes que importar java.sql.CallableStatement;
    para llamar el procedimiento ..
    debes crear la coneccion a la db que en este caso le vamos a suponer que ese paso esta echo y tambien vamos a suponer que se llama conectionDb

    ahora dentro de un try

    CallableStatement procedimentoX = conectionDb.prepareCall("{call sumar_tres_numeros (?,?)}");
    // y pasamos los parametros
    procedimentoX.setInt("x",variable1);
    procedimentoX.setInt("y",variable2);
    boolean esVerdad = procedimentoX.execute();
    while(esVerdad)
    {
    ResultSet rs = procedimentoX.getResultSet();
    salida1 = procedimentoX.getInt("sum");
    .
    .
    Lo mismo para los otros
    .
    .
    esVerdad = procedimentoX.getMoreResults();
    }

    eso es lo que me acuerdo y si no me equivoco debe funcar
    espero te sirva
    Saludos

  3. #3
    Pajarito Nuevo Avatar de Marcraft
    Fecha de ingreso
    19 Jun, 10
    Mensajes
    38

    Re: Como retornar el valor de una funcion en posgresql a netbeans??

    Muchas gracias Deose...
    Pero ahun tengo Problemas
    ya lo probe de esta forma....

    import java.sql.CallableStatement;
    .
    ResultSet rs;
    .
    .
    private void funcion_sumar_tres_numeros(){

    int a;

    int b;
    baseDatos.conectar();
    try{

    CallableStatement procedimentoX=baseDatos.conectar().prepareCall("{c all sumar_tres_numeros (?,?)}");

    procedimentoX.setInt("x",5);
    procedimentoX.setInt("y",5);
    boolean esVerdad = procedimentoX.execute();
    while(esVerdad)
    {
    rs = procedimentoX.getResultSet();

    a = procedimentoX.getInt("sum");

    b = procedimentoX.getInt("prod");
    this.jTextField2.setText(" "+a+","+b);
    esVerdad = procedimentoX.getMoreResults();
    }


    }catch (SQLException ex) {

    Logger.getLogger(Listtodotipmov.class.getName()).l og(Level.SEVERE, null, ex);
    }

    }


    No consegui jTextField2.setText aparesca los resultados(en este casa 10, 25)
    1. EN ("{call sumar_tres_numeros (?,?)}"); Tendria que pasar los parametros o solo quedan los "?"
    2. El esVerdad = procedimentoX.getMoreResults(); tiene que estar dentro del while.
    3.Que falta o que ago mal jaja..


    Muchas gracias.

  4. #4
    Deose!! Avatar de Deose
    Fecha de ingreso
    22 Oct, 10
    Ubicación
    Stgo!
    Mensajes
    47

    Re: Como retornar el valor de una funcion en posgresql a netbeans??

    Cita Iniciado por Marcraft Ver mensaje
    Muchas gracias Deose...
    Pero ahun tengo Problemas
    ya lo probe de esta forma....

    import java.sql.CallableStatement;
    .
    ResultSet rs;
    .
    .
    private void funcion_sumar_tres_numeros(){

    int a;

    int b;
    baseDatos.conectar();
    try{

    CallableStatement procedimentoX=baseDatos.conectar().prepareCall("{c all sumar_tres_numeros (?,?)}");

    procedimentoX.setInt("x",5);
    procedimentoX.setInt("y",5);
    boolean esVerdad = procedimentoX.execute();
    while(esVerdad)
    {
    rs = procedimentoX.getResultSet();
    a = procedimentoX.getInt("sum");

    b = procedimentoX.getInt("prod");
    this.jTextField2.setText(" "+a+","+b);
    esVerdad = procedimentoX.getMoreResults();
    }


    }catch (SQLException ex) {

    Logger.getLogger(Listtodotipmov.class.getName()).l og(Level.SEVERE, null, ex);
    }

    }


    No consegui jTextField2.setText aparesca los resultados(en este casa 10, 25)
    1. EN ("{call sumar_tres_numeros (?,?)}"); Tendria que pasar los parametros o solo quedan los "?"
    2. El esVerdad = procedimentoX.getMoreResults(); tiene que estar dentro del while.
    3.Que falta o que ago mal jaja..


    Muchas gracias.
    en el caso de ....
    1- {call sumar_tres_numeros (?,?)} los "?" son la cant de parametro que recibe el procedure por lo que quedan asi
    después en la instrucción procedimentoX.setInt("y",5); pasas el valor del parámetro

    2-El esVerdad = procedimentoX.getMoreResults(); tiene que estar dentro del while ... ya que de no haber mas datos ... es false y no va a entrar al while

    3- te arroja un error?? o no hace nada.. nada!
    pone unos System.out.print() para saber por donde va pasando el programa..
    solo para guiarte
    y lo otro recomiendo que la coneccion de a la db la hagas de la sigiente forma por lo menos simpre lo hago asi no nunca e tenido problemas
    ejemplo

    Connection conec = null;
    baseDatos dbconeccion = new baseDatos();
    conec = dbconeccion.conectar(); // se supone que la funcion conectar() debe retornar un variable de tipo Connection en este caso
    try{
    CallableStatement procedimentoX=conec.prepareCall("{call sumar_tres_numeros (?,?)}")
    .....

    cuenta como te va y muestra el error que te sale o si no te sale nada!
    Saludos

  5. #5
    Pajarito Nuevo Avatar de Marcraft
    Fecha de ingreso
    19 Jun, 10
    Mensajes
    38

    Re: Como retornar el valor de una funcion en posgresql a netbeans??

    Bueno ...

    Primero tener en cuenta

    Nombre de mi clase para conectar la base de datos ConectarBaseDatos
    Mi metodo conectar en la clase ConectarBaseDatos es:

    private static final String driver = "org.postgresql.Driver";
    private static final String baseDatosDefecto = "infocoop_coodene";
    private static final String user = "postgres";
    private static final String password = "newage";
    private String connectString = "jdbc:postgresql://192.168.1.20:5432/";
    private Connection conexion = null;

    public Connection conectar() {
    try {

    conexion = DriverManager.getConnection(connectString, user, password);

    } catch (SQLException ex) {
    Logger.getLogger(ConectarBaseDatos.class.getName() ).log(Level.SEVERE, null, ex);
    }

    conexionLista = true;
    return conexion;
    }

    Segundo con el codigo que te pase anteriormente no entraba en el try sino que en el catch
    Intente lo que propusiste.

    Connection conec = null;
    ConectarBaseDatos dbconeccion = new ConectarBaseDatos();
    conec = dbconeccion.conectar();

    pero
    en conec = dbconeccion.conectar(); me da un error..
    Incopatible types
    found java.sql.connection
    required com.mysql.jdbc.Conecction


    Haciendo clic y en el foquito
    cast..conectar(...) to Connection

    Me arregla queda de la sgte forma.


    Connection conec = null;
    ConectarBaseDatos dbconeccion = new ConectarBaseDatos();
    conec = (Connection) dbconeccion.conectar();
    try{
    CallableStatement procedimentoX=conec.prepareCall("{call sumar_tres_numeros (?,?)}");....

    y de esta forma si entra en el catch pero una vez que pasa por el CallableStatement procedimentoX no pasa mas nada... creo que el conec queda en null...

    Si tienen mas sugerencias les agradesco caso contrario me creo una clase ya que el cliente queria aprovechar las funciones de su base de datos..

    Gracias..!
    Saludos


  6. #6
    Deose!! Avatar de Deose
    Fecha de ingreso
    22 Oct, 10
    Ubicación
    Stgo!
    Mensajes
    47

    Re: Como retornar el valor de una funcion en posgresql a netbeans??

    Cita Iniciado por Marcraft Ver mensaje
    Bueno ...

    Primero tener en cuenta

    Nombre de mi clase para conectar la base de datos ConectarBaseDatos
    Mi metodo conectar en la clase ConectarBaseDatos es:

    private static final String driver = "org.postgresql.Driver";
    private static final String baseDatosDefecto = "infocoop_coodene";
    private static final String user = "postgres";
    private static final String password = "newage";
    private String connectString = "jdbc:postgresql://192.168.1.20:5432/";
    private Connection conexion = null;

    public Connection conectar() {
    try {

    conexion = DriverManager.getConnection(connectString, user, password);

    } catch (SQLException ex) {
    Logger.getLogger(ConectarBaseDatos.class.getName() ).log(Level.SEVERE, null, ex);
    }

    conexionLista = true;
    return conexion;
    }

    Segundo con el codigo que te pase anteriormente no entraba en el try sino que en el catch
    Intente lo que propusiste.

    Connection conec = null;
    ConectarBaseDatos dbconeccion = new ConectarBaseDatos();
    conec = dbconeccion.conectar();

    pero
    en conec = dbconeccion.conectar(); me da un error..
    Incopatible types
    found java.sql.connection
    required com.mysql.jdbc.Conecction


    Haciendo clic y en el foquito
    cast..conectar(...) to Connection

    Me arregla queda de la sgte forma.


    Connection conec = null;
    ConectarBaseDatos dbconeccion = new ConectarBaseDatos();
    conec = (Connection) dbconeccion.conectar();
    try{
    CallableStatement procedimentoX=conec.prepareCall("{call sumar_tres_numeros (?,?)}");....

    y de esta forma si entra en el catch pero una vez que pasa por el CallableStatement procedimentoX no pasa mas nada... creo que el conec queda en null...

    Si tienen mas sugerencias les agradesco caso contrario me creo una clase ya que el cliente queria aprovechar las funciones de su base de datos..

    Gracias..!
    Saludos

    mmmm yo creo que el error esta en el metodo conectar()...

    primero tienes que cargar el driver....

    Class.forName("NOMBRE DRIVER"); //en este caso no se como se llama
    ese es un pequeño pero gran detalle
    y después obtienes la coneccion...
    de esa manera esta retornando la conecction = null

  7. #7
    Pajarito Nuevo Avatar de Marcraft
    Fecha de ingreso
    19 Jun, 10
    Mensajes
    38

    Re: Como retornar el valor de una funcion en posgresql a netbeans??

    Cita Iniciado por Deose Ver mensaje
    mmmm yo creo que el error esta en el metodo conectar()...

    primero tienes que cargar el driver....



    ese es un pequeño pero gran detalle
    y después obtienes la coneccion...
    de esa manera esta retornando la conecction = null

    lo que pasa es que no quise poner todo mi metodo par a no hacer tan extenso mi post..
    aqui esta.. aclarando que si se conecta mi base de datos con este metodo.

    public ConectarBaseDatos(String nombreBaseDatos) {
    baseDatos = nombreBaseDatos;
    connectString = connectString + baseDatos;
    }

    public Connection conectar() {
    if (DEBUG) {
    System.out.println("DEBUG: ConectarBaseDatos.conectar(): nombreDB=" + baseDatos
    + ", stringConex= " + connectString + " userDB= " + user
    + ", pwd= " + password);
    }

    try {

    Class.forName(driver);

    } catch (ClassNotFoundException ex) {
    Logger.getLogger(ConectarBaseDatos.class.getName() ).log(Level.SEVERE, null, ex);
    }
    try {
    System.out.println("asignando nueva conexion..");
    conexion = DriverManager.getConnection(connectString, user, password);

    } catch (SQLException ex) {
    Logger.getLogger(ConectarBaseDatos.class.getName() ).log(Level.SEVERE, null, ex);
    }

    conexionLista = true;
    return conexion;
    }

Temas similares

  1. como cambiar jpanel usando un menu en netbeans
    Por bumblebee en el foro Lenguajes de Programación
    Respuestas: 4
    Último mensaje: 09/04/2011, 13:46
  2. Como retornar el valor de una funcion en oracle a visual studio??
    Por sebastianxjavier en el foro Lenguajes de Programación
    Respuestas: 3
    Último mensaje: 30/11/2010, 15:10
  3. mplementar un programa que permita calcular el valor de la función f(x)=e^x
    Por aonefux en el foro Lenguajes de Programación
    Respuestas: 7
    Último mensaje: 19/05/2010, 03:09
  4. Como Uso La Funcion Validar Rut?
    Por fabi en el foro Lenguajes de Programación
    Respuestas: 8
    Último mensaje: 13/05/2009, 17:16
  5. netbeans con C/C++ como configurar
    Por jann90210 en el foro Lenguajes de Programación
    Respuestas: 3
    Último mensaje: 11/06/2007, 12:20

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
*