hola cmo estas...
me impresiona un poco que hables de .exe...
pues cuando necesites llevarte el programa solo creas un archivo con extension.jar, y ejecutas dicho .jar en cualquier otro equipo, sistema operativo etc... y pues el equipo debe tener el jdk.
conozco mas de java, que de cualquier otra cosa, y pues al programar trato de respestar las normas de orientacion a objetos.
hice hace poco un aplicacion java de escritorio, en donde utilize una bd enbebida( java derby), y la clase que utilice para hacer las consultas fue la siguiente:
Clase para conectar a una bd enbebida
Código:
package Bd;
public class ConectarDerby {
private String url;
//private String url;
public LinkedList<ArrayList> Consulta(String sql,int numColumnas)
{
Connection con=null;
Statement s=null;
ResultSet rs=null;
LinkedList<ArrayList> filas = new LinkedList<ArrayList>();
try
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String carpeta;
if(MarcoPrincipal.getSo().equals("Linux")){
carpeta="/BD";
}else{
carpeta=String.valueOf((char)(92))+"BD";
}
url= "jdbc:derby:"+MarcoPrincipal.getDirectorioAplicacion()+carpeta;
con = DriverManager.getConnection(url, "stiven", "stiven");
s = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = s.executeQuery(sql);
while (rs.next()) {
ArrayList<Object> aux=new ArrayList<Object>();
for (int i = 1; i <= numColumnas; i++) {
aux.add(rs.getObject(i));
}
filas.add(aux);
}
rs.close();
s.close();
con.close();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "<html><center>Error: Es probable que la base de datos</center> "
+ "<center>no se encuentre en la carpeta del programa, o que este software ya se encuentre en ejecución.</center> ");
} catch (ClassNotFoundException ex) {
} finally {
try {
if (rs != null) {
rs.close();
}
if (s != null) {
s.close();
}
if (con != null) {
con.close();
}
} catch (SQLException ex1) {
Logger.getLogger(ConectarDerby.class.getName()).log(Level.SEVERE, null, ex1);
}
}
return filas;
}
public boolean EjecutarIntruccion(String sql)
{
boolean retorno=false;
Connection con=null;
Statement s=null;
try
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String carpeta;
if(MarcoPrincipal.getSo().equals("Linux")){
carpeta="/BD";
}else{
carpeta=String.valueOf((char)(92))+"BD";
}
url= "jdbc:derby:"+MarcoPrincipal.getDirectorioAplicacion()+carpeta;
con = DriverManager.getConnection(url,"stiven","stiven");
s = con.createStatement();
s.executeUpdate(sql);
s.close();
con.close();
retorno = true;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,"<html><center>Error: Es probable que la base de datos</center> "
+ "<center>no se encuentre en la carpeta del programa, o que este software ya se encuentre en ejecución.</center> ");
} catch (ClassNotFoundException ex) {
System.out.println(ex.toString());
}
finally{
try {
if(con!=null)con.close();
if(s!=null)s.close();
} catch (SQLException ex) {
Logger.getLogger(ConectarDerby.class.getName()).log(Level.SEVERE, null, ex);
}
}
return retorno;
}
/* JOptionPane.showMessageDialog(null,"<html><center>Error: Es probable que la base de datos</center> "
+ "<center>no se encuentre en la carpeta del programa, o que este software ya se encuentre en ejecución.</center> ");*/
public boolean pruebaConexion()
{
boolean retorno;
Connection con=null;
try
{
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
String carpeta;
if(MarcoPrincipal.getSo().equals("Linux")){
carpeta="/BD";
}else{
carpeta=String.valueOf((char)(92))+"BD";
}
url= "jdbc:derby:"+MarcoPrincipal.getDirectorioAplicacion()+carpeta;
con = DriverManager.getConnection(url,"stiven","stiven");
con.close();
retorno= true;
}
catch(SQLException e)
{
retorno=false;
}catch (ClassNotFoundException ex)
{
retorno=false;
}
finally{
try {
if(con!=null)con.close();
} catch (SQLException ex) {
Logger.getLogger(ConectarDerby.class.getName()).log(Level.SEVERE, null, ex);
}
}
return retorno;
}
}
utilice unos objetos viejos, pues siempre e visto unas advertencias algo inquietantes con cachedrowset, probablemente se pueda hacer mejor...
Este programa cuando ya esta empaquetado en su .jar y cuando esta en ejecucion: busca la bd, (en el caso de java derby enbebida es una carpeta y en el caso de este programa puse esta carpeta dentro del mismo directorio en donde esta el .jar) y lo hace obteniendo la ruta con ayuda de un metodo en una clase externa para posteriormente hacer la conexion.
la correcta programacion (en bd embebidas, en mi opinión):
1) En la clase ConectarDerby, estan dos métodos, lo ideal es que estos sean los unicos en todo el programa que se conecten a la bd para hacer las consultas (el metodo que devuelve algo de una consulta y el metodo que solo ejecuta una consulta que no debuelve nada(update...etc) pero que devuelve la afirmacion(boolean) de que se realizo con exito )
2) lo ideal es que las demas clases clases no sepan de conexiones.. ni de bd, solo de algun objeto java que ya venga con los valores que devolvio la consulta.
3) Tener cuidado de no dejar conexiones abiertas, y siempre utilizar el bloque finally.
tratandose de bd cliente-servidor, las cosas cambian.
Mas que nada te recomiendo leer sobre beans...