Chamar Classe de conexão

12 respostas
T
Olá pessoal, eu criei uma classe de conexao:
import java.sql.*;
import javax.swing.*;

public class Conexao {
    
    public static void Conectar(){
        String url = "jdbc:postgresql://localhost:5432/ESTUDO";
        String usuario = "postgres";
        String senha = "root";
        try{
                Class.forName("org.postgresql.Driver");
        Connection con;
            con = DriverManager.getConnection(url, usuario, senha);

        }
        catch(Exception e){
        JOptionPane.showMessageDialog(null, e, "ERRO", JOptionPane.ERROR_MESSAGE);
        }
}
}
Aí, em outra classe eu tenho uma chamada para fazer um select, então, como eu faço para que eu possa passar os dados de conexão para a outra classe sem que tenha que escrever novamente toda a conexão,gostaria de chamar no clique de um JButton?
private void btnCadastroActionPerformed(java.awt.event.ActionEvent evt) {
            // TODO add your handling code here:
            if(btnCadastro.getText().equals("Novo")){
            btnCadastro.setText("Salvar");
            txtCodigo.requestFocus();
            try{
            Conexao.Conectar();

            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("Select CodCliente, NomeCliente, Endereco from Cliente");
            JOptionPane.showMessageDialog(null, "Conectado", "INFORMAÇÃO", JOptionPane.INFORMATION_MESSAGE);
             }
            catch(Exception e){
                JOptionPane.showMessageDialog(null, e, "ERRO", JOptionPane.ERROR_MESSAGE);
            }
        }
        else{
            btnCadastro.setText("Novo");
        }
    }
O que eu teria que modificar no código do botão para que chame os dados de conexão da classe Conexao ?

12 Respostas

romarcio

Para não refazer, vc precisa retornar uma conexão

public class Conexao {

	public Connection getConnection() {
        String url = "jdbc:postgresql://localhost:5432/ESTUDO";  
        String usuario = "postgres";  
        String senha = "root"; 
		Connection result = null;
		try {
			Class.forName("org.postgresql.Driver");
			result = DriverManager.getConnection(url, usuario, senha);
			return result;                        
        }  
        catch(Exception e){  
			JOptionPane.showMessageDialog(null, e, "ERRO", JOptionPane.ERROR_MESSAGE);  
        }
		return result;
	}
}

Dai na classe que vai fazer uso da conexão, pode fazer assim:

...
	private Connection con;
        
	public Dao() {
		this.con = new Conexao().getConnection();
	}

Dai quando fizer Statement st = con.createStatement(); já vai ter a conexão.

T

Deu certo romarcio, exatamente o que eu precisava, obrigado!!!

somente a parte que tem:

public Dao(){ this.con = new Conexao().getConnection(); }

Não rodou, apresenta o erro “return type required”.
Aí eu coloquei dentro do código do botão a chamada ao getConnection e funcionou, isso vai interferir no funcionamento futuro do meu projeto?

romarcio

taraciuk:
Deu certo romarcio, exatamente o que eu precisava, obrigado!!!

somente a parte que tem:

public Dao(){ this.con = new Conexao().getConnection(); }

Não rodou, apresenta o erro “return type required”.
Aí eu coloquei dentro do código do botão a chamada ao getConnection e funcionou, isso vai interferir no funcionamento futuro do meu projeto?

Isso seria o construtor da classe que vc está fazendo os métodos com o SQL.
Substitua o Dao() pelo nome da sua classe(Não sabia qual era), coloquei Dao só como exemplo.
Vc utilizando no construtor da classe, sempre que fizer uma instancia da classe o con vai receber com a conexão.

A

Olá romarcio

Lendo esse post… vi esse forma de retornar a conexão

Eu estou querendo o seguinte… deixar a conexão sempre aberta porque estou desenvolvendo para desktop e não vejo necessidade de ficar abrindo e fechando a conexão.

Queria saber se dessa forma que você fez é desse jeito.

Eu pensei em fazer a conexão no primeiro form que abre e passar a conexão aberta para outros forms.

Você saberia como fazer?

romarcio

Dai você pode alterar o exemplo que postei antes para algo como este:

public class Conexao {
    public static Connection connection;

	static {
        String url = "jdbc:postgresql://localhost:5432/ESTUDO";  
        String usuario = "postgres";  
        String senha = "root"; 
		try {
			Class.forName("org.postgresql.Driver");
			connection = DriverManager.getConnection(url, usuario, senha);
        }  catch(Exception e) {  
			JOptionPane.showMessageDialog(null, e, "ERRO", JOptionPane.ERROR_MESSAGE);  
        }
	}
}

Na sua classe de Dao Generico pode fazer assim:

...
	public static Connection con = Conexao.connection;
        
	public Dao() {
	}

Dai vai ter uma conexão sempre aberta em “con”.

A

Olá romarcio,

Fiz do jeito que você falou e agora esta acontecendo esse erro logo abaixo:

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

E o problema é que desfiz e voltei como estava fazendo antes e o erro continua. O interessante que antes não estava acontecendo o erro.

O que pode ser isso?

A

romarcio

Identifiquei o erro… só acontece nos form que tem o componente JTable.

Eu marquei a propriedade autoCreateRowSorter do JTable ficou dando esse erro ai… por acaso desmarquei e voltou a funcionar…

Só que eu preciso colocar esse recurso para o usuário clicar na coluna e poder order pela mesma.

Como posso fazer agora?

romarcio

Esse problema não tem haver com a conexão.
Parece ser problema na implementação da sua tabela.

Dai para ajudar teria que ver melhor como você desenvolveu essa parte da tabela.

A

Depois entendi que não era a conexão… mais só percebi depois que alterei a conexão.

Eu estou carregando o JTable assim:

public void fnCarregaGrid(String[] vCol, Vector rData) throws SQLException, ParseException {

//URL situacao = null;

//URL editar = this.getClass().getResource("/sistema/imagens/table_edit24.png");

//URL excluir = this.getClass().getResource("/sistema/imagens/table_delete24.png");
//Defini as colunas

//final String[] colunas = {“id”, “Código”, “Descrição”};

final String[] colunas = vCol;

final Vector rowDatas = new Vector();
rowDatas.addAll(rData);

TableModel dataModel = new AbstractTableModel() {

public int getColumnCount() {

//return data[0].length;

return colunas.length;

}
public int getRowCount() {

//return data.length;

return rowDatas.size();

}
public Object getValueAt(int row, int col) {

//return data[row][col];

return ((Vector) rowDatas.elementAt(row)).elementAt(col);

}
public String getColumnName(int column) {

//return “” + column;

return colunas[column];

}
public Class getColumnClass(int c) {

return getValueAt(0, c).getClass();

}
public boolean isCellEditable(int row, int col) {

//return col != 2; //Escolha a coluna que não vai ser editável

return false; //Bloquea todas as colunas

}
public void setValueAt(Object aValue, int row, int column) {

//data[row][column] = aValue;

((Vector) rowDatas.elementAt(row)).setElementAt(aValue, column);

}

};

tabLista.setModel(dataModel);
tabLista.setRowHeight(20);

tabLista.getColumnModel().getColumn(0).setMinWidth(0);

tabLista.getColumnModel().getColumn(0).setMaxWidth(0);

tabLista.getColumnModel().getColumn(1).setPreferredWidth(70);

tabLista.getColumnModel().getColumn(2).setPreferredWidth(480);

tabLista.getColumnModel().getColumn(3).setPreferredWidth(80);

tabLista.getColumnModel().getColumn(4).setPreferredWidth(50);

}//fim do carrega grid

romarcio

Cria um novo post sobre essa sua dúvida com a tabela.

Nelsonjahn

dificil entender esse código sem as tags cod.

Nelsonjahn

alexpassos:
Depois entendi que não era a conexão… mais só percebi depois que alterei a conexão.

Eu estou carregando o JTable assim:

public void fnCarregaGrid(String[] vCol, Vector rData) throws SQLException, ParseException { 


//URL situacao = null; 
//URL editar = this.getClass().getResource("/sistema/imagens/table_edit24.png"); 
//URL excluir = this.getClass().getResource("/sistema/imagens/table_delete24.png"); 

//Defini as colunas 
//final String[] colunas = {"id", "Código", "Descrição"}; 
final String[] colunas = vCol; 

final Vector rowDatas = new Vector(); 
rowDatas.addAll(rData); 

TableModel dataModel = new AbstractTableModel() { 

public int getColumnCount() { 
//return data[0].length; 
return colunas.length; 
} 

public int getRowCount() { 
//return data.length; 
return rowDatas.size(); 
} 

public Object getValueAt(int row, int col) { 
//return data[row][col]; 
return ((Vector) rowDatas.elementAt(row)).elementAt(col); 
} 

public String getColumnName(int column) { 
//return "" + column; 
return colunas[column]; 
} 

public Class getColumnClass(int c) { 
return getValueAt(0, c).getClass(); 
} 

public boolean isCellEditable(int row, int col) { 
//return col != 2; //Escolha a coluna que não vai ser editável 
return false; //Bloquea todas as colunas 
} 

public void setValueAt(Object aValue, int row, int column) { 
//data[row][column] = aValue; 
((Vector) rowDatas.elementAt(row)).setElementAt(aValue, column); 
} 
}; 

tabLista.setModel(dataModel); 
tabLista.setRowHeight(20); 

tabLista.getColumnModel().getColumn(0).setMinWidth(0); 
tabLista.getColumnModel().getColumn(0).setMaxWidth(0); 
tabLista.getColumnModel().getColumn(1).setPreferredWidth(70); 
tabLista.getColumnModel().getColumn(2).setPreferredWidth(480); 
tabLista.getColumnModel().getColumn(3).setPreferredWidth(80); 
tabLista.getColumnModel().getColumn(4).setPreferredWidth(50); 


}//fim do carrega grid

Criado 10 de janeiro de 2011
Ultima resposta 24 de mar. de 2013
Respostas 12
Participantes 4