Conexão Derby

Bom dia Pessoal,

Desenvolvi uma aplicação que recupera a chave de acesso de uma nota fiscal eletrônica apartir do banco de dados do Emissor da Secretaria da Fazenda( Banco Apache Derby). Tive que densenvolver essa aplicação pois a empresa onde trabalho ainda não possui seu próprio emissor, e necessitados da chave de acesso da nfe para posteriores operações no nosso ERP.
Bem a aplicação funciona bem, mas quando tento executar o Emissor o mesmo da erro na conexão com o banco, isso porque a minha aplicação acessa o mesmo banco. Recebo uma mensagem dizendo que existe outra instância do Derby inicializado, mas estou dando um “close” na conexão na minha aplicação. O Emissor só funciona quando finalizado minha aplicação.

Alguém teria uma idéia de como contornar esse problema?

Grato.

Vc teve estar utilizando uma conexao embarcada so aceita um conexao.

Muda para client

Algo do tipo


org.apache.derby.jdbc.ClientDriver

jdbc:derby://localhost:1527/SeuBanco;create=false

Espero ter ajudado…

Realmente estava usando o driver embarcado… mas ainda não consigo executar as duas aplicações juntas.

É provavel que o Emissor utilize o driver embarcado.

Alguém mais se arrisca?

Valeu

[quote=nandobgi]Bom dia Pessoal,

Desenvolvi uma aplicação que recupera a chave de acesso de uma nota fiscal eletrônica apartir do banco de dados do Emissor da Secretaria da Fazenda( Banco Apache Derby). Tive que densenvolver essa aplicação pois a empresa onde trabalho ainda não possui seu próprio emissor, e necessitados da chave de acesso da nfe para posteriores operações no nosso ERP.
Bem a aplicação funciona bem, mas quando tento executar o Emissor o mesmo da erro na conexão com o banco, isso porque a minha aplicação acessa o mesmo banco. Recebo uma mensagem dizendo que existe outra instância do Derby inicializado, mas estou dando um “close” na conexão na minha aplicação. O Emissor só funciona quando finalizado minha aplicação.

Alguém teria uma idéia de como contornar esse problema?

Grato.[/quote]
Estou precisando fazer exatamente a mesma coisa que você fez, só que no meu caso preciso pegar os dados do Protocolo (por alguma razão estúpida um dos tokens A3 que tenho - são duas empresas - não funciona no meu ERP).

Poderia me dar alguma dica de como fez esse acesso ao banco de dados do Emissor?

cara achu que é mais ou - assim ve se é isso que vc quer !!!

[code]#########################################################

Arquivo de propriedade para conexao com database

$Id: database.properties, v 1.0 2007/07/10 3:45:33 PM

#########################################################

##Configuracao Server - Acesso multiplo na base
#driver:org.apache.derby.jdbc.ClientDriver
#url:jdbc:derby://localhost:1527/seubanco;create=true

##Configuracao local - Acesso unico
driver = org.apache.derby.jdbc.EmbeddedDriver
url = jdbc:derby:seubanco;create=false

Configuracao para acesso remoto (permite mais que uma conexao por usuario)

driver = org.apache.derby.jdbc.ClientDriver
url = jdbc:derby://localhost:1527/seubanco;create=false[/code]

E ai Javer?

Se precisar de dicas de como acessar e recuperar informações é só falar.

[ ] 's

Eu até consegui a conexão, o problema agora é que não consigo dar um select na tabela, retorna tudo null.

Como faço para ver o nome de todas as colunas em cada tabela.

Como o DatabaseMetaData eu consegui ver os nomes das tabelas.

[code]List of tables:
Esquema…: NFE
Nome…: CANCELAMENTO

Esquema…: NFE
Nome…: CERTIFICADO_INFO

Esquema…: NFE
Nome…: CLIENTE

Esquema…: NFE
Nome…: CONTROLE_VERSAO

Esquema…: NFE
Nome…: EMITENTE

Esquema…: NFE
Nome…: GENERATOR

Esquema…: NFE
Nome…: ICMS

Esquema…: NFE
Nome…: INUTILIZACAO

Esquema…: NFE
Nome…: IPI

Esquema…: NFE
Nome…: LOTE

Esquema…: NFE
Nome…: NOTA_FISCAL

Esquema…: NFE
Nome…: NUMERACAO

Esquema…: NFE
Nome…: PARAMETROS

Esquema…: NFE
Nome…: PESQUISA

Esquema…: NFE
Nome…: PRODUTO

Esquema…: NFE
Nome…: PROPRIEDADE

Esquema…: NFE
Nome…: TRANSPORTADORA
-------------------------------------------[/code]

Código:

[code]import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class DerbyTest {

private Connection connection = null;
private Statement statement = null;
private ResultSet resultSet = null;

public DerbyTest() throws Exception {
    try {

        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        connection = DriverManager.getConnection("jdbc:derby://localhost/C:/database/NFE2_Teste");

        DatabaseMetaData meta = connection.getMetaData();
        ResultSet res = meta.getTables(null, null, null,new String[]{"TABLE"});
        System.out.println("List of tables: ");
        while (res.next()) {
            System.out.println(" Esquema....: "+res.getString("TABLE_SCHEM"));
            System.out.println(" Nome.......: "+res.getString("TABLE_NAME"));
            //System.out.println(" Tipo.......: "+res.getString("TABLE_TYPE"));
            System.out.println("-------------------------------------------");
        }

        PreparedStatement statement = connection.prepareStatement("SELECT * from NFE.NOTA_FISCAL");

        resultSet = statement.executeQuery();
        while (resultSet.next()) {
            String user = resultSet.getString("DATA_PROTOCOLO"); // retorna null
            String number = resultSet.getString("NUMERO_PROTOCOLO"); // retorna null
            System.out.println("DATA PROTOCOLO: " + user);
            System.out.println("NUMERO PROTOCOLO: " + number);
        }
    } catch (Exception e) {
        throw e;
    } finally {
        close();
    }

}

private void close() {
    try {
        if (resultSet != null) {
            resultSet.close();
        }
        if (statement != null) {
            statement.close();
        }
        if (connection != null) {
            connection.close();
        }
    } catch (Exception e) {
    }
}

public static void main(String[] args) throws Exception {
    DerbyTest dao = new DerbyTest();
}

}[/code]O retorno não pode ser null porque tem vários notas com protocolo

Como posso visualizar a estrutura, digamos, da tabela NOTA_FISCAL?

Javer, baixe o derby e utilize seu utilitário para conectar no banco, depois é só usar os comandos básicos de banco, show tables, etc?

O Nome da tabela das notas chama-se NFE.VW_NOTA.

Valeu.

Vou explicar melhor, no meu cliente ele está usando o Emissor do SEFAZ para enviar algumas notas (as quais são importadas, via XML, do meu sistema), eu preciso que meu sistema acesse o Derby do Emissor e recupere algumas informações para atualizar o cadastro.

Tenho que instalar o Derby no meu cliente?
Quero penas colocar o derbyclient.jar no CP do meu sistema.

Preciso apenas conectar e fazer um select, mas pra isso preciso ver toda a estrutura da tabela NOTA_FISCAL, é provável que tudo que preciso esteja nela.

Que estranho, na minha máquina (Emissor de Teste) consigo acessar normalmente.

Agora quando é feito a conexão pelo sistema no cliente (que roda em JWS) ele não está fazendo a conexão, dá a seguinte Exception:

org.apache.derby.client.am.DisconnectException: java.net.ConnectException : Error opening socket to server localhost on port 1527 with message : Connection refused: connect at org.apache.derby.client.net.NetAgent.<init>(Unknown Source) at org.apache.derby.client.net.NetConnection.newAgent_(Unknown Source) at org.apache.derby.client.am.Connection.<init>(Unknown Source) at org.apache.derby.client.net.NetConnection.<init>(Unknown Source) at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at emissor.lib.AcessarEmissor.<init>(AcessarEmissor.java:30) at emissor.ui.NotasFiscaisUI.iniciarUI(NotasFiscaisUI.java:138) at emissor.ui.NotasFiscaisUI.formComponentShown(NotasFiscaisUI.java:911) at emissor.ui.NotasFiscaisUI.access$600(NotasFiscaisUI.java:88) at emissor.ui.NotasFiscaisUI$11.componentShown(NotasFiscaisUI.java:621) at java.awt.AWTEventMulticaster.componentShown(Unknown Source) at java.awt.AWTEventMulticaster.componentShown(Unknown Source) at java.awt.Component.processComponentEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
Como faço para solucionar esse problema?

Fiz o mesmo processo usando o sistema via JWS no meu computador (instalado do servidor igual acontece no cliente) e fez o acesso normal ao Derby do Emissor da nota fiscal eletrônica, só que no meu caso é o Emissor de Teste.

No meu cliente está o Emissor de Produção, será no banco de dados Derby deles tem senha?

Estou pegando a conexão assim:

public AcessarEmissor() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException { Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance(); if (Global.debug) { connection = DriverManager.getConnection("jdbc:derby://localhost/C:/database/NFE2_Teste"); } else { connection = DriverManager.getConnection("jdbc:derby://localhost/C:/database/NFE2"); // no Cliente da erro aqui } }

O silêncio é tão grande por aqui que eu continuo respondendo pra mim mesmo.

Descobri o problema, o Emissor do SEFAZ deve estar ABERTO quando é feita a conexão - parece que ele mesmo inicializa o Derby.