Crear Store Procedure en Java DB o Apache Derby

Iniciado por maurobravo, 7 Agosto 2013, 23:28 PM

0 Miembros y 1 Visitante están viendo este tema.

maurobravo

Buenas a todos.
Lo que quiero saber como se hace es crear un Store Procedure en la base que trae NetBeans.
Por lo que estuve viendo en la documentacion de la pagina de apache llegue a poder crearlo, pero no logro entender donde colocar la consulta dentro del SP.
La query que use para crear el sp es:




CREATE PROCEDURE prueba(DP1 INTEGER, DP2 INTEGER)
PARAMETER STYLE JAVA
LANGUAGE JAVA
READS SQL DATA
DYNAMIC RESULT SETS 2
EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.ProcedureTest.selectRows'



Esta la saque de http://wiki.apache.org/db-derby/DerbySQLroutines#Creating_Procedures


Espero puedan ayudarme.

Desde ya muchas gracias.

Saludos

1mpuls0

La estructura es muy similar a un lenguaje de consulta de datos.

http://db.apache.org/derby/docs/10.1/ref/rrefcreateprocedurestatement.html

Algo así.
Citar
CREATE PROCEDURE createUser( IN username VARCHAR(64),
                             IN password VARCHAR(64),
                             IN email VARCHAR(64) )
PARAMETER STYLE JAVA
LANGUAGE JAVA
EXTERNAL NAME 'CreateUserCommand.createUser'; //class_name.method_name

Ahí viene todo lo necesario.

Saludos.
abc

maurobravo

Hola Darhius , gracias por la respuesta. Perdon que no entienda pero sigo sin entender por ejemplo donde pongo dentro del Store Procedure algo como "Insert into tabla (campos) values (datos)"

Muchas Gracias. Saludos

1mpuls0

Como tienes instalado el derby?, me refiero a que si lo tienes configurado en nb.
Puedes hacerlo desde ahí o desde línea de comandos.
abc

maurobravo

Lo tengo instalado en NB, lo tengo en prestaciones, donde le doy a iniciar servidor, luego conecto la base de datos y ahí en procedimientos apretó en ejecutar comandos. Aqui es donde con el script que puse mas abajo pude crear un sp pero no se como crear un sp con su consulta adentro, para que luego la pueda llamar desde la aplicación de escritorio que tengo que hacer en java. Espero estar siendo lo bastante claro. Saludos

1mpuls0

Cita de: maurobravo en  8 Agosto 2013, 01:37 AM
Lo tengo instalado en NB, lo tengo en prestaciones, donde le doy a iniciar servidor, luego conecto la base de datos y ahí en procedimientos apretó en ejecutar comandos. Aqui es donde con el script que puse mas abajo pude crear un sp pero no se como crear un sp con su consulta adentro, para que luego la pueda llamar desde la aplicación de escritorio que tengo que hacer en java. Espero estar siendo lo bastante claro. Saludos

Es que es un poco diferente que otro lenguaje.

Más claro.

Table.
Código (sql) [Seleccionar]

CREATE TABLE "USERS" (
    "USERNAME" VARCHAR(64),
    "PASSWORD" VARCHAR(64),
    "EMAIL" VARCHAR(64)
);



Stored Procedure.
Código (sql) [Seleccionar]
CREATE PROCEDURE createUser( IN username VARCHAR(64),
                             IN password VARCHAR(64),
                             IN email VARCHAR(64) )
PARAMETER STYLE JAVA
LANGUAGE JAVA
EXTERNAL NAME 'Users.createUser';



Citar
EXTERNAL NAME string

String describes the Java method to be called when the procedure is executed, and takes the following form:
class_name.method_name
http://db.apache.org/derby/docs/10.1/ref/rrefcreateprocedurestatement.html


Class Users.
Código (java) [Seleccionar]

/*
* By Darhius929
*/
package users;

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.DriverManager;

public class Users {
   
    public static void createUser( String username, String password, String email ) throws SQLException {
      Connection conn = null;
      PreparedStatement stmt = null;
      try {
        conn = DriverManager.getConnection( "jdbc:default:connection" );
        String sql = "INSERT INTO USERS " +
                     "(USERNAME, PASSWORD, EMAIL) VALUES (?,?,?)";
        stmt = conn.prepareStatement( sql );
        stmt.setString( 1, username );
        stmt.setString( 2, password );
        stmt.setString( 3, email );
        stmt.executeUpdate();
      } finally {
          stmt.close();
          conn.close();
      }
    }
}


Solo faltaría el método en Java para llamar el SP.

Saludos.
abc

maurobravo

Ah es mas raro de lo que había pensado jejeje Muchas gracias ahora si lo entendí. Saludos

1mpuls0

#7
No entiendo muy bien de por qué es así  :¬¬

Debes tener cuidado en lo siguiente.

Citar
EXTERNAL NAME 'derby.Users.createUser';

Esta línea es importante. Se le dice al motor de la base de datos donde encontrar la función, en este caso el motor de base de datos busca en la clase derby.Users para el método public static llamado createUser.

1. En pocas palabras. Incluye desde el nombre del package hasta el nombre del método.
2. El nombre del método que se incluye en el SP debe ser declarado como public en Java.

Saludos.

abc