martes, 16 de diciembre de 2008

javax.swing.Timer , para cosas sencillas y con tiempo

generalmente es mejor ocupar hilos para manejar tiempos , pero
para cosas bien sencillas no seria malo ocupar este Timer , como
por ejemplo en animaciones muy sencillas , un mensaje recordatorio,
bueno etc


1.- importar java.awt.event.*;

2.- el formato es asi para crear una instancia

javax.swing.Timer yourTimer =
new javax.swing.Timer(int milliseconds, ActionListener doIt);

3.- la implementacion puede es asi:

javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener() {

public void actionPerformed(ActionEvent e) {

Accion
}
});

4.- este posee un Start y un Stop , que tenemos que ocupar para hacer correr nuestro
Timer

     

lunes, 1 de diciembre de 2008

crear un PDF en java

El siguiente ejemplo consiste en pasar un texto a un archivo pdf.


Para lograr esto o manipular de otra forma un pdf tenemos que bajar
el siguiente JAR iText-2.1.4 y añadirlo a nuestro proyecto
(sobre el proyecto : propiedades ->biblioteca -> añadir JAR )

http://www.lowagie.com/iText/download.html


para realizar esto vamos a utilizar el siguiente codigo

Document document = new Document();

try {

PdfWriter.getInstance(document, new FileOutputStream("ejemplo.pdf"));

document.open();

document.add(new Paragraph(jTextArea1.getText()));

} catch (DocumentException de) {
System.err.println(de.getMessage());
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}

document.close();

el archivo pdf se crea en nuestro proyecto



ademas con esta biblioteca iText podemos manipular un RTF o un
HTML

http://www.lowagie.com/iText/


http://www.adobepress.com/articles/printerfriendly.asp?p=420686

http://itextdocs.lowagie.com/tutorial/general/index.php#step1



jueves, 27 de noviembre de 2008

Ingresa a la red social de sun (osum.sun)


Open Source University Meetup

Esta es una red social para apoyar la comunicacion e intercambio de
informacion de las tecnologias de sun ( java , solari , etc) . en pocas
palabras es un tipo facebook pero relacionado a sun , te puedes unir a
grupos , publicar en blog , etc .

http://osum.sun.com/


lunes, 24 de noviembre de 2008

manejo de ventanas como JFrame y JDialog

sobre este tema podemos hablar por mucho rato , pero comentare los puntos

que encuentro importante (se supone de un conocimiento basico del tema).


primero vamos decir que como siempre vamos a trabajar con netbeans

cuando creamos un JFrame en netbeans este crea automaticamente un

main para el. este lo podriamos utilizar para dejarlo como principal y

no tener que crear la clase main con el famoso


ventana v=new ventana();

v.setvisible(true);


seleccionar el main de jframe



con los primeros ejercicios de JFrame no nos preocupamos de mucho

de manejos de ventanas , pero cuando nos toca hacer algo real salta esta

preocupacion y problema.


hay muchas formas de enfrentar este tema al momento de programar ,

uno de ellos es ocupar JInternalFrame dentro de un jframe , pero este

tiene que estar dentro de un JDesktopPane (es una subclase de JLaveredPane

al que se le ha añadido el API para manejar el solapamiento de múltiples

frames internos.) .


yo utilizo JFrame y Jdialong para programar ventanas , por mi parte

lo encuentro super facil y no es complicado .


para empezar tenemos que tener algunos detalles claros :


- tiene que existir un solo jframe (padre) y los demas ventanas seran jdialog.


- en una ocasion yo sobre carge demaciado un jframe y me dio error de

memoria , entonces como recomendacion es que los jdialog y jframe son

para mostrar la carcasa de nuestro programa y para lo demas tenemos las

famosas clases.


- un jframe muestra un boton en la barra de tarea de windows y los jdialog no.


- Un JDialog puede ser modal, un JFrame no.


modal ???? : Un JDialog puede ser modal, pasándole un true en el

constructor en el sitio adecuado o haciéndolo modal con el método

setModal(). Si hacemos un JDialog modal, todas las demás ventanas

se deshabilitarán hasta que el usuario de nuestro programa cierre el

JDialog.


- Todas las ventanas secundarias deben ser JDialog y todos los JDialog

deberían tener padre.


para abrir un JDialog desde un JFrame


NewJDialog n=new NewJDialog(this,true);
n.setVisible(true);


centrar nuestra ventana en la pantalla :

en el contructor setLocationRelativeTo(null);


bueno esto es una pincelada de JFrame y JDialong y sobre este tema existe

mucho por aprender

viernes, 7 de noviembre de 2008

documentacion de nuestro codigo con javadoc

la idea de javadoc es proporcionar de forma facil una forma de
documentar nuestro codigo , lo simpatico esque nos crea nuestra
documentacion de la misma forma de la api de java

Como siempre trabajaremos con nuestro querido netbeans

1.- tenemos que bajar el plugins



despues de instarlo podemos ver la configuracion en tools->options





2.- es super simple utilizarlo , antes de los metodos
escribimos /** y enter y solo nos genera un trozo de comentario , el cual
llenamos con la descripcion que deseamos.

Palabra reservada Versión Descripción
@author 1.0 El autor del método, clase.
@deprecated 1.0 El método ha sido reemplazado por otro.
@exception 1.0 La excepción que puede generar.
@param 1.0 Después viene el parámetro, esto se hace para


documentar todos los parámetros que requiere el método.
@return 1.0 El valor que regresa
@see 1.0 Una referencia a otra clase o método de utilidad
@since 1.1 La versión desde que se incluye.
@throws 1.2 Es un sinónimo para @exception.
@version 1.0 La versión del método, clase.


tenemos tambien el un visor para ir creado los comentarios y este se
encuentra en Source->analyze javadoc


3.- y por ultimo para generar uno javadoc tenemos que ir sobre nuestro proyecto
y con las opciones del boto derecho de mouse seleccionamos generate javadoc.

Asi nos muestra la documentacion

mayor informacion
http://books.google.com/books?id=cw56y1WQp0IC&pg=PA173&lpg=PA173&dq=javadoc+comments+netbeans&source=web&ots=clEPUIIcsL&sig=rlJqknJ4BQpQTjKybabomziPS5c&hl=en&sa=X&oi=book_result&resnum=9&ct=result#PPA176,M1
fin

certificacion Netbeans


para nadie es nuevo lo de la certificacion y principalmente en
java que tenemos un variedad tremenda.
Creo que podemos estar toda la vida
certificandonos , pero encontre novedoso la certificacion de
Netbeans por ser un IDE y tambien por ser gratuita y para ser mas
precisos aqui esta el link de la certificacion

http://www.sun.com/training/certification/netbeans.html



miércoles, 5 de noviembre de 2008

problemas de precision de float y double

veamos los siguientes ejemplos :

1) para un float

for(float i = 0f; i<1; i += 0.1f){
System.out.println(""+ i );
}
salida :
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

2) para double

double dividendo = 1812.6;

double resultado = 0;

resultado = dividendo / 100;

System.out.println("resulatado :"+resultado);

salida: 18.125999999999998


para solucionar esta imprecision de la variables primitivas de coma
flotante tenemos que implementar la clase BigDecimal.

http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigDecimal.html

otra forma menos formal es redondiar el valor decimal con
el metodo math.round()

este error no es propio de java , sino de la mayoria de los lenguajes
de programacion .

en este link explica porque sucede esto

http://developers.sun.com/solaris/articles/fp_errors.html

y como estamos hablando de decimales seria bueno mencionar
mencionar la forma de dar formato a una decimal.

import java.text.DecimalFormat;

DecimalFormat formateador = new DecimalFormat("####.####");

// Esto sale en pantalla con cuatro decimales, es decir, 3,4324
System.out.println (formateador.format (3.43242383));

jueves, 30 de octubre de 2008

consumir un web service desde j2se

El tema de web service pertenece mas a j2ee , pero igual pueden ser
util para una aplicacion de escritorio.

Un Web Services (WS) es una aplicación que puede ser descripta
, publicada, localizada, e invocada a través de una red, generalmente
Internet.

Los WS son a los efectos del consumidor componentes que se
encuentran dentro de una caja negra, que pueden ser utilizados
sin preocuparse de como fueron implementados, y ser accedidos
utilizando XML (SOAP) , generalmente sobre HTTP.

La arquitectura básica del modelo de WS describe un consumidor,
un proveedor y ocasionalmente un corredor (broker) y relacionados
con estos agentes está las operaciones de publish (publicar),
f ind (encontrar) y bind (enlazar).

Los requerimientos a la hora de desarrollar o consumir un WS son:

- una forma estándar de representar los datos: XML
- un formato común y extensible de mensaje: SOAP
- un lenguaje común y extensible para describir los servicios:
WSDL (basado en XML).
- una forma de descubrir los servicios en Internet: UDDI
(basado en XML).


este tema es muy interesante y util , imagine que tiene una
aplicacion en asp.net y quiere consumir un procedimiento de
esa aplicacion desde java , entonces con nuestro querido web
service lo podemos realizar.

Ejemplo:

Vamos a consumir un metodo de aplicacion web application de
java ( Como siempre con nuestro querido netbeans 6)


1.- primero creamos nuestro proyecto web application , selecionamos el JavaServer Face
para este ejemplo.


2.- creamos el metodo


3.- tenemos que seleccionar souce y escribir dentro del metodo el procedimiento
(en este caso es la suma)

solamente lo que escribi fue : int s= i+j ;
y el return de 0 lo cambie a s

4.- en nuestra aplicacion normal de java creamos un nuevo Web Service Client5.- en project abrimos el brower y seleccionamos el web service que creamos


6.- al aceptar el web service , en nuestro proyecto se nos creara una paquete
llamado web service references.

ahora vamos a crear un from con unos jTextfield y un jButton el cual va a
llamar al web service.


7. ahora desplegamos nuestro web service de nuestra aplicacion y arastramos
el metodo al jButton1ActionPerformed ( evento del boton ) .



dentro de nuestro metodo modificamos lo siguiente

int i = Integer.parseInt(jTextField1.getText());
int j = Integer.parseInt(jTextField2.getText());

jTextField3.setText(""+result);

como observacion final tenemos que tener el servidor GlassFish , para poder
hacer correr nuestro web service .

lunes, 27 de octubre de 2008

conexion base de dato con netbeans

primero vamos a ir a services y desplegamos Databases:



Despues tenemos que agregar el jar (el driver ) de la base de dato que vamos a conectar a netbeans.

paso numero 3: ahora vamos a configurar la conexion

Añadir imagen

paso nº 4 : configuracion de la conexion (Seleccion del tipo de driver)


hay que tener ojo , porque tenemos que dejar en advanced una configuracion publica
y por ultimo a disfrutar nuestra conexion a base de dato en netbeans


como observacion :

como sun compro mysql la conexion por primera vista es super facil porque trae el driver de la base de dato incorporado.

viernes, 3 de octubre de 2008

exportar e importar a excel desde java

Para trabajar con excel vamos a hacerlo con el
formato csv , este formato es super simple de utilizar

Para bajar el jar que vamos añadir a nuestro proyecto
lo vamos a buscar aqui:

http://www.csvreader.com/java_csv.php

asi se guarda y es el formato con el cual tenemos que guardar
nuestro archivo


El siguiente ejemplo vamos a guardar un archivo
csv en un Arraylist el cual guarda objetos de la clase
libro( con sus get y set de atrivutos privados)

//////// clase libro /////////////////

public class libro_ingresado {

private String nombre;
private String autor;
private String edicion;
private String anio;
private String codigo;
private String area;

/** Creates a new instance of libro_ingresado */
public libro_ingresado() {
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getAutor() {
return autor;
}

public void setAutor(String autor) {
this.autor = autor;
}

public String getEdicion() {
return edicion;
}

public void setEdicion(String edicion) {
this.edicion = edicion;
}

public String getAnio() {
return anio;
}

public void setAnio(String anio) {
this.anio = anio;
}

public String getCodigo() {
return codigo;
}

public void setCodigo(String codigo) {
this.codigo = codigo;
}

public String getArea() {
return area;
}

public void setArea(String area) {
this.area = area;
}

}

/////// clase de manejo de csv //////////


import com.csvreader.CsvReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JOptionPane;


public class leer_archivo {


public ArrayList leer_archivo_exel(String archivo){

ArrayList lista_libros = new ArrayList();

CsvReader reader = null;

try {

reader = new CsvReader(archivo,';');

} catch (FileNotFoundException ex) {
ex.printStackTrace();
JOptionPane.showInputDialog("en leer archivo");
}

try {

reader.readHeaders();

} catch (IOException ex) {
ex.printStackTrace();
}

try {

libro_ingresado libr;

while (reader.readRecord())
{

libr=new libro_ingresado();
libr.setNombre(reader.get("nombre"));
libr.setAutor(reader.get("autor"));
libr.setEdicion(reader.get("edicion"));
libr.setAnio(reader.get("anio"));
libr.setCodigo(reader.get("codigo"));
libr.setArea(reader.get("area"));
lista_libros.add(libr); // añadimos el objeto al arrayList

}

} catch (IOException ex) {
ex.printStackTrace();
System.err.println(" en while readrecord ");
}

reader.close();

return lista_libros; // retorna una objeto de ArrayList

}


}


////////////////////////////////////////////////////////

el siquiente codigo es abrir un JFileChooser donde buscamos
nuestro archivo csv , luego lo seleccionamos y es procesado.
el archivo es pasado a un jtable




////////////////// codigo evento boton ///////////////


DefaultTableModel dtm;
ArrayList libro_recivido=new ArrayList();

JFileChooser fileChooser = new JFileChooser(".");
int status = fileChooser.showOpenDialog(null); //fileChooser

if (status == JFileChooser.APPROVE_OPTION) {

File selectedFile =fileChooser.getSelectedFile();

leer_archivo l=new leer_archivo();
String direccion=selectedFile.getParent()+"/"+selectedFile.getName();

libro_recivido=l.leer_archivo_exel(direccion);
Iterator it=libro_recivido.iterator();

try{

Object datos[] = new Object [6];
dtm = (DefaultTableModel) jTable1.getModel();
for (int i = jTable1.getRowCount() - 1; i>=0; i--)
{
dtm.removeRow(i);
}


while(it.hasNext()){

libro_ingresado lib_ing;
lib_ing=(libro_ingresado) it.next();
datos[0]=lib_ing.getNombre();
datos[1]=lib_ing.getAutor();
datos[2]=lib_ing.getEdicion();
datos[3]=lib_ing.getAnio();
datos[4]=lib_ing.getCodigo();
datos[5]=lib_ing.getArea();

dtm.addRow(datos);
}

} catch(Exception e){
//manejo de error
}

} else if (status == JFileChooser.CANCEL_OPTION) {

System.out.println("cancele");

}

//////////////////////////////////////////////////

como fin un link de interes

http://schmidt.devlib.org/java/libraries-excel.html

sábado, 20 de septiembre de 2008

Foreach en java

Esta forma de recorrer o iterar en una coleccion o Array es añadido en la
API 1.5 ( ver lo nuevo de esta api : http://java.sun.com/j2se/1.5.0/docs/guide/language/)

Tenemos que tener cuidado que solamente desde esta API se puede utilizar .

Formato:
for ( Type Identifier : Expression )
Statement

ejemplo:

double[] ar = {1.2, 3.0, 0.8};

int sum = 0;

for (double d : ar) {
sum += d;
}

System.out.println(""+sum);

----------------- Para colecciones -------------------------

ArrayList at=new ArrayList();

at.add("hola");
at.add("chau");

for(String palabra: at){

System.out.println(palabra);
}

aunque esta sintaxis es mucho mas clara , tenemos que tener las
siguientes apreciaciones

1.- solo el acceso : los elementos no pueden ser asignados.
2.- solo estructura unica : no es posible recorrer dos estructuras a la vez ,
ejemplo comparar dos arrays
3.- solo hacia adelante


y para terminar los link de interes para este tema.

http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html

http://jcp.org/aboutJava/communityprocess/jsr/tiger/enhanced-for.html

http://www.leepoint.net/notes-java/flow/loops/foreach.html


domingo, 14 de septiembre de 2008

Look And Feel

Cambiar la apariencia de nuestro programa en java
es sumamente facil , con unas lineas de codigo podemos
tener un cambio importante para el usuario final .

Ej: este look and feel simula la interfaz de un S.O Mac


JRE trae por defecto algunos formatos que se pueden elegir , el mas rescatable
es el que toma el sistema operativo.

try {

UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}

otro es :

UIManager.setLookAndFeel ( "com.sun.java.swing.plaf.motif.MotifLookAndFeel");

Lo realmente interesante es bajar nuevos Look And Feel.


http://javootoo.l2fprod.com/index.html


https://substance.dev.java.net/

y por ultimo la documentacion sun oficial

http://java.sun.com/docs/books/tutorial/uiswing/lookandfeel/

jueves, 17 de julio de 2008

un value para jComboBox


con este emplo de jComboBox vamos a mostrar el nombre y cuando seleccionemos
un items de dicho jcomboBox vamos a traer un dato (para el ejemplo el id ), el
secreto de esta operacion es que el jcomboBox almacena object y es por eso que
le añadimos objetos de tipo persona al jComboBox , este objeto le sobre escribimos
el metodo toString que por defecto lo trae, porque es un metodo de la clase object
y todo objeto hereda de el , bueno en el metodo toString retornamos el
nombre , que seria lo que queremos mostrar en el JComboBox y generamos un
get del id para que cuando seleccionemos un objecto del jComboBox nos traiga el
get del objeto seleccionado.

El siguiente y bueno la mayoria de los codigos estan hechos con el IDE
Netbeans

Primero la clase persona:

public class persona {

private String nombre;
private String id ;

/** Creates a new instance of persona */
public persona(String nombre , String id ) {

this.nombre=nombre;
this.id=id;
}

public String getID()
{
return id ;
}


public String toString()
{
return nombre ;
}

}

ahora el codigo de la ventana
//////////////////////////////////////////////////////////////////

public class ventana extends javax.swing.JFrame {

DefaultComboBoxModel value;

public ventana() {
initComponents();
setBounds(0,0,360,200); //porque deje el diseño null layout
setLocationRelativeTo(null); // centrar la ventana en la pantalla


value =new DefaultComboBoxModel();
jComboBox1.setModel(value);

value.addElement(new persona("Seleccione"," "));
value.addElement(new persona("esteban","22222"));
value.addElement(new persona("jorge","1233-3"));
value.addElement(new persona("esteban","22222"));
value.addElement(new persona("daniel","2222"));
}


private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {

persona cliente = (persona) jComboBox1.getSelectedItem() ;
String id = cliente.getID() ;
jLabel3.setText(id);

}

// main de jFrom pero se puede eliminar porque desde otro main

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ventana().setVisible(true);
}
});

}

martes, 17 de junio de 2008

Genéricos para colecciones.

En un texto anterior expuse que cuando guardamos elementos

en una colección y que en general yo ocupo la interfaz List ,(ArrayList
o LinkedList), nosotros guardamos objetos de tipo object ,pero en
algunos casos seria conveniente guardar un tipo especifico como lo
hace un array (osea decirle al compilador el tipo que estamos
guardando), esto es para evitar el casting que se realiza
constantemente cuando obtenemos un objeto de una colección
, además nos ayuda a encontrar el error en momento de
compilación y no en ejecución.

Ejemplo:

ArrayList<String> v = new ArrayList<String> ();
v.add(”prueba”);
String cadena= v.get(0);

vemos que al capturar el elemento guardado en el
ArrayList no tenemos que realizar un casting

v.add(10);

en la inserción de arriba nos mostrara un error ,por
motivo que se esta guardando un entero en vez de
un string (como se señalo en el ArrayList).

http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

viernes, 13 de junio de 2008

Un calendario para java

una critica que se le realiza a java es que no trae un calendario ,
pero para solucionar este problema existen distribuciones
gratuitas para bajar y aplicarlo en nuestro programa.

Pero como la idea no es plagio doy el link de otro blog que sale
bien detallado como instalar este calendario en netbeans .

http://monillo007.blogspot.com/2008/04/un-selector-de-fechas-para-aplicaciones.html


la forma de utilizar es super simple se captura la fecha como un String.

EJ:

String fecha;
fecha=dateChooserCombo1.getText();

jueves, 12 de junio de 2008

Encapsulamiento de datos con Netbeans

si tenemos varias variables de instacias y estas tenemos
que generar los famosos get y set , el IDE Netbeans nos
proporciona una forma muy sencilla de realizar esta tarea.

1.- crear una clase con sus atributos (del objeto)

2.- en la barra de netbeans buscar refactorizar y seleccionar Encapsular campos

3.- luego saldra este cuadro donde seleccionamos que atributos vamos a
encapsular, (se puede elegir solamentes set o get ).

4.- luego Siguiente y nos muestra el siguiente cuadro en la parte inferior del ide

5.- y por ultimo refatorizar.

como seleccionamos todos los atributos private y sus get y set
respectivos nos queda la clase asi

public class encapsulamiento {

private String nombre;
private String apellido;
private String rut;
private int edad;

public encapsulamiento() {
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public String getRut() {
return rut;
}

public void setRut(String rut) {
this.rut = rut;
}

public int getEdad() {
return edad;
}

public void setEdad(int edad) {
this.edad = edad;
}
}

otra forma de ver y modificar los get y set mediante el IDE es
mediante los patrones de beans , bueno en la imagen quedara claro


el cuadro inferior de la imagen es la propiedad de apellido y en el modo
podemos cambiar su estructura.

martes, 10 de junio de 2008

BLUEJ

BlueJ es un entorno de desarrollo Java diseñado específicamente
para la enseñanza a un nivel introductoria
.

www.bluej.org/

Para hecharle un vistaso no esta malo , posee
un enfoque
fuerte a uml , (Diagramas de clases y para
ello mejor lo hacemos con otra herramienta mas poderosa).

Bueno es para estudiantes jejejejeje ,pero para aprender
esta herramienta no esta mala, en su pagina se encuentran los
manuales que explican como trabajar con este entorno

Imagen del entorno

Jdbc : Conexión con Access

Para aplicaciones mas simples , seria muy cómodo utilizar
Access puesto que toda la gente lo tiene instalado sin tener
idea , además seria súper fácil para el usuario , realizar el
respaldo de la BD ya que es solo copiar el archivo que genera
el Access , trabajar en distintas partes es fácil ,porque se debe
tener instalado el programa en distintas partes (trabajo y casa )
y transportar el archivo para trabajar en ambas partes de
forma sencilla
La conexión de Access no es una muy común , ya que no
tiene el driver nativo para realizar la conexión , esta conexión
no es de las mejores y además es de las mas lentas, En la
siguiente imagen se mostrara como se establece la conexión.

Obs: no se debe cargar el jar de la BD , pero si configurar el ODBC.

Pasos:
1.- Crear nuestra BD en Access con su respectiva tabla.
2.- Configurar el ODBC , en este caso lo vamos a realizar con xp.
Panel de control -> Herramientas administrativas y
después seleccionamos

Seleccionamos Agregar

Seleccionamos el driver que muestra la imagen

Aquí , seleccionar la base de dato , el archivo mdb
y en avanzadas tenemos la posibilidad de colocar la clave


Y ahora nos vamos a nuestro IDE , y que en mi caso trabajo con NETBEANS y
generamos nuestro código.

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(
"jdbc:odbc:base", "access", "1234");

Statement stat = con.createStatement();
String unsql="select ……….. ";
ResultSet respuesta= stat.executeQuery(unsql);

while(respuesta.next()){

System.out.println(respuesta.getString(“nombre”));

}
respuesta.close();
stat.close();
con.close();

}catch(java.lang.ClassNotFoundException e)
{
JOptionPane.showConfirmDialog(null,"Error = " + e.toString() , "Advertencia",
JOptionPane.ERROR_MESSAGE + JOptionPane.DEFAULT_OPTION);
}
catch(java.lang.InstantiationException e)
{
JOptionPane
.showConfirmDialog. . . . . . . . . .
}
catch(java.lang.IllegalAccessException e)
{
JOptionPane.showConfirmDialog. . . . . . . . . .
}
catch(java.sql.SQLException e)
{
JOptionPane.showConfirmDialog. . . . . . . . . .
}


Fin .



miércoles, 4 de junio de 2008

Procedimiento almacenado desde JDBC

No vamos a explicar el potencial que tienen los procedimientos
almacenados , solamente mencionaremos que desde JDBC
podemos crear y llamar a ellos , en el siguiente ejemplo vamos
a trabajar con la siguiente base de dato

que ocupa el lenguaje plpgsql;

Desarrollo:

1.- primero tenemos que cargamos el jar de prostgres en nuestro
proyecto de netbeans .

2.- cargar nuestro procedimiento almacenado en la base de dato ,
para lo cual abrimos nuestra base de datos y lo ejecutamos.
---------- Procedimiento almacenado ------------------------

CREATE or replace FUNCTION estafunc()
RETURNS INTEGER AS '

DECLARE
cantidad INTEGER := 30;
i integer := 1;
BEGIN
while (i <= 30) loop
RAISE NOTICE ''Cantidad contiene aqui³ %'',i;
i := i + 1;
end loop;

cantidad := 50;
RETURN cantidad;
END;' LANGUAGE 'plpgsql';
-------------------------------------------------------------
3.- lo llamamos desde nuestro codigo

try{
Class.forName("org.postgresql.Driver");

Connection con =
DriverManager.getConnection(
"jdbc:postgresql://localhost/eliminar", "postgres", "1234");

CallableStatement cs = con.prepareCall("{call estafunc()}");
ResultSet rs = cs.executeQuery();

if(rs.next()){
System.out.println("valor"+rs.getInt(1));
}

}catch(Exception e){
System.out.println("fallo conexion ");
e.printStackTrace();
}
//////////////////////////////////////////////////
lo importante del codigo es
CallableStatement: que es para ejecutar procedimientos
almacenados en la BD.
Para mayor informacion existen unos link interesantes



lunes, 2 de junio de 2008

JAR

Unos de los primeros temas a buscar cuando uno se inicia a
programar en java es el significado de este famoso archivo de
java , leí al principio mucho en algunos foros que era el ejecutable,
etc. Por ello es que vamos a definir bien este archivo.

Nos permite empaquetar varios ficheros en un sólo archivo.
Típicamente un fichero JAR que contendrá los ficheros de clases
y los recursos auxiliares asociados a nuestra aplicación (pueden
tener distintos archivos, sonido, imagen ,etc) , es completamente
igual a un archivo de compresión zip , y no pierde la famosa
caracteristica de la multiplataforma.

Beneficios de este formato:

Seguridad: Puedes firmar digitalmente el contenido de
un fichero JAR.

Disminuir el tiempo de descarga: Si tus applets están
empaquetados en un fichero JAR, los ficheros de clases y los
recursos asociados pueden ser descargados por el navegador
en una sóla transación HTTP sin necesidad de abrir una nueva
conexión para cada fichero.

Compresión: esta diciendo , para ahorra espacio.

Portabilidad.

Creación del archivo JAR


Operación(archivo JAR) Comando

Para crear un fichero jar cf jar-file input-file(s)

Para ver el contenido de un fichero jar tf jar-file

Para extraer el contenido de un fichero jar xf jar-file

Para extraer ficherso jar xf jar-file archivedfile(s)
específicos de un fichero JAR

Para ejecutar una aplicación jre -cp app.jar MainClass
empaquetada en un fichero JAR

Cuando creamos un JAR se crea un archivo de
manifiesto , este es META INF/MANIFEST.MF ,
El manifiesto es un fichero especial que puede contener
información sobre los otros ficheros empaquetados en
un fichero JAR. Personalizar la información "meta" del
manifiesto, te permite utilizar los ficheros JAR para una
gran variedad de propósitos.

Bueno en otro escrito especificare con claridad la creación del
ejecutable de java ,con un jar , un bat y con la aplicacion como
jexelCreator

domingo, 25 de mayo de 2008

Rich y JavaFx


Este es un tema que esta entrando cada vez más fuerte y es necesario que tengamos algunos conceptos . y es por ello que los vamos a explicar en pocas palabra y esperando que esto sea un inicio del aprendizaje de estas tecnologías.

Rich :( Aplicaciones Ricas de Internet) es un nuevo tipo de aplicación con más ventajas que las tradicionales aplicaciones , aumentar la facilidad de multimedia de las aplicaciones Web , disminuir la recarga de la pagina Web (del servidor), para una mejor performance de ellas , Se pueden utilizar desde cualquier ordenador con una conexión a Internet sin depender del sistema operativo que este utilice. Bueno estas son unas de las mas importantes características , pero existen muchas mas.

Recordando algunas tecnologías de java como los applet este podría ser un pequeño acercamiento a estas tecnologías , pero ya hace muchos años atrás,por ello java a creado JavaFx para afrontar estas nuevas tecnologías , pero considero que se demoro un poco.

Bueno ahora vamos a comentar algunas alternativas que existen para desarrollar .

Adobe AIR : permite combinar Flash y tecnologías AJAX usadas hasta ahora para el desarrollo Web como Flex( leido que la lleva ). Se basa exclusivamente en tecnologías de programación web y permite ejecutar el software desarrollado sin requerir un navegador. Está disponible para Windows, Mac y Linux.

AJAX : tambiene esta considerada como tecnología Rich.

Silverlight de Microsoft :lleva la programación nativa de Windows, con sus tecnologías .Net a la web y lo mezcla con Flash y HTML,

Mozilla tiene Prism :como un apaño, una forma de que el usuario no dependa de tecnologías externas de terceros para disfrutar de aplicaciones offline. La idea de Mozilla es poder convertir servicios web en aplicaciones independientes del navegador.

Google Gears es una solución de Google para los usuarios que quieren disponer de sus aplicaciones y servicios web sin estar constantemente conectados a.

Y nuestro JavaFx : que por lo leido no se a desviado de la multiplatadorma al desarrollar esta tecnologia , trantando de integrar escritorio , celulares , web , etc.
para potenciar esta tecnologia java esta estipulando la descarga de su plataforma por medio de modulo y no por la maquina virtual que generalmente expanta a mucha gente , por motivo de incomodidad.


bueno no quiero detallar mas sobre esta tecnologia , porque como no soy experto , pero aqui dejare algunos link muy interesantes para aprender.

http://blogs.sun.com/chrisoliver/
http://es.sun.com/sunnews/press/2008/20080506.jsp
http://docs.google.com/Present?docid=avn83j2j7zf_10dzgx4ngh
http://learnjavafx.typepad.com/
http://www.sun.com/software/javafx/index.jsp
http://blogs.sun.com/Argentina_ambassador/entry/demos_de_javafx_en_javaone
http://javafx.com/




viernes, 23 de mayo de 2008

Patron de diseño MVC

bueno considero que este tema es muy importante , aunque esto es una parte muy pequeña , pero por lo menos tomamos una pequeña nocion sobre este tema.

El principal objetivo de la arquitectura MVC es aislar tanto los datos de la aplicación como el estado (modelo) de la misma, del mecanismo utilizado para representar (vista) dicho estado,así como para modularizar esta vista y modelar la transición entre estados del modelo(controlador). Las aplicaciones MVC se dividen en tres grandes áreas funcionales:

 Vista :la presentación de los datos
 Controlador :el que atenderá las peticiones y componentes para toma de decisiones
de la aplicación
Modelo :la lógica del negocio o servicio y los datos asociados con la
aplicación

El propósito del MVC es aislar los cambios. Es una arquitectura preparada para los cambios, que desacopla datos y lógica de negocio de la lógica de presentación, permitiendo la actualización y desarrollo independiente



Cada componente Swing tiene un modelo, y la vista y el controlador están unidos en el mismo componente. Además, la vista usa un UI Manager para renderearse. El modelo es el modelo de datos de la aplicación, está relacionado con los datos que la aplicación maneja.

Cuando se crea, cada componente crea un modelo interno. Se pude también crear un modelo por aparte, y asignárselo a uno o más componentes, que entonces compartirán los datos que presentan.

un buen link es :
http://java.sun.com/products/jfc/tsc/articles/architecture/

Swing empaqueta todos los controladores y vistas de un componente
dentro de un objeto denominado delegado UI. Por esta razón, la arquitectura
subyacente de Swing se denomina más acertadamente como modelo-delegado
que como modelo-vista-controlador. Idealmente, la comunicación entre el
modelo y el delegado UI es indirecta, permitiendo así tener asociado más de
un modelo a un delegado UI.

todo lo que mencione es una pinselada del tema y es necesario averiguar mas sobre el tema.

http://www.programacion.net/java/tutorial/jdcbook/7/#jdcbook_componentesymodelos

miércoles, 21 de mayo de 2008

Observación a ArrayList

cuando queremos trabajar con un famoso array ,pero que no sabemos su largo ,
es necesario ocupar el ArrayList que pertenece a la interfaz List de las famosas colecciones de java , existen muchas otras interfaces que seria importante de averiguar , en mi caso me baje unos manuales de colecciones y de las otras interfaces como set y map aprendi lo básico y sus principales características , y considero que con eso me podré defender si alguna vez me salen en un código y así no daré la hora jajajajaja .
regresando al ArrayList o también el LinkedList que su forma de trabajar son las mismas , pero tienen rendimiento diferentes en algunas circunstancias , cabe destacar que cuando guardamos elementos estos son de tipo object y no del tipo que estamos guardando , esta es una gran diferencia con los array que si guardan un tipo .
entonces cuando necesitemos obtener un objeto tenemos que realizar un casting del tipo de objeto que guardamos.

Bueno existen muchas mas observaciones ,pero como experiencia personal realmente son muy útiles .

Un sencillo ejemplo:

/////////////////////////////////////////////////////////////////////////////
public class gato {

private String nombre=null;

public gato(String nombre) {

this.nombre=nombre;
}

public String me_llamo(){

return nombre;
}

}

////////////////////////////////////////////////////////////////////////////////


import java.util.*; // libreria necesaria

public class ejemplo_ArrayList {

public ejemplo_ArrayList() {
}

public static void main(String[] args){

ArrayList al=new ArrayList();
// es posible ArrayList al=new ArrayList(); asi no nos da una
//advertencia el compilador y tiene otros motivos pero para la otra lo explicamos

al.add(new gato("perla"));
al.add(new gato("timoteo"));
al.add(new gato("wily"));

Iterator it=al.iterator(); // nos sirve para recorrer el arrayList

while(it.hasNext()){

gato g=(gato)it.next(); // el casting que hable
System.out.println(g.me_llamo());

}

}

}

miércoles, 7 de mayo de 2008

Transacciones en jdbc

Bueno despues que uno aprende a trabajar con jdbc seria interesante aprender este concepto que es muy util , imaginate que estas haciendo un programa que tengas que asegurarte que en un proceso se guarden obligatoriamente tres insert,por ello JDBC permite agrupar instrucciones SQL en una sola transacción. Así, podemos asegurar las propiedades ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad) usando las facilidades transaccionales del JDBC.
El control de la transacción es realizado por el objeto Connection. Cuando una conexión se crea, por defecto es en modo auto - commit. Esto significa que cada instrucción individual SQL se trata como una transacción en sí misma, y se comprometerá en cuanto la ejecución sea terminada.

Ejemplo : tenemos dos insert , para que se guarden se tienen que guardar los dos bien .osea si aceptamos el primero y el segundo nunca se guarda o da un error el primero no se guarda.



//////////////////////////////////////////////
// primer boton


try{

if (con.getAutoCommit() )
con.setAutoCommit( false );

stat = con.createStatement();
//vamos hacer le primer insert


String unsql = "insert into persona values ('"+jTextField1.getText()
+ "', '" + jTextField2.getText() + "', '"
+jTextField3.getText()+ "', '" +jTextField4.getText()
+ "' )";
stat.executeUpdate(unsql);

}
catch(Exception e){
System.out.println(" "+e);
}

///////////////////////////////////////////////////////////

// segundo boton

try{

String unsql = "insert into persona values ('"+jTextField5.getText() + "', '" + jTextField6.getText() + "', '" + jTextField7.getText() + "', '" +jTextField8.getText() + "' )";
stat.executeUpdate(unsql);

con.commit();

}
catch(Exception e){

deshacer( ); // este metodo es importante

System.out.println(" "+e);
}

////////////////////////////////////////////////////////////

void deshacer( ) {
try {
con.rollback();
}
catch (SQLException e) {
System.out.println("Error. No hemos podido deshacer." + e.getMessage() );
}
}

////////////////////////////////////////////////////////////


aunque esta un podo desordenado el codigo, espero que dando una vuelta lo entiendan, sobre la conexion

Connection con; // variables de instancia
Statement stat ;

/** Creates new form ventana */
public ventana() { // en el constructor
initComponents();

try{

Class.forName("org.postgresql.Driver"); // este busca el jar de postgres
con = DriverManager.getConnection("jdbc:postgresql://localhost/arq2 tier", "postgres", "1234");


}
catch(Exception e){
System.out.println(" "+e);
}
}

sábado, 3 de mayo de 2008

Friendly , un modificador de acceso

que sucede si no se indica ningun tipo de especificador de acceso a la clase , entonces se define implicitamente como amistoso lo cual significa que todas las clases del paquete actual tienen acceso al miembro amistoso , pero todas las clases fuera del paquete tienen un accesos privado a esta clase.
el acceso amistoso permite agrupar clases relacionadas en un mismo paquete de forma que esta puedan interactuar entre si de forma sencilla .

este puede ser un detalle muy simple , pero en el momento de programar nos puede hacer pasar un mal momento y principalmente si programamos por capa( presentacion , controlador , logica de negocio , base de dato , factoria de servicios )

viernes, 2 de mayo de 2008

Mi propia excepcion

seria muy interesante poder crear nuestras propias excepciones , puesto que la logica de negocio lo puede solicitar


public class miExcepcion extends Exception {

public miExcepcion(String msg) {

super(msg);
}
}

/////////////////////////////////////////////

public class llamadaException {

public static void llamada() throws miExcepcion{

System.out.println("envio de error");
throw new miExcepcion("error enviado por mi");
}

public static void main(String[] args){

try{
llamada();

}catch(miExcepcion e){

e.printStackTrace(System.err);
}

}
}
///////////////////////////////////////////////////////////

miércoles, 30 de abril de 2008

otros usos del famoso this

En general se utiliza mucho para el famoso set o usus parecidos.

1.- referencia al objeto actual

public class referencia {

int i=0;


public referencia incrementar(){
i++;
return this; // hace referencia del mismo objeto

}

public void print(){

System.out.println("referencia :"+i);
}

public static void main(String[] arg){

referencia r=new referencia();

r.incrementar().incrementar().incrementar().incrementar();

r.print();
}
}

------------------------------------------------------------------------

2.- LLamadas de un contructor a otro

public class ejemplo {

public ejemplo()
{
this("hola");
}

public ejemplo(String palabra) //sobrecarga de contructor
{
System.out.println("salida : "+palabra);
}

}

public class llamada {

public static void main(String[] arg){

new ejemplo();

}
}

salida : hola

martes, 29 de abril de 2008

La asignacion de objetos

La asignacion de objetos en java tiene una gran observacion que hay que tener en cuenta , este tema muy sencillo puede crear un gran problema al momento de programar

veamos el siguiente ejemplo.

/////////////////////// primera clase //////////////////////
public class numero {

public int i;

public numero() {
}
}

//////////////////////////////////////////////////////////


// la asignacion de tipos primitivos es muy sencilla puesto y directa ,
// dado que alberga el valor actual y no se utiliza referencias de objetos ,
// cuando se asignan primitivos se copian los contenidos de un sitio a otro.

public class asignacion {

public asignacion() {
}

public static void main(String[] jorge){

numero n1=new numero();
numero n2=new numero();

n1.i=1;
n2.i=2;
System.out.println("n1.i :"+n1.i+", n2.i:"+n2.i);

n1=n2;
// no se copian los valores , sino las referencias del objeto

System.out.println("n1.i :"+n1.i+", n2.i:"+n2.i);

n1.i=27;

//en este momento realmente estamos modificando el n2
// puesto que la referencia de n1 se perdio y apunta a n2

System.out.println("n1.i :"+n1.i+", n2.i:"+n2.i);
// supuestamente tendria que salir
//n1.i: 27 , n2.i:2
// pero sorpresa

}
}


Salida :

n1.i :1, n2.i:2
n1.i :2, n2.i:2
n1.i :27, n2.i:27

bueno si no soy muy claro , pueden hacer un seguimiento del ejemplo y solos se daran cuenta del problema de asignacion

lunes, 28 de abril de 2008

Campeonato JAVACUP


Les cuento que le heche una mirada y realmente es muy interesante este campeonato y se puede aprender mucho, puesto que te dan todos los codigos y te lo explican con videos muy sencillos




Para mayor informacion
http://javahispano.org/contenidos/es/comienza_la_javacup_2008/