Conexão Derby

11 respostas
N

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.

11 Respostas

C

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…

N

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

J

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.


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?

L

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

#########################################################
# 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
N

E ai Javer?

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

[ ] 's

J

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.
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
-------------------------------------------
Código:
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();
    }
}
O retorno não pode ser null porque tem vários notas com protocolo

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

N

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.

J

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.

J

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?

J

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 } }

J

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.

Criado 3 de abril de 2008
Ultima resposta 8 de out. de 2010
Respostas 11
Participantes 4