Foro de elhacker.net

Programación => Java => Mensaje iniciado por: maurobravo en 7 Agosto 2013, 23:28 pm



Título: Crear Store Procedure en Java DB o Apache Derby
Publicado por: maurobravo en 7 Agosto 2013, 23:28 pm
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:


Código:

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


Título: Re: Crear Store Procedure en Java DB o Apache Derby
Publicado por: 1mpuls0 en 8 Agosto 2013, 00:04 am
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.


Título: Re: Crear Store Procedure en Java DB o Apache Derby
Publicado por: maurobravo en 8 Agosto 2013, 00:38 am
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


Título: Re: Crear Store Procedure en Java DB o Apache Derby
Publicado por: 1mpuls0 en 8 Agosto 2013, 00:43 am
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.


Título: Re: Crear Store Procedure en Java DB o Apache Derby
Publicado por: 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


Título: Re: Crear Store Procedure en Java DB o Apache Derby
Publicado por: 1mpuls0 en 8 Agosto 2013, 18:09 pm
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
  1. CREATE TABLE "USERS" (
  2.    "USERNAME" VARCHAR(64),
  3.    "PASSWORD" VARCHAR(64),
  4.    "EMAIL" VARCHAR(64)
  5. );
  6.  


Stored Procedure.
Código
  1. CREATE PROCEDURE createUser( IN username VARCHAR(64),
  2.                             IN password VARCHAR(64),
  3.                             IN email VARCHAR(64) )
  4. PARAMETER STYLE JAVA
  5. LANGUAGE JAVA
  6. EXTERNAL NAME 'Users.createUser';
  7.  


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
  1. /*
  2.  * By Darhius929
  3.  */
  4. package users;
  5.  
  6. import java.sql.SQLException;
  7. import java.sql.Connection;
  8. import java.sql.PreparedStatement;
  9. import java.sql.DriverManager;
  10.  
  11. public class Users {
  12.  
  13.    public static void createUser( String username, String password, String email ) throws SQLException {
  14.      Connection conn = null;
  15.      PreparedStatement stmt = null;
  16.      try {
  17.        conn = DriverManager.getConnection( "jdbc:default:connection" );
  18.        String sql = "INSERT INTO USERS " +
  19.                     "(USERNAME, PASSWORD, EMAIL) VALUES (?,?,?)";
  20.        stmt = conn.prepareStatement( sql );
  21.        stmt.setString( 1, username );
  22.        stmt.setString( 2, password );
  23.        stmt.setString( 3, email );
  24.        stmt.executeUpdate();
  25.      } finally {
  26.          stmt.close();
  27.          conn.close();
  28.      }
  29.    }
  30. }
  31.  

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

Saludos.


Título: Re: Crear Store Procedure en Java DB o Apache Derby
Publicado por: maurobravo en 8 Agosto 2013, 20:08 pm
Ah es mas raro de lo que había pensado jejeje Muchas gracias ahora si lo entendí. Saludos


Título: Re: Crear Store Procedure en Java DB o Apache Derby
Publicado por: 1mpuls0 en 8 Agosto 2013, 20:30 pm
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.