Creie um .jar de minha aplicação, se eu executar ele o programa é aberto normalmente, mas quando entro nas telas de cadastros ele diz q não encontra o arquivo do banco de dados (.mdb), se eu rodar a aplicaçaõ diretamente no netbeans o sistema funciona perfeitamente…
Estou usando tambem um .jar de terceiros (bematech.jar) que tambem não esta funcionando, quando mando os comandos para a impressora, nada acontece…
Então a dúvida:
Criei o .jar com todos os .class de minha aplicação, onde devo largar os arquivos que o programa necessita (.jar, .dll …)
Vá no painel de controles, Ferramentas Administrativas e depois em Fontes de dados (ODBC) e lá vai ter uma opção para adicionar o banco *.mdb
E
Evandro_Sangiovo
Opa Romarcio… tudo bem???
Valeu pelo retorno, mas o problema não é este, pois essa conexão não nessecita de odbc para funcionoar…
O problema todo é onde devo largar meu arquivo .mdb para funcionar?
andresmafra
Evandro Sangiovo:
Opa Romarcio… tudo bem???
Valeu pelo retorno, mas o problema não é este, pois essa conexão não nessecita de odbc para funcionoar…
O problema todo é onde devo largar meu arquivo .mdb para funcionar?
Evandro, como está a Url do bd na sua aplicação?
E
Evandro_Sangiovo
Opa.. vou postar a classe Banco
packageSistema;importjava.sql.*;/** * @author Evandro B. Sangiovo * @version 1.0 */publicclassBanco{Stringdsn="jdbc:odbc:Driver="+"{Microsoft Access Driver "+"(*.mdb)};DBQ=java.mdb";/** * Este método é responsável pela abertura da conexão com o banco de dados. * @return Retorna um Objeto Connection com a conexão aberta. */privateConnectionAbreConexao()throwsException{try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();Connectioncon=DriverManager.getConnection(dsn);returncon;}catch(Exceptionex){throwex;}}/** * Este método é responsável pelo fechamento da conexão com o banco de dados. *@param conexao Passe por parâmentro o Objeto Connection para que seja efetuada o fechamento da conexão. */privatevoidFechaConexao(Connectionconexao)throwsSQLException{try{if(!conexao.isClosed())conexao.close();}catch(SQLExceptionex){throwex;}}/** * Este método é responsavel p/ construir um objeto PreparedStatement. * @param sql Passe por parâmetro a string SQL para ser constuído o Objeto PreparedStatement. * @return O método retorno um Objeto PreparedStatement. */publicPreparedStatementRetornaStatement(Stringsql)throwsSQLException,Exception{Connectionconexao=AbreConexao();try{PreparedStatementpStatement=conexao.prepareStatement(sql);returnpStatement;}catch(SQLExceptionex){throwex;}catch(Exceptionex){throwex;}}/** * Este método é responsavel p/ executar os comandos (Insert, Update, Delete) no banco. * Para o comando "Select" use o método "ExecutaSqlQuery". * @param pStatement Passe por parâmentro o Objeto PreparedStatement para a execução do comando. */publicvoidExecutaSqlUpdate(PreparedStatementpStatement)throwsSQLException{try{pStatement.executeUpdate();}catch(SQLExceptionex){throwex;}finally{FechaConexao(pStatement.getConnection());pStatement.close();}}/** * Este método é responsavel p/ executar comandos que retornam registros do banco (Select). * Para outros comandos use o método "ExecutaSqlUpdate". * @param pStatement Passe por parâmentro o Objeto PreparedStatement para a execução do comando. * @return Este Método retorna um ResultSet com os registros da consulta efetuada. */publicResultSetExecutaSqlQuery(PreparedStatementpStatement)throwsSQLException{try{ResultSetresultSet=pStatement.executeQuery();returnresultSet;}catch(SQLExceptionex){throwex;}finally{//FechaConexao(pStatement.getConnection());//pStatement.close();}}}
Romarcio… Se eu colocar o caminho completo de onde esta o banco funciona perfeitamente…
Mas gostaria que o arquivo de banco de dados ficasse juntamente com o .jar…
existe alguma maneira de descobrir onde o java esta buscando o arquivo?
romarcio
Evandro Sangiovo:
existe alguma maneira de descobrir onde o java esta buscando o arquivo?
Agora vc me pegou, não sei dizer.
Para você salvar o arquivo dentro do jar, vai ter que criar uma pasta dentro do projeto, dentro do seu resource(src), mas dai não sei se vai conseguir ler o arquivo de dentro do .jar.
E outra, caso vc consiga, conforme for adicionando dados no banco, seu .jar acabaria aumentando de tamanho, é outro motivo que eu acho que acaba não sendo possivel salvar o banco dentro do jar.
romarcio
Cara, acho que quando vc não utiliza a URL com o caminho, ele procura no mesmo nível que está o arquivo .jar
Então faz um teste, tira a URL do seu código, gera o .jar novo e coloca o banco na pasta DIST, onde é gerado o . jar e ve se funciona.
pra buscar o caminho, se eu executar diretamente pelo netbeans ele retorna o diretório correto…
se eu executar pelo .jar ele me retorno o caminho “C:\Windows\System32” não sei pq…
to ficando louco já!
Abraços
sergiotaborda
Os arquivos têm que estar no seu classpath.
Quando vc roda o programa fora do netbeans vc tem que defenir esse classpath quando chama a classe main. Normalmente isso se faz com um .bat no windows ou um .sh no linux.
Procura na documentação do executor “java” para saber mais, normalmente o comando é algo assim
pra buscar o caminho, se eu executar diretamente pelo netbeans ele retorna o diretório correto…
se eu executar pelo .jar ele me retorno o caminho “C:\Windows\System32” não sei pq…
to ficando louco já!
Abraços
Isso pq no C:\Windows\System32 é onde se encontram as dll’s do ODBC, para que a conexão funcione. O netbeans faz essa conexão por trás dos panos, por isso que pela ide funciona.
Acho que vc vai ter que acabar indicando o caminho pela URL mesmo. Ou então, fazer aquela conexão que citei anteriormente, “Ferramentas Administrativas e depois em Fontes de dados (ODBC)…”, pq dai não precisa setar o caminho do banco pela URL.
E
Evandro_Sangiovo
Bom dia pessoal…
Consegui resolver meu problema, achei um método… vou postar, caso alguem mais tenha o mesmo problema.