Java


15
mar 12

Mis estimados rudos. Un poco de Java, Hibernate y T-SQL

No Gravatar

Bueno, ser rudo no es tan malo como suele decir. En este periodo QBit esta desarrollando un proyecto utilizando Java con Hibernate, Faces y Microsoft SQL; y necesitabamos tener un entidad cuya información se extraiga de un Procedimiento Almacenado o SP (por sus siglas en ingles Stored Procedure). Vayamos al grano mis estimados entusiastas de la programación:

Supongamos que tenemos la siguiente estructura:

public class MiTablaSP
{
private int id;
private String nombreTablaSP;
 
public int getId()
{
return id;
}
 
public void setId(int id)
{
this.id = id;
}
 
public String getNombreTablaSP()
{
return nombreTablaSP;
}
 
public void setId(String nombreTablaSP)
{
this.nombreTablaSP = nombreTablaSP;
}
}

Ahora veamos el mapeo que son los archivos con extensión hbm:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="MiTablaSP" table="MiTablaSP">
    <id column="id" name="id">
      <generator class="native"/>
    </id>
    <property column="nombreTablaSP" name="nombreTablaSP"/>
  </class>
</hibernate-mapping>
</xml>

Yo sé que para los expertos de la materia me podrían decir que puedo mapear el resultado del SP con los campos de mi objeto de la siguiente manera:

<sql-query callable="true" name="SP_MiTablaSP">
    <return alias="SP_MiTablaSP" class="MiTablaSP">
      <return-property column="id" name="id"/>
      <return-property column="nombreTablaSP" name="nombreTablaSP"/>
    </return>
 
    { call SP_MiTablaSP }
</sql-query>
</xml>

Pero tendría que invocarlo por SP en ves de que nativamente lo llene Hibernate. Continuemos, hay que crear el SP:

CREATE PROCEDURE SP_MiTablaSP
AS
SELECT 1 AS ID
'PRUEBA' AS nombreTablaSP

El penúltimo paso es crear un link:

EXEC sp_addlinkedserver
@server = 'local',
@srvproduct = '',
@provider='SQLNCLI',
@datasrc = @@SERVERNAME

Por útlmo solo hay que crear una vista:

CREATE VIEW MiTablaSP
AS
SELECT * FROM openquery(LOCAL, 'miBaseDatos.dbo.MiTablaSP')

Pues espero que les sea de mucha utilidad y recuerden “El conocimiento mutuo enriquece a todos” :D

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

24
ene 12

Remover elementos repetidos de un array php ruby java c# vb javascript

No Gravatar
Array remove duplicates items

Array remove duplicates items

Siguiendo la línea de publicar un post técnico y uno intelectual.. esta vez ha llegado el momento del post téncico.. lo que por mi actividad es muy fácil de escribirlo.. Esta entrada esta basada en la experiencia que tengo sobre algunos lenguajes y algo que es muy común de hacer y que muchos programadores escriben a su manera, unos porque no conocen el método y otros porque les gusta tener el control del código.

Este ejemplo se basa en eliminar los elementos duplicados de un arreglo, por ejemplo: (‘a’, ‘b’, ‘c’, ‘b’, ‘c’, ‘d’)

Php

$arreglo = array('a', 'b', 'c', 'b', 'c', 'd');
$filtro = array_unique($arreglo);

Ruby

arreglo = ['a', 'b', 'c', 'b', 'c', 'd']
filtro = arreglo.uniq

Java

Object[] arreglo = {'a', 'b', 'c', 'b', 'c', 'd'};
Set<Object> unst = new HashSet<Object>(Arrays.asList(arreglo));
Object[] filtro = unst.toArray();

C#

string[] arreglo = {'a', 'b', 'c', 'b', 'c', 'd'};
string[] filtro = arreglo.Distinct().ToArray();

Javascript

Array.prototype.unique = function() {
    var el = this.concat().sort();
    for (var i = 1; i < el.length; ) {
        if (el[i-1] === el[i])
            el.splice(i,1);
        else
            i++;
    }
    return el;
}
var filtro = ['a', 'b', 'c', 'b', 'c', 'd'].unique();

MaxScript

arreglo = #('a', 'b', 'c', 'b', 'c', 'd')
for i in arreglo.count to 1 by -1 do
(
    id = findItem arreglo arreglo[i]
    if (id != i) do deleteItem arreglo i
)

Seguramente hay muchas otras maneras de eliminar los elementos duplicados en los arreglos.. para lenguajes como maxscript, javascript o java.. pero al final se trata de lograr desarrollar la funcionalidad deseada.

El maestro de El Castor decia.. “No importa como lo hagas.. lo que importa es que funcione”..

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

12
ene 10

Utilizar una clase Java en Oracle 10g

No Gravatar

Existen dos formas de subir una clase Java a un esquema. La primer forma solo implica subir el archivo .Class y la segunda sube el archivo .Java


Clase Ejemplo

public class MiClaseOracle{

public static String mensaje() {

return “Mexico lindo y querido”;

}

public static void invierteNumeros(int[] primerNumero, int[] segundoNumero) {

int temporal = primerNumero[0];

primerNumero[0] = segundoNumero[0];

segundoNumero[0] = temporal;

}

}

Subir .Class

Primero se debe de revisar la versión del jdk con la que se compila y la versión del jdk que tiene la base de datos. El comando para revisar la versión es java -version. En caso de que se desee olvidar de esta ambigüedad se debe compilar utilizando el comando localizado en el directorio [ORAHOME]/db_1/jdk/bin/.

Una vez generado el archivo .Class se debe de ejecutar el siguiente comando en la linea de comandos: loadjava -user [usuario]/[contraseña]@[baseDatos] [NombreClase].class

Ejemplo

loadjava  –user  miusuario/mipwd@mibase   MiClaseOracle.class

Subir .Java

Obviamente en este caso se requiere tener el archivo .Java y ejecutar el siguiente comando en la línea de comandos: loadjava -user [usuario]/[contraseña]@[baseDatos] -resolve [NombreClase].java


Ejemplo

loadjava  –user  miusuario/mipwd@mibase -resolve MiClaseOracle.java

Después de haber ejecutado la anterior línea (ojo, no debe de mandar algún aviso la línea de comando) se debe de acceder a la base de datos (utilizando el mismo usuario con la que se ejecuto el comando anterior) y ejecutar el comando alter java class “[NombreClase]“  compile;


Ejemplo

alter java class ” MiClaseOracle”  compile;

Ejecución

Para poder consumir las funciones implementas en la clase MiClaseOracle se deben de crear en la base de datos una función y un procedimiento almacenado.

Función Mensaje


CREATE FUNCTION mensaje RETURN VARCHAR2

AS LANGUAGE JAVA

NAME ‘MiClaseOracle.mensaje() return java.lang.String’;

Procedimiento InvierteNumeros


CREATE PROCEDURE invierteNumeros

( primerNumero IN OUT NUMBER

, segundoNumero IN OUT NUMBER

) AS  LANGUAGE JAVA

NAME ‘MiClaseOracle.invierteNumeros(int[], int[])’;

Consumo

Para verificar la funcionalidad de lo que hemos venido haciendo es necesario escribir y ejecutar el siguiente PL

DECLARE

mensajerecibido VARCHAR2(200);

primerNumero NUMBER;

segundoNumero NUMBER;

BEGIN

primerNumero := 1;

segundoNumero := 9;

invierteNumeros(primerNumero,segundoNumero);

mensajerecibido := mensaje();

DBMS_OUTPUT.PUT_LINE(‘Primer = ‘ || primerNumero || ‘ — Segundo = ‘ || segundoNumero );

DBMS_OUTPUT.PUT_LINE(‘Mensaje = ‘ || mensajerecibido);

END;


Twiter @QBit_Mike

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

Qbit Mexhico Blog is using WP-Gravatar