Problema na conexão do java com access

Olá Pessoal.

Estou tentando criar uma classe de conexão Java/Access, porém nao estou conseguindo gerar a conexão com o banco criado.

O exemplo esta igual ao do livro.

segue abaixo

/*Exemplo - Livro JAVA 6: ENSINO DIDÁTICO
Capítulo 13: Manipulação de Banco de Dados com Java*/

import java.sql.*;
import javax.swing.*;

public class Exemplo1301 {
    public static void main(String args[]){
        final String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        final String url = "jdbc:odbc:DRIVER={Microsoft Access Driver(*.mdb)};DBQ=c:/meubd/banco.mdb";

        try
        {
            Class.forName(driver);
            Connection connection = DriverManager.getConnection(url);
            JOptionPane.showMessageDialog(null, "Conexão realizada com sucesso");
            connection.close();

        }
        catch(ClassNotFoundException erro)
        {
            JOptionPane.showMessageDialog(null, "Driver JDBC-ODBC não encontrado!");
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Problemas na conexão com a fonte de dados" );
        }
    }
}

Se possível, conto com a ajuda de vocês do forum.

ABraÇo. =)

Cara… o que esta acontecendo ?? ele ta te retornando algum erro ?? Esta exibindo algum stack trace ??

Se sim…, posta ai pra gente…

vlws 8)

[quote=adriano_si]Cara… o que esta acontecendo ?? ele ta te retornando algum erro ?? Esta exibindo algum stack trace ??

Se sim…, posta ai pra gente…

vlws 8)[/quote]

Esta Sim cara.

No segundo Catch:

Segue:

catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Problemas na conexão com a fonte de dados" + erro);
        }

Da um erro do tipo: Nome da fonte de dados não encontrado e nenhum driver padrão especificado

Troque

         catch(SQLException erro)  
         {  
             JOptionPane.showMessageDialog(null, "Problemas na conexão com a fonte de dados" );  
         }  

por

     catch (Throwable thr) 
     {
         StringWriter sw = new StringWriter();
         PrintWriter pw = new PrintWriter (sw);
         thr.printStackTrace (pw);
         JOptionPane.showMessageDialog (null, sw.toString());
     }

e então mostre a mensagem completa.

Também estou com o mesmo problema. Não consigo conectar ao Access.

código:
public static void main(String args[])
{
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
// set this to a MS Access DB you have on your machine
String filename = “C:/Users/Adriano/Desktop/BD/testee”;
String database = “jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=”;
database+= filename.trim() + “”; // add on to the end
// now we can get the connection from the DriverManager
Connection con = DriverManager.getConnection( database ,"","");
}
catch (Throwable thr)
{
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter (sw);
thr.printStackTrace (pw);
JOptionPane.showMessageDialog (null, sw.toString());
}

} // fim da main

mensagem de erro:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Nome da fonte de dados não encontrado e nenhum driver padrão especificado
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at br.ufrj.dcc.comp2.teste.Exemplo1.main(Exemplo1.java:110)

Será que alguém sabe qual é o problema?
Obs: Estou usando um note com Windows 7 e Access 2007

[quote=Thiago de Paula Beserra]
Da um erro do tipo: Nome da fonte de dados não encontrado e nenhum driver padrão especificado[/quote]

O driver odbc do Access está instalado no sistema?
vá no Painel de Controle -> Ferramentas Administrativas -> Fontes de Dados (ODBC) e verifique entre os drivers instalados se ele está lá. Geralmente ele é instalado junto com o Office.

[quote=entanglement]Troque

         catch(SQLException erro)  
         {  
             JOptionPane.showMessageDialog(null, "Problemas na conexão com a fonte de dados" );  
         }  

por

     catch (Throwable thr) 
     {
         StringWriter sw = new StringWriter();
         PrintWriter pw = new PrintWriter (sw);
         thr.printStackTrace (pw);
         JOptionPane.showMessageDialog (null, sw.toString());
     }

e então mostre a mensagem completa.
[/quote]

Serve?

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Nome da fonte de dados n?o encontrado e nenhum driver padr?o especificado
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
        at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073)
        at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at Exemplo1301.main(Exemplo1301.java:15)

Grato Pela ajuda!

Estou com o mesmo problema que o seu, mas já vi umas soluções na internet que não funcionaram para mim, mas podem vir a funcionar para vc.
Perguntas:
Vc está usando o windows 7? Pois, pelo q eu vi, normalmente este problema ocorre em pessoas que estão usando-o.
Vc já olhou na Fonte de dados(ODBC) do painel de controle para ver se os drives estão instalados?
Se for o windows 7, não aparecerão os drives lá. Acho q o meu problema está relacionado a isso.
Mas, se executarmos o seguinte linha no prompt:
C:\Windows\SysWOW64\odbcad32.exe
Aparecerá uma tela igual, mas com os drives(pelo q entendi são drives de 32 bits e não 64).

Existe outra forma de conectar com o Access, mas seria usando uma conexão ODBC criada na Fonte de dados(ODBC).
Se vc não estiver usando o windows 7 e quiser q eu fale sobre esta outra maneira, mande outra mensagem que eu tentarei explicar.

Se alguém souber algo sobre o meu problema e puder me ajudar, eu agradeço!!!

[quote=AdrianoGomes]Estou com o mesmo problema que o seu, mas já vi umas soluções na internet que não funcionaram para mim, mas podem vir a funcionar para vc.
Perguntas:
Vc está usando o windows 7? Pois, pelo q eu vi, normalmente este problema ocorre em pessoas que estão usando-o.
Vc já olhou na Fonte de dados(ODBC) do painel de controle para ver se os drives estão instalados?
Se for o windows 7, não aparecerão os drives lá. Acho q o meu problema está relacionado a isso.
Mas, se executarmos o seguinte linha no prompt:
C:\Windows\SysWOW64\odbcad32.exe
Aparecerá uma tela igual, mas com os drives(pelo q entendi são drives de 32 bits e não 64).

Existe outra forma de conectar com o Access, mas seria usando uma conexão ODBC criada na Fonte de dados(ODBC).
Se vc não estiver usando o windows 7 e quiser q eu fale sobre esta outra maneira, mande outra mensagem que eu tentarei explicar.

Se alguém souber algo sobre o meu problema e puder me ajudar, eu agradeço!!![/quote]

Bom cara, eu estou com o XP instalado no meu notebook. Acho que nossos problemas sao parecidos, porem, diferentes. NO meu caso, aparece la no painel de controle os caras instalados na minha maquina. Sobre a outra forma de fazer a conexão com o access, estou disponivel a aprender com você. Espero que você resolva o seu problema amigo, e de imediato.

Grato ! ! !

tenta seguir este link:

Se alguém conseguiu conectar com o Access usando o windows 7, poste como fez para que eu possa
tentar resolver o meu problema.

Já tentei de tudo, mas não consigo fazer esta conexão.

Finalmente acho q descobri o meu problema.
Se alguém que esteja usando windows 7(64 bits) estiver tendo este problema, veja este link:

Thiago,
Você conseguiu resolver o seu problema?
Pois estou com um problema que talvez vc saiba como resolver(caso vc tenha conseguido acessar o access).
vlw!!!

Consegui solucionar esse problema através do link http://forum.clubedohardware.com.br/access-java-erro/794832 indicado pelo AdrianoGomes.
Ainda passei algum tempo pra resolver pq fiz com q o projeto usa-se a versão do jdk 32 bits, mas o server(Tomcat) continuava usando a versão de 64 bits.
Quando os 2 passaram a usar a mesma versão de 32 bits, o problema foi solucionado. :smiley:

Pessoal, sei que vcs já encontraram uma solução.
Lendo o site do link passado, não entendi qual foi ela, mas fica aqui uma maneira de se criar uma conexão ODBC com ACCESS com tudo via código!
Você poderá fazer uma conexão com o access da seguinte maneira:
Primeiro vc precisa verificar qual é a versao do MS Officce que está instalado no teu pc…
Vc, faz isso indo na pasta C:/Arquivos d Programas/MicrosoftOffice/
e aqui dentro verifique se há uma pasta com o nome OFFICE11 -> Esta pasta é referente ao office 2003 abaixo
Se houver uma Pasta com o Nome OFFICE12-> Esta pasta é referente ao office 2007 em diante
Se houver as duas significa que seu Office é o 2003 com Leitor de arquivos para o 2007.(Crie uma conexão para o 2003 neste caso)

 public DataSource() throws OfficeNaoInstaladoException {
        String caminho=a.getArquivoConfig().getCaminhoBanco();//Aqui eu pego o caminho do arquivo do access
        if(caminho==null || caminho.equals(""))return;
        this.DBQ = caminho;
        
         System.out.println(DBQ);
        CapturaVersaoOffice versao= new CapturaVersaoOffice();
        int t=versao.findVersion();//Este método faz o procedimento de buscar a versão do office
        if(t==-1){
            throw new OfficeNaoInstaladoException();
        }
        if(t==0)
        this.url="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+DBQ;//Esta Url é referente ao officce 2003
        if(t==1)
        this.url=  "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+DBQ ;//Esta Url é referente ao officce 2007
        usuario="";
        senha="";
    }

//E este método cria e devolve uma conexão!

 public Connection getConnection(){
        if(con==null) {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
           con = DriverManager.getConnection(url, usuario, senha);
           System.out.println("================================ Conexao ativa! ================================");
        } catch (SQLException ex) {
            Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(DataSource.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
        return con;
    }

Porém há alguns problemas na utilização do Access como DB.

Uma vez aberta uma Conexão ela não poderá ser fechada!(Semelhante ao Postgres)
Estruturação do SQL…(Aconcelho utilizarem a query do ACCESS para copiarem o código sql),
E algumas outras
Ela é um pouco complicada de se trabalhar…mas dpois que se aprende é bem legal!

ALGUÉM CONSEGUE ME AJUDA ? ESTÁ DANDO O PRIMEIRO catch (DRIVE NÃO LOCALIZADO)
utilizo windows 8.1 Microsoft acces 2010 e netbeans IDE 7.3.1

public class conexao {

final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
final private String url = "jdbc:odbc:DRIVER={Microsoft Access Driver(*.mdb)};"
        + "DBQ=c:/ESTOQUE/Banco de Dados/estoque.mdb";
final private String usuario = "";
final private String senha = "";
private Connection conexao;
public Statement statement;
public ResultSet resultset;

public boolean conecta()
{
boolean result = true;
try
{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
JOptionPane.showMessageDialog(null,“Conectou”);

   }
   catch(ClassNotFoundException Driver)
   {
       JOptionPane.showMessageDialog(null,"driver nao Localizado: "+Driver);
       result = false;
       
   } 
   catch(SQLException Fonte)
   {
       JOptionPane.showMessageDialog(null,"Deu erro na conexão"+
               "com a fonte de dados"+Fonte);
        result = false;
   }
   return result;

}

public void desconecta()
{
boolean result = true ;
try
{
conexao.close();
JOptionPane.showMessageDialog(null,“banco fechado”);
}
catch(SQLException erroSQL)
{
JOptionPane.showMessageDialog(null,“não foi possivel” +
" fechar o banco de dados:"+erroSQL.getMessage());
result = false;
}
}

public void executeSQL(String sql)
{
try
{
statement = conexao.createStatement();
resultset = statement.executeQuery(sql);
}
catch(SQLException sqlex)
{
JOptionPane.showMessageDialog(null,“não foi possivel”+
“executar o Comando SQL”+sqlex+", o SQL passado foi"+sql );
}
}
}

Olá amigos,

Também tenho uma dúvida, fiz uma conexão com o access, descrita abaixo:
Autor: Luciano Rocha
/
package ConexaoBanco;
import java.sql.
;
import javax.swing.*;

public class ConexaoAccess
{
public static void main (String args [])
{
String driver = “sun.jdbc.odbc.JdbcOdbcDriver”;
String url = “jdbc:odbc:agendatelefonica”;
String usuario = “”;
String senha = “”;
Connection conexao;
Statement statement;
ResultSet resultset;

    try
    {
        Class.forName(driver);
        conexao = DriverManager.getConnection(url,usuario,senha);
        JOptionPane.showMessageDialog(null,"Conectou legal com o banco");
    }
    catch (ClassNotFoundException Driver)
    {
        JOptionPane.showMessageDialog(null,"Drive não localizado" + Driver);
    }
    catch (SQLException Fonte)
    {
        JOptionPane.showMessageDialog(null,"Deu erro na conexão com a fonte de dados" + Fonte);
    }
}

}

O que sempre ocorre é um erro no Driver, com a mensagem descrita no ClassNotFoundException. É como se a API não tivesse o JDBC ODBC instalado, mas já li que ele vem padrão.
Me ajudem por favor…

A partir do Java 8 não da mais pra usar esse Driver (“sun.jdbc.odbc.JdbcOdbcDriver”)… Você deve usar o UCanAccess, segue um exemplo de código:

package BD;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author AFS3
 */
public class Connect {
    Connection con;
    Statement stm;
    
    public void connect(){
        try{
            con = DriverManager.getConnection("jdbc:ucanaccess://"+ [[Caminho até o banco de dados (com  a extesão)]]);
            System.out.println("Foi meu chapa");
        }catch(Exception e){
            System.out.println("Erro ao conectar: " + e.getMessage());
        }
    }

Você deve adicionar a sua biblioteca os arquivos:
ucanaccess-3.0.7.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
hsqldb.jar
jackcess-2.1.3.jar

(Aqui um vídeo de como se adiciona a biblioteca)