Olá galera do GUJ tive uma idéia meio maluca para resolver meu problema. Transformei minha classe ConexaoBD em um formulário para o usuário digitar o IP do Servidor de banco de dados ao qual quer se conectar (achei interessante, pois se o cliente tiver várias filiais com seu próprio banco de dados cada, ele pode consultar cada base individualmente), e tornei-a a minha classe principal. Após o usuário digitar o IP do Servidor, até aparece a mensagem de “Conectado ao Banco de Dados!”, mas quando o método chama a tela principal, ocorre erro de conexão. Segue meu código.
import java.sql.*;
import javax.swing.JOptionPane;
/**
*
* @author RamiroPamponet
*/
public class ConexaoBD extends javax.swing.JFrame {
Principal pri;
final private String driver = "org.postgresql.Driver";
private String url = "jdbc:postgresql://localhost:5432/fisio";;
final private String usuario = "postgres";
final private String senha = "123";
Statement stm;
ResultSet rs;
private Connection con;
/**
* Creates new form Conexao
*/
public ConexaoBD() {
initComponents();
}
private void btConectarActionPerformed(java.awt.event.ActionEvent evt) {
String IP = tfIP1.getText()+"."+tfIP2.getText()+"."+tfIP3.getText()+"."+tfIP4.getText();
url = "jdbc:postgresql://" + IP + ":5432/fisio";
// Salvar essa url em um arquivo externo. A cada nova Conexão Altera o Arquivo já salvo
//JOptionPane.showMessageDialog(null, url);
conecta();
pri = new Principal();
pri.setVisible(true);
this.hide();
}
public Connection conecta() {
String IP = tfIP1.getText()+"."+tfIP2.getText()+"."+tfIP3.getText()+"."+tfIP4.getText();
url = "jdbc:postgresql://" + IP + ":5432/fisio";
try {
Class.forName(driver);
// Recuperar a url do Arquivo Salvo
con = DriverManager.getConnection(url, usuario, senha);
JOptionPane.showMessageDialog(null, "Conectado ao Banco de Dados!");
} catch (ClassNotFoundException Driver) {
JOptionPane.showMessageDialog(null, "Falha na Conexão com o Banco de Dados!");
} catch (SQLException Fonte) {
JOptionPane.showMessageDialog(null, "Erro de Conexão!");
}
return con;
}
public void desonecta() {
boolean result = true;
try {
con.close();
//JOptionPane.showMessageDialog(null, "Conexão Fechada!");
} catch (SQLException erroSQL) {
JOptionPane.showMessageDialog(null, "Não Foi Possíve Fechar o Banco de Dados!");
result = false;
}
}
public void executeSQL(String sql) {
try {
stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stm.executeQuery(sql);
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Erro ao Executar o Comando!");
ex.printStackTrace();
}
}
Tive até uma idéia e cheguei a comentar no código, sobre salvar a url, com o IP digitado pelo usuário, em um arquivo externo e depois recuperá-lo, mas não sei lidar bem com I/O (o que parece até estranho, já que não tive problemas em aprender jdbc, mas acho I/O mais complexo). Ou até mesmo, se tiver alguma forma de armazenar as variáveis IP e url de forma a ficarem disponíveis para toda a aplicação, mesmo depois da tela de Conexão ser fechada. Aguardo qualquer sugestão! Mais uma vez, Obrigado a todos!