16 de marzo de 2013

System.ini en Java

Se tomaran datos introducidos por el usuario desde la consola en Java para poder conectarse a una base de datos en MySQL, se programara utilizando el IDE NetBeans y la libreria MySQL que viene con el programa, cualquier duda aquí esta el link que explica como hacerlo:
http://pabletoreto.blogspot.com/2013/01/conectar-java-con-mysql.html

Se utilizara la librería io y las clases Bufferedreader, InputstreamReader, IoExcpetion y sql.*, así:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.sql.*;


este es el programa completo:

package leerconsola;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.sql.*;

public class LeerConsola {
public static String Connectar
(String user, String pass,String base, String servidor){
        String mensaje=null;
        String url="jdbc:mysql://" +servidor+ "/" +base;
        try{
           Class.forName("com.mysql.jdbc.Driver");
           Connection cnn=DriverManager.getConnection(url,user,pass);
           if (cnn!= null) mensaje="Se conecto a la base de datos";
        }catch(ClassNotFoundException cnfex){
            mensaje=cnfex.getMessage();
        }catch(SQLException sqlex){
            mensaje=sqlex.getMessage();
        }catch(Exception ex){
            mensaje=ex.getMessage();
        }return mensaje;
    }
public static void main(String[] args) {
    String user;
    String pass;
    String base;
    String servidor;
    String msg;
    try{
    BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Conexion Java-MySQL");
    System.out.println("Digitar el servidor de la base:");
    servidor=br.readLine();
    System.out.println("Digitar la base de datos a la que se desea conectar:");
    base=br.readLine();
    System.out.println("Digitar el usuario MySQL:");
    user=br.readLine();
    System.out.println("Digitar el pass MySQL:");
    pass=br.readLine();
    msg=Connectar(user, pass, base, servidor);
    System.out.println(msg);
    }catch(IOException ioex){
    System.out.println(ioex.getMessage());
    }}}


14 de marzo de 2013

[Microsoft][Administrador de controladores ODBC] Longitud de cadena o de buffer no valida

Muy seguido aparece ese error cuando se conecta Java con SQL, yo estaba trabajando de lo mas tranquilo desde NetBeans conectandome via ODBC con SQL y me apareció este error, después de buscar en internet y encontrar las soluciones de muchos "expertos" que te mandan a configurar toda tu computadora o incluso mejor trabajar desde Linux, encontré una solución que a mi me ha funcionado muy bien, primero debemos ir al panel de control --> Sistema y seguridad de nuestra maquina, yo trabajo en Windows 7


Lo siguiente es seleccionar Orígenes de datos ODBC


ya en la ventana de Administrador de orígenes de datos ODBC, nos vamos a la pestaña Seguimiento y damos click al botón Iniciar seguimiento ahora


nos quedara la ventana así  NO HAY QUE CERRAR LA VENTANA, sino que nos vamos a nuestro IDE sea NetBeans o Eclipse y corremos la aplicación que se conecta con SQL, verán que ya no da el problema.

Si quieren conectarse a SQL desde Java vía ODBC, aquí esta el Link
http://pabletoreto.blogspot.com/2013/03/conectar-java-sql-utilizando-odbc.html

Si quieren realizar operaciones sobre una base de datos SQL desde Java, aquí esta el link
http://pabletoreto.blogspot.com/2013/03/procedimientos-almacenados-y-vistas-en.html



13 de marzo de 2013

Instalar JDK y Eclipse

les dejo la dirección de un post que me pareció muy bueno

http://www.taringa.net/posts/ciencia-educacion/10979915/Instalar-JDK-y-eclipse-en-Windows-para-programar-en-Java.html

Consejos al utilizar JDBC


Evitar consultas SQL SELECT * 
SELECT * FROM... es una forma muy habitual de establecer una consulta en SQL. Sin embargo, muchas veces no es necesario consultar todos los campos. Para cada columna que hay que devolver, el controlador JDBC tiene que hacer el trabajo adicional de enlazar y devolver la fila. Aún en el caso de que la aplicación no llegue a utilizar nunca una columna concreta, el controlador JDBC debe tenerla presente y reservar espacio por si se utiliza. Esta cuestión no supone una actividad general significativa si son pocas las columnas que no se utilizan de las tablas. Sin embargo, si son numerosas las columnas no utilizadas, la actividad general puede llegar a ser significativa. En tal caso, sería mejor listar individualmente las columnas que a la aplicación le interesa consultar, como en este ejemplo:
SELECT COL1, COL2, COL3 FROM...

Utilizar getXXX(int) en vez de getXXX(String)
Utilice los métodos getXXX de ResultSet que toman valores numéricos, en vez de las versiones que toman nombres de columna. Si bien la libertad que supone utilizar nombres de columna en vez de constantes numéricas parece ser una ventaja, la base de datos propiamente dicha solo sabe manejar los índices de las columnas. Por ello, cada vez que se llama a un método getXXX utilizando el nombre de una columna, el controlador JDBC lo debe resolver para que el método se pueda pasar a la base de datos. Normalmente, a los métodos getXXX se les suele llamar dentro de bucles que se pueden ejecutar millones de veces, y ello provocaría rápidamente la acumulación de la pequeña actividad general que supone la resolución de cada uno de los nombres de columna.

Evitar llamadas a getObject para los tipos Java primitivos.
Cuando de la base de datos se obtienen valores de tipos primitivos (que son los tipos int, long, float, etcétera), es mucho más rápido utilizar el método get específico del tipo primitivo (getInt, getLong, getFloat) que utilizar el método getObject. La llamada a getObject realiza el trabajo de obtener el tipo primitivo y luego crea un objeto para devolverlo. Normalmente, esto se hace en los bucles, lo que supone crear millones de objetos de corta vida. Si se emplea getObject para los mandatos de primitivos, existe el inconveniente adicional de que se activa con frecuencia el colector de basura, lo que aún reduce más el rendimiento.

Utilizar PreparedStatement más que Statement
Si escribe una sentencia SQL que se vaya a utilizar más de una vez, el rendimiento será mayor si la sentencia es un objeto PreparedStatement que si es un objeto Statement. Todas las veces que se ejecuta una sentencia, se realiza un proceso en dos pasos: la sentencia se prepara y luego se ejecuta. Si se emplea una sentencia preparada, el paso de preparar la sentencia solo tiene lugar en el momento de construir la sentencia, y no se repite cada vez que se ejecuta la sentencia. Los programadores, aunque saben que el rendimiento de PreparedStatement es mayor que el de Statement, suelen desaprovechar esta ventaja en muchas ocasiones. Debido a la subida de rendimiento que proporcionan las sentencias PreparedStatement, conviene utilizarlas en el diseño de las aplicaciones siempre que sea posible.

Evitar llamadas a DatabaseMetaData
Conviene tener en cuenta que algunas de las llamadas a DatabaseMetaData pueden ser costosas. Concretamente, pueden ser costosos los métodos getBestRowIdentifier(), getCrossReference(), getExportedKeys() y getImportedKeys(). Algunas llamadas a DataBaseMetaData implican complejas condiciones de unión sobre tablas a nivel del sistema. Únicamente se deben emplear cuando se necesita la información que proporcionan, no porque resulte más práctico.

Utilizar el nivel de compromiso correcto para la aplicación
JDBC proporciona varios niveles de compromiso, que determinan cómo se afectan mutuamente múltiples transacciones con respecto al sistema. El valor por omisión es utilizar el nivel de compromiso más bajo. Esto implica que las transacciones pueden ver parte del trabajo de cada una de ellas a través de los límites del compromiso. También implica la posibilidad de que se produzcan ciertas anomalías de base de datos. Algunos programadores aumentan el nivel de compromiso para no tener que preocuparse de si se produce este tipo de anomalías. Tenga en cuenta que los niveles de compromiso más altos implican que la base de datos se cuelgue en bloqueos más bastos. Ello limitará la cantidad de concurrencia que el sistema puede tener, disminuyendo en gran medida el rendimiento de algunas aplicaciones. A menudo, las condiciones de anomalía no se pueden producir debido en primer lugar al diseño de la aplicación. Tómese su tiempo para comprender lo que está tratando de lograr y limite el nivel de aislamiento de las transacciones al mínimo que pueda emplear sin arriesgarse.

Considerar la posibilidad de almacenar datos en Unicode
En Java, todos los datos de tipo carácter con los que se trabaja (objetos String) deben tener el formato Unicode. Por lo tanto, para las tablas cuyos datos no tengan el formato Unicode, se necesitará que el controlador JDBC convierta los datos a ese formato y desde él al ponerlos en la base de datos y al recuperarlos de la base de datos. Si la tabla ya tiene los datos en Unicode, el controlador JDBC no tendrá que convertirlos, por lo que será más rápido colocar en ella los datos de la base de datos. Fíjese, sin embargo, que los datos en Unicode pueden no funcionar con las aplicaciones no Java, ya que estas no saben cómo manejar el formato Unicode. Tenga presente también que el rendimiento no se ve afectado para los datos que no son de tipo carácter, ya que esos datos nunca se tienen que convertir. Aún hay que tener en cuenta otra particularidad, y es que los datos almacenados en Unicode ocupan el doble de espacio que los datos de un solo byte. Sin embargo, si son numerosas las columnas de tipo carácter que se leen muchas veces, puede llegar a ser notable el aumento de rendimiento que supone almacenar los datos en Unicode.

Utilizar procedimientos almacenados
El uso de procedimientos almacenados está soportado en Java. El rendimiento de los procedimientos almacenados puede ser mayor al permitir que el controlador JDBC ejecute SQL estático en vez de SQL dinámico. No cree procedimientos almacenados para cada sentencia SQL individual que ejecute en el programa. No obstante, cuando sea posible, cree un procedimiento almacenado que ejecute un grupo de sentencias SQL.

Utilizar BigInt en vez de Numérico/Decimal
En vez de utilizar campos numéricos o decimales cuya escala sea 0, utilice el tipo de datos BigInt. BigInt se convierte directamente al tipo Java primitivo Long, mientras que los tipos de datos numéricos o decimales se convierten en objetos String o BigDecimal. Como se ha indicado anteriormente es preferible utilizar tipos de datos primitivos que utilizar tipos que requieren la creación de objetos.

Cerrar explícitamente los recursos JDBC cuando ya no se necesitan
Los objetos ResultSet, Statement y Connection se deben cerrar explícitamente por medio de la aplicación cuando ya no se necesitan. Así se hace una limpieza de recursos del modo más eficaz posible, y el rendimiento puede aumentar. Además, los recursos de base de datos que no se cierran de manera explícita pueden provocar fugas de recursos, y los bloqueos de base de datos se pueden prolongar más de lo debido. Ello puede producir anomalías de aplicación o reducir la concurrencia en las aplicaciones.

Utilizar la agrupación de conexiones
La agrupación de conexiones es una estrategia que permite reutilizar los objetos Connection de JDBC por parte de múltiples usuarios, en vez de dejar que cada usuario solicite crear su propio objeto Connection. Cuesta mucho crear objetos Connection. En vez de hacer que cada usuario cree una conexión nueva, conviene que las aplicaciones sensibles al rendimiento compartan una agrupación de conexiones. Ya son muchos los productos (como WebSphere) que proporcionan soporte para la agrupación de conexiones y cuyo uso requiere muy poco esfuerzo adicional por parte del usuario. Si no desea utilizar un producto que tenga soporte para la agrupación de conexiones o si prefiere construir una propia con objeto de controlar mejor su funcionamiento y su ejecución, piense que es relativamente fácil hacerlo.

Considerar la posibilidad de utilizar la agrupación de sentencias PreparedStatement
La agrupación de sentencias funciona de manera muy parecida a la agrupación de conexiones. En vez de poner en la agrupación tan solo las conexiones, en ella se pone un objeto que contenga la conexión y las sentencias PreparedStatement. Luego se recupera ese objeto y se accede a la sentencia concreta que se quiere usar. Esta estrategia puede aumentar drásticamente el rendimiento.

Utilizar SQL eficaz
Dado que JDBC se construye encima de SQL, cualquier técnica que mejore la eficacia de SQL mejorará también la eficacia de JDBC. Por lo tanto, JDBC se beneficiará de las consultas optimizadas, de los índices acertadamente elegidos y de otros aspectos que mejoren el diseño de SQL

8 de marzo de 2013

Procedimientos Almacenados y Vistas en SQL-Java

Se creara una nueva aplicación en Java utilizando NetBeans 7.2.1 a la cual llamare EjemploSQL, una vez creada la aplicación se conectara a una base de datos en SQL Server utilizando ODBC como puente entre la aplicación y la base de datos, también se utilizaran procedimientos almacenados SQL para realizar las operaciones de agregar, modificar y eliminar los registros de un empleado sobre una tabla y una Vista en SQL para mostrar los datos de todos los empleados, los cuales se mostraran en un JTable desde un JForm, en caso se necesite reforzar la conexión Java-SQl vía ODBC les dejo el link en que se detallan los pasos: http://pabletoreto.blogspot.com/2013/03/conectar-java-sql-utilizando-odbc.html

En la aplicación EjemploSQL se crearan dos paquetes:
1. ConexionSQL: este paquete contendrá la clase Conexion con un método publico Conectar() que se conectara con la base de datos vía ODBC y entregara un objeto tipo Connection.
2. FormSQL: este paquete contendrá el formulario.

*****  Base de datos registro, diseño de la tabla empleado  *****


*****  Conexión a la base de datos registro en SQL(Package ConexionSQL)  *****
Trabajaremos sobre la clase Conexión.java para conectarnos a la base de datos registro en SQL, aquí está el código:

public class Conexion {
    static String user="";
    static String pass="";
    static String url="jdbc:odbc:SQLJava";

    public static Connection Conectar(){
        Connection cnn=null;
    try{
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        cnn=DriverManager.getConnection(url, user, pass);
       }catch(ClassNotFoundException cnfex){
            System.out.println(cnfex.getMessage());
       }catch(SQLException sqlex){
            System.out.println(sqlex.getMessage());
       }catch(Exception ex){
            System.out.println(ex.getMessage());
      }
       return cnn;
    }}

*****  Diseño del JForm(Package FormSQL)  ***** 
A continuación presento el formulario JForm que se utilizara con las siguientes especificaciones:
El label Código Empleado utiliza el txtCodigo
El label Nombres utiliza el txtNombres
El label Cargo Empleado utiliza el txtCargo
El label Departamento utiliza el txtDpto
El label Jefe asignado utiliza el txtJefe
El botón IngresarDatos tiene definido el nombre BIngresar
El botón ModificarDatos tiene definido el nombre BModificar
El botón BorrarDatos tiene definido el nombre BEliminar
El JTable para mostrar los datos tiene definido el nombre tablita


*****  Procedimientos almacenados SQL Server-Java  *****
Presentare los procedimientos almacenados para los eventos de los botones Ingresar Datos, Modificar Datos y Eliminar Datos, para estas sencillas acciones no deberían utilizarse procedimientos almacenados a menos de querer tener una seguridad tan fuerte que termine siendo tosca e innecesaria, pero cada quien maneja su capa de datos como mejor le parezca, 

*****  Paquetes, librerías y variables necesarias(Package FormSQL)  *****
Estas son las librerías y variables que utilizare en este ejemplo

package FormSQL;
import java.sql.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;
import ConexionSQL.Conexion;
public class FormSQL extends javax.swing.JFrame {
String Insertar= "{ call AgregarDatos(?,?,?,?,?) }";
String Modificar="{CALL ModificarDatos(?,?,?,?,?,?)}";
String Eliminar="{CALL EliminarDatos(?,?)}";
DefaultTableModel modelo;

    public FormSQL() {
     initComponents();
    CargarDatos();}


*****  Mostrando datos tabla empleado(Package FormSQL)  *****
Para mostrar los datos de la tabla empleado no se usara un procedimiento almacenado sino mas bien se construirá una vista en SQL, se usara la sentencia: select * from empleado, como sugerencia, se debe evitar en lo posible utilizar el * en sentencias select, pero en este ejemplo se utiliza sobre todo para mostrar la construcción y el uso de las vistas SQL en Java, ustedes pueden construir una vista más digna de su proyecto o acorde a sus necesidades, pero aquí vamos a los simple, este es el código de la vista :

SELECT  Codigo, Nombres, Cargo, Departamento, Jefe FROM dbo.empleado

La tabla se poblara con los datos cada vez que se inicie la aplicación y cada vez que se haga una acción sobre la base de datos, esto lo hará el método CargarDatos()

public void CargarDatos(){
            Connection cnn;   
            modelo= new DefaultTableModel(); 
        try{
            cnn=Conexion.Conectar();
            Statement smt=cnn.createStatement();
            ResultSet rs= smt.executeQuery("select * from seleccionardatos");
            ResultSetMetaData md=rs.getMetaData();
            int columnas= md.getColumnCount();
            for (int i = 1; i <= columnas; i++) {
            modelo.addColumn(md.getColumnLabel(i));}
            while(rs.next()){
            Object[] fila = new Object[columnas];
            for (int i = 0; i < columnas; i++) {fila[i]=rs.getObject(i+1);}
            modelo.addRow(fila);
            }tablita.setModel(modelo);
            cnn.close();
            }catch(SQLException sqlex){
            setTitle("Problema CargarDatos" +sqlex.getMessage());}}

*****  Ingresar datos a la tabla empleado(Package FormSQL)  *****
Primero mostrare el procedimiento almacenado en SQL para ingresar datos a la tabla empleado, ademas usare commit en los procedimientos almacenados para el caso de realizar mas acciones sobre diferentes tablas, que es el uso real que debe darse a los procedimientos almacenados.

USE registro
GO
IF OBJECT_ID('AgregarDatos','p')is not null
DROP PROCEDURE AgregarDatos
GO

CREATE PROCEDURE AgregarDatos
@nombres varchar(50),
@cargo varchar(50),
@departamento varchar(50),
@jefe varchar(50),
@mensaje varchar(100) output

AS
SET NOCOUNT ON
BEGIN TRY
BEGIN TRAN
INSERT INTO empleado VALUES(@nombres, @cargo, @departamento, @jefe)
COMMIT
SELECT @mensaje='Registro ingresado correctamente en Base de Datos !!!'
END TRY

BEGIN CATCH
ROLLBACK
SELECT @mensaje='Registro no ingresado en Base de Datos !!!'
END CATCH

Ahora presento el evento click del botón Ingresar Datos, este invoca al método IngresarDatos() y le envía los parámetros necesarios para realizar la operación de agregar datos sobre la tabla empleado

private void BIngresarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        String Nombres=txtNombres.getText();
        String Dpto=txtDpto.getText();
        String Cargo=txtCargo.getText();
        String Jefe=txtJefe.getText();
        String resultado=AgregarDatos(Nombres, Cargo, Dpto, Jefe);
        setTitle(resultado);
        CargarDatos();}

y por último el método IngresarDatos() que se conecta con la base de datos, se utilizara este string: String Insertar="{CALL InsertarDatos(?,?,?,?,?)}"; para invocar al procedimiento almacenado InsertarDatos y se prepara la sentencia CallableStatement  para envíar los datos necesarios al procedimiento y agregar el registro correspondiente de la tabla empleados, al final refrescara el JTable con los nuevos datos de la tabla empleado.

public String AgregarDatos(String Nombres, String Cargo, String Dpto, String Jefe){
        Connection cnn;   
        String resultado;
        try{
           cnn=Conexion.Conectar(); 
           CallableStatement cmst;
           cmst = cnn.prepareCall(Insertar);
           cmst.setString(1,Nombres);
           cmst.setString(2,Cargo);
           cmst.setString(3,Dpto);
           cmst.setString(4, Jefe);
           cmst.registerOutParameter(5, java.sql.Types.VARCHAR,100);
           cmst.execute();
           resultado=cmst.getString(5);
           cnn.close();
        }catch(SQLException sqlex){
           resultado="No se realizo la operacion" +sqlex.getMessage();
        }catch(Exception ex){System.out.println(ex.getMessage());
           resultado="No se realizo la operacion" +ex.getMessage();
        }return resultado;}

*****  Modificar datos a la tabla empleado(Package FormSQL)  *****
Primero mostrare el procedimiento almacenado en SQL para modificar datos en la tabla empleadoademas usare commit en los procedimientos almacenados para el caso de realizar mas acciones sobre diferentes tablas, que es el uso real que debe darse a los procedimientos almacenados.

USE registro
GO
if OBJECT_ID('ModificarDatos','p') is not null
DROP PROC ModificarDatos
GO

CREATE PROC ModificarDatos
@codigo int,
@nombres varchar(50),
@cargo varchar(50),
@departamento varchar(50),
@jefe varchar(50),
@mensaje varchar(100) output

AS
SET NOCOUNT ON
IF exists (select * from empleado where Codigo=@codigo)
BEGIN TRY
BEGIN TRAN
UPDATE empleado SET Nombres=@nombres, Cargo=@cargo,Departamento=@departamento, Jefe=@jefe WHERE Codigo=@codigo
COMMIT
SET @mensaje='El registro fue actualizado correctamente !!!'
END TRY

BEGIN CATCH
ROLLBACK
SET @mensaje='El registro no fue actualizado !!!'
END CATCH
ELSE
BEGIN
SET @mensaje='El registro no existe en la base de datos !!!'
END

Ahora presento el evento click del botón Modificar Datos, este invoca al método ModificarDatos() y le envía los parámetros necesarios para realizar la operación de modificación sobre la tabla empleado

private void BModificarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        int Codigo=Integer.parseInt(txtCodigo.getText());
        String Nombres=txtNombres.getText();
        String Dpto=txtDpto.getText();
        String Cargo=txtCargo.getText();
        String Jefe=txtJefe.getText();
        String resultado=ModificarDatos(Codigo,Nombres, Cargo, Dpto, Jefe);
        setTitle(resultado);
        CargarDatos();}

y por ultimo el método ModificarDatos() que se conecta con la base de datos, se utilizara este string: String Modificar="{CALL ModificarDatos(?,?,?,?,?,?)}"; para invocar al procedimiento almacenado ModificarDatos y se prepara la sentencia CallableStatement  para envíar los datos necesarios al procedimiento y modificar el registro correspondiente de la tabla empleados, al final refrescara el JTable con los nuevos datos de la tabla empleado.

public String ModificarDatos(int Codigo,String Nombres, String Cargo, String Dpto, String Jefe){
            Connection cnn;   
            String resultado;
        try{
           cnn=Conexion.Conectar();
           CallableStatement cmst= cnn.prepareCall(Modificar);
           cmst.setInt(1, Codigo);
           cmst.setString(2,Nombres);
           cmst.setString(3,Cargo);
           cmst.setString(4,Dpto);
           cmst.setString(5, Jefe);
           cmst.registerOutParameter(6, java.sql.Types.VARCHAR,100);
           cmst.execute();
           resultado=cmst.getString(6);
           cnn.close();  
        }catch(SQLException sqlex){
           resultado="No se realizo la operacion" +sqlex.getMessage();
        }catch(Exception ex){System.out.println(ex.getMessage());
           resultado="No se realizo la operacion" +ex.getMessage();
        }return resultado;}

*****  Eliminar datos de la tabla empleado(Package Formulario)  *****
Primero mostrare el procedimiento almacenado en SQL para eliminar datos en la tabla empleadoademas usare commit en los procedimientos almacenados para el caso de realizar mas acciones sobre diferentes tablas, que es el uso real que debe darse a los procedimientos almacenados.

USE registro
GO
IF OBJECT_ID('EliminarDatos','p')is not null
DROP PROC EliminarDatos
GO

CREATE PROCEDURE EliminarDatos
@codigo int,
@mensaje varchar(100) output

AS
SET NOCOUNT ON
IF EXISTS (select * from empleado where Codigo=@codigo)
BEGIN TRY
BEGIN TRANSACTION
DELETE FROM empleado WHERE Codigo=@codigo
COMMIT
SELECT @mensaje='Registro eliminado correctamente de Base de Datos !!!'
END TRY

BEGIN CATCH
ROLLBACK
set @mensaje='Registro no fue eliminado de la Base de Datos !!!'
END CATCH
ELSE
BEGIN
SET @mensaje='Registro no se puede eliminar pues no existe !!!'
END

Ahora el evento click del botón Eliminar Datos, este invoca al método EliminarDatos() y le envía los parámetros necesarios para realizar la operación de eliminar un registro de la tabla empleado

private void BEliminarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        int Codigo=Integer.parseInt(txtCodigo.getText());
        String resultado=EliminarDatos(Codigo);
        setTitle(resultado);
        CargarDatos();}

y por ultimo el método EliminarDatos() que se conecta con la base de datos, se utilizara este string: String Eliminar="CALL BorrarDatos(?,?)"; para invocar al procedimiento almacenado BorrarDatos y se prepara la sentencia CallableStatement   para envíar los datos necesarios al procedimiento y eliminar el registro correspondiente de la tabla empleados, al final refrescara el JTable con los nuevos datos de la tabla empleado.

public String EliminarDatos(int Codigo){
        Connection cnn;   
            String resultado;
        try{
           cnn=Conexion.Conectar();
           CallableStatement cmst= cnn.prepareCall(Eliminar);
           cmst.setInt(1, Codigo);
           cmst.registerOutParameter(2, java.sql.Types.VARCHAR,100);
           cmst.execute();
           resultado=cmst.getString(2);
           cnn.close();
        }catch(SQLException sqlex){
           resultado="No se realizo la operacion" +sqlex.getMessage();
        }catch(Exception ex){System.out.println(ex.getMessage());
           resultado="No se realizo la operacion" +ex.getMessage();
        }return resultado;}