Problema em fazer multiplas conexões na mesma tabela

6 respostas
L

Boa noite a todos, meu problema é o seguinte:

Tenho uma tabela onde quero fazer multiplas consultas nela, através dos programas clientes.
Mas antes disso estou tentando fazer dois jFrame abrirem uma conexão cada um com uma mesma tabela. Porém quando abro o 1º jFrame beleza, ele mostra tudo, mas quando quero abrir o 2º ai ja trava tudo (ou vice-versa).

Pior que criei um Connection/Statement/ResultSet para cada jFrame, porém não consigo fazer 2 conexões na mesma tabela. Se for conexões em tabelas diferentes vai de boa.
Obs: estou usando o Apache Derby Network

Se possivel mostrar algum exemplo de como se faz multiplas conexões ao mesmo tempo em uma tabela só, agradeço desde já. ^^

6 Respostas

drsmachado

Por que não um DAO e um ConnectionFactory?

L

Não sei xD
Teria como me explicar como funcionam?

esmiralha

Posta o código.

LeandroDM:
Boa noite a todos, meu problema é o seguinte:

Tenho uma tabela onde quero fazer multiplas consultas nela, através dos programas clientes.
Mas antes disso estou tentando fazer dois jFrame abrirem uma conexão cada um com uma mesma tabela. Porém quando abro o 1º jFrame beleza, ele mostra tudo, mas quando quero abrir o 2º ai ja trava tudo (ou vice-versa).

Pior que criei um Connection/Statement/ResultSet para cada jFrame, porém não consigo fazer 2 conexões na mesma tabela. Se for conexões em tabelas diferentes vai de boa.
Obs: estou usando o Apache Derby Network

Se possivel mostrar algum exemplo de como se faz multiplas conexões ao mesmo tempo em uma tabela só, agradeço desde já. ^^

L

Esse é a classe que fiz que eu acho que posso chamar de DAO pelo que vi na internet, onde uso para chamar conexão e o statement.

package conection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;

/**
 *
 * @author LeandroDM
 */

public class DataBaseConfig {

    Connection conn;
    Statement stmt;
    String mydatabase;

   public Connection getConn() {
        try {
            //Captura em qual Sistema Operacional esta sendo executado.
            String OS = System.getProperty("os.name").toLowerCase();
            //#########################################################
            if(OS.contains("windows")){
                mydatabase = "C:/derby/databases/ssdb";
            }else if(OS.contains("linux")){
                mydatabase = "/derby/databases/ssdb";
            }
            //DB Derby Networked.
            String database = "derby";          
            String ip = "localhost";
            String port = "1527";
            String username = "admin";
            String password = "admin";
            String url = "jdbc:" + database + "://" + ip + ":" + port + "/" + mydatabase; // a JDBC url
            //
            
            Class.forName("org.apache.derby.jdbc.ClientDriver");           
            conn = DriverManager.getConnection(url, username, password);

        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
        }catch (ClassNotFoundException ex) {
                Logger.getLogger(DataBaseConfig.class.getName()).log(Level.SEVERE, null, ex);
            }
        return conn;
    }

    public Statement getStmt() {
        try {
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
        }
        return stmt;
    }


}

Agora um exemplo de consulta que faço:

Botão onde faço consulta na tabla Produtos

public class GrupoProd extends javax.swing.JInternalFrame {

    private TelaPrincipal frmTelaPrincipal;
    DataBaseConfig dbconfig = new DataBaseConfig();
//Para consulta da tabela GRUPO_PROD    
Connection conn = dbconfig.getConn();
    Statement stmt = dbconfig.getStmt();
    ResultSet rs;
//
//Para consulta da tabela PRODUTOS
    Connection connProd = dbconfig.getConn();
     Statement stmtProd = dbconfig.getStmt();
 ResultSet rsProd;
//
    String GCod;
    String GNome;
    Short GPorcent;
    int i = 0;
    int update = 0;
    String CodProd;
    String grupo;
    String subgrupo;
    String item;

 public GrupoProd(TelaPrincipal frmTelaPrincipal) {
        initComponents();
        desabilitarTF();
        DocumentFilters();
        iniB();
        this.frmTelaPrincipal = frmTelaPrincipal;
        atualizar();
        logicControl();
    }
    .
    .
    .    



 private void jButtonSubstActionPerformed(java.awt.event.ActionEvent evt) {
        try {

            rsProd = stmtProd.executeQuery("SELECT * FROM PRODUTOS");//Tabela Produtos
            while (rsProd.next()) {
                CodProd = rsProd.getString("COD_PRODUTO");
                grupo = CodProd.substring(0, 3);
                subgrupo = CodProd.substring(3, 6);
                item = CodProd.substring(6, 10);
                if (GCod.equals(grupo)) {
                    float CustUni = rsProd.getFloat("VALOR_CUSTO");
                    int Qtd = rsProd.getInt("QTD");
                    float ValVend = CustUni + ((CustUni * GPorcent) / 100);
                    float ValTotEst = CustUni * Qtd;
                    rsProd.updateShort("LUCRO", GPorcent);
                    rsProd.updateFloat("VALOR_VENDA", ValVend);
                    rsProd.updateFloat("VALOR_TOT_EST", ValTotEst);
                    rsProd.updateRow();
                }
            }
            rsProd.close();

        } catch (SQLException ex) {
            Logger.getLogger(GrupoProd.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

Tenho outro jInternalFrame que se conecta a mesma tabela que segue o mesmo estilo desse.
Porém enquano um estiver aberto e eu tentar fazer um rsProd = stmtProd.executeQuery(“SELECT * FROM PRODUTOS”); , awe que trava tudo.
Se eu esperar por um bom tempo, aparece os seguintes erros:

java.sql.SQLTransactionRollbackException: Não foi possível obter o bloqueio dentro do tempo requerido.
e
java.sql.SQLException: O ResultSet não está aberto. Verifique se a auto-efetivação está desabilitada.

L

Alguem tem alguma ideia do problema?

L

Estou pesquisando sobre esse sistema, parece bem organizado e muito interessante.
Ache esse link que postaram aqui no Fórum: http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html

Vou estuda-lo, mas se alguém poder me ajudar a achar o problema no meu código, se faltou algo ou se fiz algo de errado agradeço desde já.

Criado 30 de novembro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 6
Participantes 3