Java + Linux + MS Access

Olá

Estou desenvolvendo uma aplicação em JAVA

que acessa um base em MS ACCESS

Em um computador com o SO LINUX

Estou utilizando esse código.

No Windows roda perfeitamente

No entanto quando executo no linux da o seguinte erro…

Exception in thread "main" java.lang.NullPointerException
        at sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java:436)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:153)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at servicoSetorOrdem.pegaOrdem(servicoSetorOrdem.java:47)
        at servicoSetorOrdem.main(servicoSetorOrdem.java:13)

Preciso de uma solução urgente

Obrigado

import java.sql.*;
import java.util.*;
import java.util.Date;
import java.io.*;



public class servicoSetorOrdem {
    
    public static void main(String args[]) {
        
        servicoSetorOrdem obj = new servicoSetorOrdem();
        setorOrdem ordens[] = new setorOrdem[300];
        
        System.out.println("Vai chamar o acesso ao banco");
        ordens = obj.pegaOrdem("01/01/2007", "05/01/2007");
        
        System.out.println("Int " + ordens[0].numero + " Data" + ordens[0].dataCadastro);
        System.out.println("Int " + ordens[1].numero + " Data" + ordens[1].dataCadastro);
        System.out.println("Int " + ordens[2].numero + " Data" + ordens[2].dataCadastro);
    }
    
    public setorOrdem[]  pegaOrdem(String dataInicio, String dataFim){
        
        Connection con = null;
        
        Statement stmt;
        
        
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInterfaces();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        
        try {
            
            
            
            File arquivo = new File("datsis.dat");
            
            if (arquivo.exists()) {
                System.err.print("É véio o arquivo ta la mesmo !!!! ");
            }
            
            
            con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=datasis.dat","","");
            
            stmt = con.createStatement();
            
            String contar = "SELECT count(*) FROM centcust INNER JOIN ordserv ON centcust.código = ordserv.centcust WHERE(((ordserv.[data entrega])>=[" + dataInicio + "] And(ordserv.[data entrega])<=[" + dataFim + "]))";
            
            
            ResultSet rs = stmt.executeQuery(contar);
            
            ResultSetMetaData rsmd = rs.getMetaData();
            
            rs.next();
            
            int linhas = rs.getInt(1);
            
            setorOrdem ordens[] = new setorOrdem[linhas];
            
            String query = "SELECT ordserv.número, ordserv.data, centcust.código, centcust.descrição, ordserv.[data entrega], ordserv.término FROM centcust INNER JOIN ordserv ON centcust.código = ordserv.centcust WHERE(((ordserv.[data entrega])>=[" + dataInicio + "] And(ordserv.[data entrega])<=[" + dataFim + "]))";
            
            rs = stmt.executeQuery(query);
            
            rsmd = rs.getMetaData();
            
            int i = 0;
            for(i=0; i< linhas; i++)
                ordens[i] = new setorOrdem();
            
            i = 0;
            
            while (rs.next()) {
                ordens[i].setNumero(rs.getInt(1));
                ordens[i].setDataCadastro(rs.getDate(2));
                ordens[i].setCodigoCentCust(rs.getInt(3));
                ordens[i].setDescricaoCentCust(rs.getString(4));
                ordens[i].setDataEntrega(rs.getDate(5));
                ordens[i].setDataTermino(rs.getDate(6));
                
                
                i++;
                
            }
            
            stmt.close();
            con.close();
            
            return(ordens);
            
            
            
        } catch(SQLException ex) {
            System.err.print("SQLException: ");
            System.err.println(ex.getMessage());
        }
        return(null);
    }
}

Kra, ece erro eh dificil de descobrir via forum… mas eu poderia dizer que talvez o driver do MS Access tente acessar algo específico do Windows no SO Linux e não encontre. Logo ele retorna null na conexao e a coisa toda desanda… Tem q ver se tem diferenças d configuração do MS-Access no linux e c o driver jdbc do ms access não tem alguma incompatibilidade com linux…

Meu só uma pergunta ignorante, existe MS Access no linux?

Então …

vc provavelmente é novo no desenvolvimento java…

para achar esse erro…eu sugiro que vc faça o seguinte…espalhe pela sua classe alguns System.out.println(“1”) e depois (“2”)

e veja até onde vc consegue ir sem dar erro…aí sim vc sabera onde esta dando null pointer exception…e volta aqui caso não saiba resolver…

[/]'s

[quote=Giulliano]Então …

vc provavelmente é novo no desenvolvimento java…

para achar esse erro…eu sugiro que vc faça o seguinte…espalhe pela sua classe alguns System.out.println(“1”) e depois (“2”)

[/quote]

por favor, não faz isso não, usa algum debug, o eclipse tem um excelente

cara, desculpe mas qual o motivo de vc querer usar access… pq nao usa o hsqldb??

mas se precisar realmente fazer isso, vai precisar do mdbtools para tornar o mdb accessivel no linux…

http://mdbtools.sourceforge.net/

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2251

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).getInterfaces();

Isso aqui tá certo?? não é só:

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)

Olá pessoal

O erro a sendo apresentado nessa linha.

con = DriverManager.getConnection(“jdbc:odbc: Driver={Microsoft Access Driver (*.mdb)};DBQ=datasis.dat”,"","");

Eu coloquei umas mensagens ali e ele não executa depois dessa linha…

Se puderem me ajudar ou me dizer onde encontro um driver e como utiliza-lo ficaria grato.

Obrigado

Está a usar uma ponte para o odbc, que é usado para aceder a bases de dados no windows, não existe odbc no Linux obvio, eu já vi em qualquer lado um driver que conseguía trabalhar com mdb.

Se quer um conselho, existem outras db’s melhores, se é para uso offline, também tem o SQLite, que é muito bom!

Eu também cai nessa furada. Simplesmente no windows funciona por causa do ODBC.
Acho q nesse caso a aplicação tem q “descobrir” em qual SO esta rodando e criar a conexao adequadamente (fazendo um if na hora de conectar). Ai eu me pergunto: Onde é que fica a portabilidade?