Conectar Java con Microsoft Access usando ODBC

abril 11, 2009

Este es un ejemplo sencillo de como conectarse a una base de datos hecha en Microsoft Access usando ODBC desde un programa Java.

Para empezar a trabajar con Microsoft Access tienes que usar ODBC (Open Data Base Connectivity) para crear un DSN (Data Source Name),este programa se encuentra en
windows XP o Vista:
Panel de control -> Herramientas Administrativas

windows 98:
Panel de control

aparece como Origenes de datos (ODBC)

para crear un DSN con ODBC haz click en “agregar” o “add”, para XP debes escojer la solapa que dice “DSN de Sistema y escojes “Microsoft Acces Driver” y “Finalizar” luego escribes un nombre y das click en “seleccionar” para escojer la base de datos y das click en “Aceptar”, “Aceptar”, y listo!!!,ahora vamos a conectar nuestra base de datos desde una aplicaciòn java:

Para crear aplicaciones en java que sean capaces de Guardar, modificar, eliminar, y mostrar registros de una base de datos, java proporciona un paquete llamado java.sql.*; el cual incluye un conjunto de clases utiles para ello,por ahora vamos a aprender a usar dos de ellas para insertar datos en nuestra base de datos:

1- El objeto Connection: encapsula la conexion a la base de datos y permite crear objetos que usamos para ejecutar sentencias SQL.
2- El objeto Statement: ofrece un conjunto de metodos que usamos para ejecutar sentencias SQL y funciones especiales de la base de datos como: “conmit” “rollback”, etc. asi:

import java.sql.*;

public class DBManager {
private Connection con;
private Statement st;

public static void main(String a []){
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);// aqui cargamos el driver
con = DriverManager.getConnection(“jdbc:odbc:nombreBaseDatos”,””,””);
System.out.println(“Conexion exitosa”);// nos conectamos
// ahora podemos ejecutar cualquier sentencia sql desde nuestro programa, ejemplo:
st = con.createStatement();
st.executeUpdate(“insert into nombreTabla values(dato1,dato2,’datoVarchar’)”);
// ahora miramos la base de datos para ver si agregò
}
catch( Exception ex ){
ex.printStackTrace();
}
}
}


Como limitar max input en un campo de texto (JtextField)

abril 11, 2009

Esta es una forma de limitar el maximo numero de caracteres que pueden ingresar en una caja de texto  (JTextField),  esta misma tecnica se puede aplicar a cualquier componente de swing que permita editar texto, como JTextArea, JTextPane, JEditorPane o mejor dicho toda clase que extienda a javax.swing.JTextComponent.

import java.awt.*;
import javax.swing.text.*;
import javax.swing.*;

public class LimitadorDeDocumento extends DefaultStyledDocument {
int caracteresMaximos;

public LimitadorDeDocumento( int caracteresMaximos ) {
this.caracteresMaximos = caracteresMaximos;
}

public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if ( (getLength() + str.length()) <= caracteresMaximos)
super.insertString(offs, str, a);
else
Toolkit.getDefaultToolkit().beep();
}

public static void main( String [] a ){
// este sera un limitador para 20 caracteres
LimitadorDeDocumento limitador = new LimitadorDeDocumento(20);
JTextField campo = new JTextField();
campo.setDocument(limitador);
// esto es para mostrarlo
JOptionPane.showMessageDialog(null,campo);
System.exit(0);
}

}


MiniPaint Java

abril 3, 2009

Este sencillo programa permite dibujar en un lienzo (JPanel) usando el mouse, como si fuera en Microsoft Paint.

Ademas permite abrir una imagen guardada en un archivo y modificarla, o crear una imagen nueva y guardarla en un archivo.

Quize compartir esto para que aquellos que estan aprendiendo a trabajar con graficos como yo, tengan una base por donde comenzar😀 … Espero sus comentarios o aportes… Tambien me pueden encontrar en http://todoexpertos.com/s/2/alejosoft

si desean hacerme alguna pregunta, gracias por sus comentarios

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.image.*;

public class MiniPaint extends JFrame  {

public static final int SAVE = 0;
public static final int ABRIR = 1;
public static final int NEW = 2;

public static final int CHANGE_COLOR = 3;
public static final int BORRAR_TODO = NEW;

public static final int EXIT = 5;

public Lienzo myLienzo;

public static JColorChooser colorChooser = new JColorChooser();

public MiniPaint(){
myLienzo = new Lienzo();
this.setJMenuBar(createMenu());
this.getContentPane().add(myLienzo);

}

public static void main(String args[]){
MiniPaint paint = new MiniPaint();
paint.setSize(800,600);
paint.setVisible(true);

// para que se termine el programa cuando se cierra la ventana
paint.setDefaultCloseOperation(paint.EXIT_ON_CLOSE);
}

private JMenuBar createMenu(){
JMenu menu = new JMenu(“File”);
menu.add(new JMenuItem(new MenuAction(“Nuevo”,NEW)));
menu.add(new JMenuItem(new MenuAction(“Abrir”,ABRIR)));
menu.add(new JMenuItem(new MenuAction(“Guardar como…”,SAVE)));
menu.addSeparator();
menu.add(new JMenuItem(new MenuAction(“Salir”,EXIT)));
JMenuBar menuBar = new JMenuBar();
menuBar.add(menu);

menu = new JMenu(“Dibujo”);
menu.add(new JMenuItem(new MenuAction(“Cambiar color”,CHANGE_COLOR)));
menu.add(new JMenuItem(new MenuAction(“Borrar todo”,BORRAR_TODO)));
menuBar.add(menu);

return menuBar;
}

class Lienzo extends JPanel implements MouseListener,MouseMotionListener {
// inicialmente comenzamos a pintar en negro
private Color colorActual = Color.BLACK;
// si quieres usar un cursor propio para pintar, descomenta estas lineas
// y cambia la ruta de la imagen por la tuya. Para mejores resultados
// debes usar un gif de fondo transparente de 32 x 32 pixeles.
//private Cursor brushCursor = Toolkit.getDefaultToolkit().createCustomCursor(
//new ImageIcon(“cursor2.gif”).getImage(), new Point( 0, 0 ), “Dibujar” );
private Point puntoActual = new Point(0,0);
private Graphics grafica;
private int xViejo;
private int xNuevo;
private int yViejo;
private int yNuevo;
private boolean esPrimerPunto = false;
BufferedImage myImage;
Graphics2D g2;

public Lienzo(){
this.setBackground( Color.white );

// descomentar la siguiente linea para activar el cursor personalizado
//this.setCursor(brushCursor);
this.addMouseMotionListener(this);
this.addMouseListener(this);

}

public Color getColorActual(){
return colorActual;
}

public void setColorActual(Color color){
colorActual = color;
}

// este metodo crea un nuevo contexto grafico
public Graphics2D crearGraphics2D() {
Graphics2D g2 = null;

if (myImage == null || myImage.getWidth() != getSize().width
|| myImage.getHeight() != getSize().height) {
myImage = (BufferedImage) createImage(getSize().width, getSize().height);
}

if (myImage != null) {
g2 = myImage.createGraphics();
g2.setBackground(getBackground());
}

g2.clearRect(0, 0, getSize().width, getSize().height);

return g2;
}

public void paintComponent( Graphics g ) {
super.paintComponent( g );

if ( myImage == null ){
g2 = crearGraphics2D();
}
// comenzamos a dibujar cuando efectivamente el usuario hizo click sobre el lienzo
if ( esPrimerPunto ){
dibujar(g2);
}

if (myImage != null && isShowing()) {
g.drawImage(myImage, 0, 0, this);
}

}

private void dibujar(Graphics2D g){
g.setRenderingHint( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
g.setColor(colorActual);
g.fillOval(xNuevo,yNuevo,5,5);
g.fillOval(xViejo,yViejo,5,5);
}

public void resetAll(){
esPrimerPunto = false;
myImage = null;
repaint();
}

public void resetLinea(int x, int y) {
xViejo = xNuevo = x;
yViejo = yNuevo = y;
esPrimerPunto = true;
//grafica = null;
}

public void actualizar(int x, int y) {
xViejo = xNuevo;
xNuevo = x;
yViejo = yNuevo;
yNuevo = y;
repaint(x,y,5,5);
}

public void mouseDragged( MouseEvent e ) {
actualizar(e.getX(),e.getY());
}

public void mousePressed( MouseEvent e ) {
resetLinea(e.getX(),e.getY());
}

// en estos metodos no hago nada, pero se pueden hacer muchas cosas mas dependiendo del evento de raton
public void mouseMoved( MouseEvent e ) { }

public void mouseClicked( MouseEvent e ) {}

public void mouseEntered( MouseEvent e ) {}

public void mouseExited( MouseEvent e ) {}

public void mouseReleased( MouseEvent e ) { }

public void guardarComo() {
try {
JFileChooser jfc = createJFileChooser();
jfc.showSaveDialog(this);
File file = jfc.getSelectedFile();
if ( file == null ){
return;
}
javax.swing.filechooser.FileFilter ff = jfc.getFileFilter();
String fileName = file.getName();
String extension = “jpg”;
if ( ff instanceof MyFileFilter){
extension = ((MyFileFilter)ff).getExtension();
}

fileName = fileName + “.” + extension;
file = new File(file.getParent(),fileName);

// Guardamos la imagen dibujada en el archivo seleccionado
javax.imageio.ImageIO.write(myImage, extension, file);
} catch (Exception e) {
System.out.println(e);
}
}

public void abrir() {
try {
JFileChooser jfc = createJFileChooser();
jfc.showOpenDialog(this);

File file = jfc.getSelectedFile();
if ( file == null ){
return;
}

// creamos la imagen a partir del archivo seleccionado
myImage = javax.imageio.ImageIO.read(file);
int w = myImage.getWidth(null);
int h = myImage.getHeight(null);
if (myImage.getType() != BufferedImage.TYPE_INT_RGB) {
BufferedImage bi2 =
new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics big = bi2.getGraphics();
big.drawImage(myImage, 0, 0, null);
}
g2 = (Graphics2D)myImage.getGraphics();
repaint();
} catch (IOException e) {
System.out.println(“Image could not be read”);
System.exit(1);
}
}

public JFileChooser createJFileChooser(){
JFileChooser jfc = new JFileChooser();
jfc.setAcceptAllFileFilterUsed(false);
String [] fileTypes = getFormats();
for(int i=0; i<fileTypes.length; i++ ){
jfc.addChoosableFileFilter(new MyFileFilter(fileTypes[i],fileTypes[i] + ” file”));
}
return jfc;

}

/* Devuelve los formatos ordenados alfabeticamente y en minusculas */
public String[] getFormats() {
String[] formats = javax.imageio.ImageIO.getWriterFormatNames();
java.util.TreeSet<String> formatSet = new java.util.TreeSet<String>();
for (String s : formats) {
formatSet.add(s.toLowerCase());
}
return formatSet.toArray(new String[0]);
}

}

class MenuAction extends AbstractAction {
private int actionId;

public MenuAction(String text, int actionId){
super(text);
this.actionId = actionId;
}

public void actionPerformed(ActionEvent e){
switch(actionId){
case MiniPaint.EXIT:
System.exit(0);
break;
case MiniPaint.CHANGE_COLOR:
Color color = MiniPaint.colorChooser.showDialog(MiniPaint.this, “Seleccione color”, MiniPaint.this.myLienzo.getColorActual());
MiniPaint.this.myLienzo.setColorActual(color);
break;
case MiniPaint.SAVE:
MiniPaint.this.myLienzo.guardarComo();
break;
case MiniPaint.ABRIR:
MiniPaint.this.myLienzo.abrir();
break;
case MiniPaint.BORRAR_TODO:
MiniPaint.this.myLienzo.resetAll();
break;
}
}
}

class MyFileFilter extends javax.swing.filechooser.FileFilter
{

private String extension;
private String description;

public MyFileFilter(String extension,String description){
this.extension = extension;
this.description = description;
}

public boolean accept (File f) {
return f.getName ().toLowerCase ().endsWith (“.”+extension)
|| f.isDirectory ();
}

public String getDescription () {
return description;
}

public String getExtension(){
return extension;
}
}
}