miércoles, 17 de marzo de 2010

Utilizar un DataSource desde una clase con Main

Para poder consumir y utilizar un DataSource desde una clase que no esta dentro de un Jboss lo que hay que hacer es lo siguiente

1) Definir los siguientes métodos:

private static final String NAME_JNDI_DS = "ds/PlataformaBase"; // OJO!! -> SIN EL "java:ds/PlataformaBase" DataSource dataSource = null; private static ConnectionPool instance;
private ConnectionPool() {
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
env.put(Context.PROVIDER_URL, "10.33.13.22:1199");

InitialContext context = new InitialContext(env);
dataSource = (DataSource)context.lookup(NAME_JNDI_DS);
} catch (NamingException e) {
System.out.println(" ERROR NamingException ConnectionPool: " + e + " - " + e.getMessage());
}
}

public static ConnectionPool getInstance (){
if (instance == null )
instance = new ConnectionPool();
return instance;
}

public Connection getConnection () throws SQLException {
try {
Connection retorno = null;
retorno = dataSource.getConnection();

return retorno;
} catch (SQLException e) {
log.error("ERROR NamingException ConnectionPool: " + e + " - " + e.getMessage());
throw e;
}
}

2) El main es el siguiente:

public static void main(String[] args) {
// TODO Auto-generated method stub

try {
ConnectionPool objCP = ConnectionPool.getInstance();
Connection conn = objCP.getConnection();
PreparedStatement prst = null;
ResultSet rs = null;

String strConsulta = "";
strConsulta = "SELECT * FROM FUNCIONALIDAD_SERVICIO";
prst = conn.prepareStatement(strConsulta);
rs = prst.executeQuery();
while(rs.next()){
System.out.println(rs.getString("PK_FSE_COD_FUN")+" -> "+rs.getString("FSR_NOM"));
}
} catch (Exception e) {
System.out.println("Error al conectarse");
e.printStackTrace();
}
}

3) El datasource debe estar definido asi:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>ds/PlataformaBase</jndi-name>
<!--<use-java-context>false</use-java-context>-->
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = _HOST_)(PORT=1521)))(CONNECT_DATA =(SERVICE_NAME = _SERVICE_NAME_)))</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>_USER_</user-name>
<password>_PASSWORD_</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<idle-timeout-minutes>10</idle-timeout-minutes>
<min-pool-size>1</min-pool-size>
<max-pool-size>8</max-pool-size>
</local-tx-datasource>
</datasources>

4) Hacer el deploy de la aplicacion y el DataSource en JBoss y deberia funcionar.

miércoles, 15 de julio de 2009

Agregar elementos a un a tabla HTML en Firefox e Internet Explorer

Para lograr agregar elementos dinámicamente a una tabla y que funcione en FireFox e Internet Explorer se debe crear la tabla de la siguiente manera:

<html>
<body>
<script language="javascript">
function function2(){
var myBody = document.getElementById('mainbody');

var myElement = document.createElement('tr');
var tds = document.createElement('td');
var celda = document.createTextNode('celda 1');

tds.appendChild(celda);
myElement.appendChild(tds);

celda = document.createTextNode('celda 2');
tds = document.createElement('td');
tds.appendChild(celda);
myElement.appendChild(tds);

myBody.appendChild(myElement);

}
</script>
<body id="myBody">
<table>
<thead>
<tr>
<th>1</th>
<th>2</th>
</tr>
</thead>
<tbody id="mainbody">
</tbody>
</table>
<button onClick="function2();">Put trs</button>
</body>
</html>


Si la tabla no es creada con un TBODY, en IE no funciona apropiadamente y es necesario agregar los elementos usando el atributo innerHTML de la tabla

miércoles, 3 de junio de 2009

User Functions en MySQL

Ejemplo de User Function en MySQL, con el uso de cursores.

DROP FUNCTION IF EXISTS importacion.set_tiponodo_adsl;


delimiter '/';
CREATE FUNCTION importacion.set_tiponodo_adsl() returns varchar(20)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE val_edificio varchar(20);
DECLARE val_equipo varchar(20);
DECLARE cablepriaux VARCHAR(20);
DECLARE tiponodoaux VARCHAR(20);
DECLARE val_rangonodos VARCHAR(20);
DECLARE cur1 CURSOR FOR SELECT edificio, equipo FROM importacion.adslaux WHERE tiponodo = 'NO' OR tiponodo IS NULL;

OPEN cur1;
IF (Select FOUND_ROWS()>0) THEN
dependency_loop: LOOP
FETCH cur1 INTO val_edificio, val_equipo;
IF NOT done THEN
SET tiponodoaux = '';

SELECT tiponodo INTO val_rangonodos
FROM importacion.rangonodos
WHERE edificio = val_edificio
AND lim_inferior <>
AND lim_superior > cast(val_equipo as UNSIGNED );

IF val_rangonodos IS NULL THEN
SET tiponodoaux = 'NO';
ELSE
SET tiponodoaux = val_rangonodos;
END IF;

UPDATE importacion.adslaux
SET tiponodo = tiponodoaux
WHERE edificio = val_edificio
AND equipo = val_equipo;

ELSE
LEAVE dependency_loop;
END IF;
END LOOP dependency_loop;
END IF;
CLOSE cur1;

RETURN '';
END/
delimiter ';'/

Para invocarla simplemente hacer
SELECT importacion.set_tiponodo_adsl;

Stored Procedure en MySQL

Ejemplo de como crear un Stored Procedure en MySQL

DROP PROCEDURE IF EXISTS trafico.datos_calculo_circuitos_corresp;

delimiter '/';
CREATE PROCEDURE trafico.datos_calculo_circuitos_corresp(valor varchar(20))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE val_corresponsal VARCHAR(6);
DECLARE val_minutos INT;

DECLARE cur1 CURSOR FOR SELECT b.corresponsal, sum(a.minutos) AS Minutos FROM trafico.rutas b INNER JOIN trafico.trafico a ON a.ruta = b.ruta WHERE substring(a.fecha,1,4) = valor AND b.habilitada = TRUE GROUP BY b.corresponsal;

DROP TABLE IF EXISTS tmp_set;
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_set (corresponsal varchar(6), minutos int);

OPEN cur1;
IF (Select FOUND_ROWS()>0) THEN
dependency_loop: LOOP
FETCH cur1 INTO val_corresponsal, val_minutos;
IF NOT done THEN
INSERT INTO tmp_set (corresponsal, minutos) values (val_corresponsal, val_minutos);
ELSE
LEAVE dependency_loop;
END IF;
END LOOP dependency_loop;
END IF;
CLOSE cur1;

SELECT * FROM tmp_set;
END/
delimiter ';'/

Para invocar al procedimiento hacer:
call
trafico.datos_calculo_circuitos_corresp('algo');


Nota: Para poder crear el stored procedure/función es necesario redefinir el delimitador de fin de linea que tiene por defecto MySQL para evitar que corte la definición por la mitad. Por eso se utiliza el comando delimeter y se termina el script asignando nuevamente el caracter de fin de linea abitual.

miércoles, 29 de abril de 2009

Paginacion en ORACLE

Para paginar un resultado en ORACLE hay que hacerlo con una subconsulta y el rownum de cada registro. Un ejemplo es este:

SELECT * FROM (
SELECT TABLA.* , ROWNUM AS FILAS
FROM TABLA )
WHERE FILAS BETWEEN 5 AND 10

miércoles, 22 de abril de 2009

Funcion Top o Limit en Oracle

Si alguna vez se han preguntado como hacer para obtener un resultado similar al de la funcion TOP de SQL Server o LIMIT de MySQL simplemente tienen que hacer:

ORACLE
SELECT * FROM Tabla1 WHERE rownum <= 10

SQL Server 2005
SELECTtop 10 * FROM Tabla1

MySQL
SELECT * FROM Tabla1 LIMIT 10

martes, 31 de marzo de 2009

Ejemplo de User Defined Function

Ejemplo de User Function en SQL Server 2005

USE [name_db]
GO
/****** Object: UserDefinedFunction [dbo].[getAccounts] Script Date: 03/31/2009 15:31:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[getAccounts]
(@kchecks varchar(10))
RETURNS varchar(max)
AS
BEGIN
declare @Return varchar(max)
DECLARE @temp table (
[tmp_field] [varchar] (max)
)

set @Return = ''

INSERT INTO @temp SELECT Account.account_id
from advocate_mig_final.dbo.checks
inner join advocate_mig_final.dbo.chckjrnl on chckjrnl.kchecks = checks.kchecks
inner join advocate_mig_final.dbo.journal on journal.kjournal = chckjrnl.kjournal
inner join advocate_db_final.dbo.Account on Account.leg_kaccounts = journal.kaccounts
where journal.djournal > '12/31/1999' and checks.kvictims != '111111'
and checks.kchecks =@kchecks


select @Return = @Return +','+ tmp_field
from @temp

If len(@Return) > 0 Select @Return = right(@Return, len(@Return) - 1)


return @return
end


--select advocate_mig_final.dbo.getAccounts('AFCAYP')

Mis fotos en TrekEarth