Boa tarde, pessoal. Esse é o meu primeiro post no forum, e eu gostaria de esclarecer que já passei quase 1 semana buscando uma solução pra esse problema banal, e não consegui encontrar nada… Apenas 1 pessoa em um outro forum teve esse mesmo problema e não tinha a solução naquele post, então resolvi postar aqui o que está acontecendo.
Estou criando uma aplicação simples em JAVA que se conecta com o banco de dados Access, mas não está funcionando direito. Já tentei fazer de várias formas… Primeiro tentei fazer com o ODBC 32 bits que você abre por linha de comandos, e funcionava no Netbeans, porém construído dava problema no driver… Daí tentei instalar o driver 64 bits do Access pra ver se funcionava. Continuou funcionando no netbeans e construído dava um problema de incompatibilidade de arquiteturas entre o driver e a aplicação… E com a conexão “DSN-less” como eles chamam nem o driver é encontrado…
Aqui está o meu código da conexão. Muito Obrigado pela atenção.
[code]package utilitarios;
import java.sql.;
import javax.swing.;
public class Conexao
{
final private String driverName = “sun.jdbc.odbc.JdbcOdbcDriver”;
//final private String url = “jdbc:odbc:DietManager”;
final private String url = “jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=db/DietManager.accdb”;
final private String username = “”;
final private String password = “”;
private Connection connection;
public Statement stmt;
public ResultSet rs;
boolean result = true;
public boolean Conecta(){
result = true;
try
{
// Carregando o JDBC Driver
Class.forName(driverName);
// Criando a conexão com o Banco de Dados
connection = DriverManager.getConnection(url, username, password);
JOptionPane.showMessageDialog(null,"Conectou");
stmt = connection.createStatement();
}
catch (ClassNotFoundException sqlex) {
//Driver não encontrado
JOptionPane.showMessageDialog(null,"O driver especificado não foi encontrado." + sqlex);
result = false;
}
catch (SQLException sqlex){
//Não está conseguindo se conectar ao banco
JOptionPane.showMessageDialog(null,"Não foi possível conectar ao Banco de Dados" + sqlex);
result = false;
}
return result;
}[/code]
Não existe incompatibilidade, inclusive você pode conectar usando JDBC, o que seria mais apropriado. Procure na busca do forum sobre ‘access odbc’ ou ‘access jdbc’ que vai achar muita coisa.
Olá, bem-vindo ao fórum.
Por favor, não banalize tags informaticas escrevendo informações como [Dúvida], [Ajuda] ou [Urgente].
Use-as para falar o que não é óbvio como [Resolvido].
Desculpe pela tag. Maus hábitos de Orkut hehehe.
Acho que você não entendeu, amigo. Eu queria fazer um aplicativo que permitisse cadastrar dados e salvar em tabelas de um banco de dados, sem que precisasse de um banco de dados remoto, como MySQL, ou que precisasse configurar o DSN para utilizar (como o Access com DSN), o caso é que funciona perfeitamente no Netbeans o meu programa, porém ele CONSTRUÍDO dá esse problema…
java.sql.SQLException: [Microsoft][ODBC Driver Manager] O DSN especificado contém uma incompatibilidade de arquiteturas entre o Driver e o Aplicativo
Nesse caso, você terá muito menos estresse com o HSQLDB.
Além do fato dele não ser pago, como o access é.
Muito obrigado pela dica, ViniGodoy. Esse HSQLDB é EXATAMENTE o que eu procurava… Eu não conhecia a expressão “standalone” então não sabia como procurar. Pensei que qualquer banco de dados dava suporte a esse tipo de aplicação. Mas meu problema agora é outro…
Segui um tutorial de como usar este banco de dados, como fazer a conexão e tudo mais. Adicionei o .jar ao CLASSPATH, fiz a conexão com o banco (que foi bem sucedida), criei o banco de dados e a tabela pela interface gráfica do HSQL Database Manager e tentei inserir e pesquisar dados e tudo funciona perfeitamente. Eu consegui encontrar onde estão os 4 aquivos do banco de dados que são criados, eles estão dentro do diretório C:\Java\hsqldb\demo\ … Eu queria saber como eu coloco isso num package do meu projeto, para que ele possa estar na minha aplicação construída. Pois onde ele está quem fosse utilizar a aplicação (supondo que outra pessoa fosse), teria que possuir esses arquivos no diretório C:\Java\hsqldb\demo\ do computador delas, certo?
Novamente muito obrigado pela atenção!
Basta alterar o caminho do banco na sua conexão:
Connection c = DriverManager.getConnection(“jdbc:hsqldb:hsql://localhost/xdb”, “SA”, “”);
Quer dizer que se eu usar a URL “jdbc:hsqldb:hsql://localhost/xdb” ao invés de :file: ele irá administrar o banco internamente no projeto? eu poderei compilar a minha aplicação sem me preocupar com mais nada, nem importar mais arquivo nenhum, etc? E dessa forma ele continuaria sendo Standalone ou se tornaria Web?
Eu tentei criar um banco com esse path e mudar o getConnection para essa nova URL e não deu certo. Ao criar o banco ele dá o seguinte erro:
java.sql.SQLException: socket creation error
(consequentemente a conexão no aplicativo falha)
Eu estava lendo a documentação (de novo), e esse tipo de URL (:hsql://localhost/…) é pra quando tem um servidor, não é não?
Eu só destaquei qual trecho você deveria alterar. Aquela URL não é a certa, era só um exemplo qualquer, tirado da documentação.
Você provavelmente terá que fixar uma pasta para seu banco de dados, ou configurar o caminho dele no instalador. Um dos problemas do Java desktop, na minha opinião, é que ele não entende o conceito de “pasta onde o executável está rodando”.
Não existe maneira confiável de saber isso.
Eu geralmente faço o script do instalador gravar uma variável de ambiente com o caminho da aplicação. E leio essa variável no java, através do System.getenv(). A partir daí, é fácil montar o caminho do banco.
Agora eu entendi o que você quis dizer. Então eu terei que criar um INSTALADOR para o meu programa, que vai criar uma pasta onde ficarão armazenados os arquivos do :file:, certo? ou é preferível que eu rode no modo Servidor como você me disse?
E como eu faço um instalador pro meu aplicativo? Eu digo, compilando o meu projeto eu tenho um .JAR… como eu crio um EXE ou qualquer outro tipo de executável que, eu mandando pra alguém, a pessoa instale o programa e já configure uma pasta fixa pro banco?
PS:… Onde eu encontro um tutorial para [quote]gravar uma variável de ambiente com o caminho da aplicação[/quote] ?