Você pode manipular dados de qualquer banco de dados que possua um driver suportado pelo JDBC, um sistema de grande porte geralmente utiliza mais de um banco de dados, esta opção torna seu produto mais competitivo no mercado pois pode suportar varias especificações técnicas de hardware e software, assim obtendo vantagem no preço final de sua implementação.
O Java Swing foi criados para suportar o modelo de programação MVC, utilizando modelos e visões combinando o controle com os eventos listner de seus componentes, que a grosso modo funciona assim:
A visão se registra como um ouvinte do modelo. Quaisquer alterações nos dados subjacentes do modelo resultará imediatamente em uma notificação de alteração de transmissão, que a visão recebe.
O programa neste post não possui a estrutura MVC, nem qualquer outro tipo de estrutura é composto propositalmente de apenas uma classe que conecta em 3 bancos de dados diferentes e utiliza um modelo default para retornar a mesma visão para qualquer uma das conexões.
Default Table Model
É uma implementação do TableModel que usa vetores para armazenar os objetos de valor de célula. Apesar deste modelo ser fácil de usar é necessário que você crie seus próprios modelos, este tipo de modelo possui varias restrições e necessita que você crie alguns métodos override para manipula-lo corretamente. Quando o DefaultTableModel for usado com um TableRowSorter resultará em um uso extensivo de toString, e para os tipos de dados não string o custo será alto demais. A Oracle avisa que os objetos serializados desta classe não será compatível com os futuros lançamentos do Swing.
Conectando ao Oracle, IBM DB2 e Microsoft SQL Server a partir da mesma Aplicação:
Para efetuar as conexão com os diferentes bancos de dados você precisa primeiro configurar seu projeto com os drivers JDBC necessários, use a figura abaixo para referencia:
Conectando ao Oracle:
Conectando ao IBM DB2:
Conectando ao Microsoft SQL Server:
Exemplo:
Neste exemplo criamos três conexões diferentes e retornamos dados da mesma tabela de 3 bancos de dados diferentes, utilizando o mesmo modelo e a mesma visão. Este exemplo deve ser modificado para poder ser usado em uma aplicação real. Você deve fazer varias modificação neste programa e criar as parametrizações necessárias, você também deve separar esta classe em varias outras classes e deve criar sua própria classe para o modelo de tabela ao invés de usar o DefaultTableModel. Este exemplo apesar de não poder ser usado em uma aplicação real ainda sim é um ótimo rascunho inicial.
Java
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Acesso implements ActionListener, ItemListener {
// Cria componentes
private JTable tabela;
private JRadioButton banco1;
private JRadioButton banco2;
private JRadioButton banco3;
private JButton botao;
// Declara objetos de conexão
private static Connection conn;
private static Statement query;
private static String bancodedados;
public void conectar(String login, String senha) {
// Verifica strings de conexão
// ORACLE
if (bancodedados == "oracle") {
try {
// Define Driver de conexão JDBC thin
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", login, senha);
// Executa pedido SQL
query = conn.createStatement();
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
// DB2
if (bancodedados == "db2") {
try {
// Define Driver de conexão JDBC
Class.forName("com.ibm.db2.jcc.DB2Driver");
conn = DriverManager.getConnection(
"jdbc:derby:net://localhost:50000/deva", login, senha);
// Executa pedido SQL
query = conn.createStatement();
// JOptionPane.showMessageDialog(menssagem,
// "Conexão Efetuada com sucesso!");
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
catch (SQLException ex) {
// JOptionPane.showMessageDialog(menssagem, "Erro na conexão!");
ex.printStackTrace();
}
}
// MICROSOFT SQL SERVER
if (bancodedados == "mssql") {
try {
// Define Driver de conexão JDBC
String URL = "jdbc:sqlserver://localhost\\SQLEXPRESS:1433;databaseName=devaberto"
+ ";user=" + login + ";password=" + senha;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(URL);
// Executa pedido SQL
query = conn.createStatement();
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
}
public ResultSet retornaTabela() throws SQLException {
// Cria uma nova conexão
Statement query;
query = conn.createStatement();
String sql;
// Verfica banco de dados e passa script SQL
if (bancodedados == "db2") {
sql = "Select * from DA.\"Blog\"";
} else {
sql = "Select * from blog";
}
// Executa Script
ResultSet dados = query.executeQuery(sql);
// Retorna set de dados
return dados;
}
// Modelo
public static DefaultTableModel criaTableModel(ResultSet rs)
throws SQLException {
// Cria um modelo de tabela
ResultSetMetaData metaData = rs.getMetaData();
// Retorna as colunas
Vector<String> colunas = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
colunas.add(metaData.getColumnName(column));
}
// Retorna dados
Vector<Vector<Object>> dados = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
dados.add(vector);
}
return new DefaultTableModel(dados, colunas);
}
public void itemStateChanged(ItemEvent arg0) {
// Verifica item banco de dados selecionado
Object fonte = arg0.getItemSelectable();
int estado = arg0.getStateChange();
if (estado == arg0.SELECTED) {
if (fonte == banco1) {
bancodedados = "oracle";
}
if (fonte == banco2) {
bancodedados = "db2";
}
if (fonte == banco3) {
bancodedados = "mssql";
}
}
}
public void actionPerformed(ActionEvent arg0) {
// Efetua login no banco de dados
Acesso acesso = new Acesso();
if (bancodedados == "oracle") {
acesso.conectar("daberto", "p@55W0rd");
}
if (bancodedados == "db2") {
acesso.conectar("db2admin", "p@55W0rd");
}
if (bancodedados == "mssql") {
acesso.conectar("devaberto", "p@55W0rd");
}
try {
tabela.setModel(criaTableModel(acesso.retornaTabela()));
} catch (SQLException e) {
e.printStackTrace();
}
}
public Container criaPainel() throws SQLException {
// Cria painel principal
JPanel painel = new JPanel();
// Seleciona layout
painel.setLayout(new BoxLayout(painel, BoxLayout.PAGE_AXIS));
painel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
// Cria painel de escolha de conexão
JPanel pescolha = new JPanel();
pescolha.setLayout(new BoxLayout(pescolha, BoxLayout.LINE_AXIS));
pescolha.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
ButtonGroup grupo = new ButtonGroup();
// Cria componentes de radio
banco1 = new JRadioButton("Oracle");
banco2 = new JRadioButton("IBM DB2");
banco3 = new JRadioButton("Microsoft SQL");
// Agrupa botões de radio
grupo.add(banco1);
grupo.add(banco2);
grupo.add(banco3);
// Cria ouvinte dos botões
banco1.addItemListener(this);
banco2.addItemListener(this);
banco3.addItemListener(this);
// Seleciona primeira conexão
banco1.setSelected(true);
// Adiciona botões ao painel
pescolha.add(banco1);
pescolha.add(banco2);
pescolha.add(banco3);
// Efetua primeira conexão ao banco (ORACLE)
Acesso acesso = new Acesso();
acesso.conectar("daberto", "p@55W0rd");
// Cria modelo de tabela
tabela = new JTable(criaTableModel(acesso.retornaTabela()));
// Adiciona um painel de rolagem
JScrollPane rolar = new JScrollPane(tabela);
// Cria painel do botão
JPanel pbotao = new JPanel();
// Seleciona layout
pbotao.setLayout(new BoxLayout(pbotao, BoxLayout.PAGE_AXIS));
// cria botão
botao = new JButton("Ler dados");
botao.addActionListener(this);
// Adiciona botão ao painel
pbotao.add(botao);
// componentes ao painel principal
painel.add(pescolha);
painel.add(rolar);
painel.add(Box.createVerticalStrut(10));
painel.add(botao);
return painel;
}
public static void criaGUI() {
// Cria formulario
JFrame formulario = new JFrame("Acessando Dados");
formulario.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// cria painel de conteudo
Acesso acesso = new Acesso();
try {
formulario.setContentPane(acesso.criaPainel());
}
catch (SQLException e) {
e.printStackTrace();
}
// Exibe o formulario
formulario.pack();
formulario.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// Cria e mostra a GUI
criaGUI();
}
});
}
}





