Pergunta

Estou lidando com um problema que surgiu para um aplicativo em que tenho trabalhado que se conecta a um arquivo de acesso via JDBC-ODBC. Em outras plataformas do Windows, esse problema não foi encontrado, mas nas caixas do Windows 7 de 64 bits, tentando se conectar com strings de conexão sem DSN Return:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

Variações múltiplas na sequência foram tentadas, mas todas elas retornaram o mesmo erro. Veja como atualmente tenta se conectar:

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  StringBuffer databaseConnectionString;

  if (SystemUtils.IS_OS_WINDOWS_7) {
       databaseConnectionString = new StringBuffer("jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=");
       databaseConnectionString.append(databaseFile);

  } else {
       databaseConnectionString = new StringBuffer("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=");
       databaseConnectionString.append(databaseFile);
       databaseConnectionString.append(";DriverID=22;READONLY=false}");
  }

Examinar o driver no administrador da fonte de dados ODBC de 32 bits confirma que os drivers estão presentes. No entanto, quando o Regedt32.exe é usado para examinar os drivers ODBC (HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI/ODBC Drivers), nenhum deles aparece.

Alguém pode ajudar a esclarecer isso?

Foi útil?

Solução

Descobri que o problema era que eu estava executando o programa em Java de 64 bits. Embora eu ainda precise ter com êxito o programa Detect se ele estiver em execução em Java de 32 ou 64 bits, resolvi a solução instalando um ambiente de tempo de execução Java de 32 bits e usando um arquivo .bat que lê da seguinte maneira:

@echo off

"C:\Program Files (x86)\Java\jre6\bin\java" -D32 -Xmx1024m -jar programName.jar

Obrigado pela ajuda!

Outras dicas

Este foi um desafio difícil, dada a escassez de mensagens de erro significativas do driver Java ou do MS ODBC. As respostas acima sobre a seleção de drivers Java e MS Access (usando o AccessDatabaseEngine.exe da MS) funcionaram, mas custaram uma penalidade significativa (cerca de 30%) no processamento de outras ações em comparação com o uso de Java de 64 bits. Eu não estava disposto a pagar esse preço, então instalei Java de 64 bits (em conjunto com 32 bits, ambos em um diretório separado C: java 32 ou 64). Esse último problema de diretório foi importante para mim, pois eu estava usando o Apache Geronimo e não começaria se o Java fosse instalado nos arquivos de programas (x86) ... como o (x86) pareceu matar sua análise de arquivos em lote. Em seguida, desinstalei o acesso de 32 bits MS e instalei o Access de 64 bits (AccessDatabaseengine_x64.exe). Finalmente, funcionou com maior velocidade e conexão MDB.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top