Hoje vou mostrar como fazer a conexão de uma aplicação em Java com SQL Server.
Primeiramente, baixe o SQL Server JDBC Driver direto do link oficial da Microsoft – https://docs.microsoft.com/pt-br/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15 . Agora, vamos ao tutorial (nesse exemplo foi usado o IDE Eclipse).
- Na aplicação sua em Java, crie uma pasta chamada lib
- Coloque o arquivo .jar que você baixou de conexão com SQL Server dentro dessa pasta
- Vá nas propriedades do projeto
- No Java Build Path, na aba Libraries, clique em Add JARs
- Aponte para o arquivo que você adicionou no passo 2
- Vá no servidor que o SQL Server está instalado, e abra o Configuration Manager
- Na parte de Configurações de rede, ache a instância que você irá se conectar
- Clique com o botão direito em TCP/IP, vá em Propriedades, e altere o Habilitado para Sim
- Agora na aba Endereços IP, vá no final até IPAll e defina uma porta (por exemplo, 1433 ou 1443).
- Agora, reinicie o Banco de Dados via Management Studio / Azure Data Studio
- Na sua aplicação Java, você já poderá usar normalmente
Abaixo o código fonte feito em Java para exemplo do tutorial acima:
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Formatter; import javax.swing.UIManager.*; import java.sql.*; public class TestBD extends JFrame implements ActionListener, PropertyChangeListener { private static final long serialVersionUID = 1L; /* criando variaveis dos componentes na tela*/ private JLabel lbIPServ, lbPorta, lbBase, lbUser, lbSenha, lbArq, lbLog; private JTextField jtIPServ, jtPorta, jtBase, jtArq, jtUser, jtSenha; private JButton btConfirmar, btArq; private JProgressBar progressBar; private Task task; public TestBD() { setLayout(null); lbIPServ = new JLabel("IP / Servidor:"); lbIPServ.setBounds(10,10,100,30); add(lbIPServ); jtIPServ = new JTextField(100); jtIPServ.setBounds(110,10,350,30); add(jtIPServ); lbPorta = new JLabel("Porta:"); lbPorta.setBounds(10,50,100,30); add(lbPorta); jtPorta = new JTextField(100); jtPorta.setBounds(110,50,350,30); add(jtPorta); lbBase = new JLabel("Base de Dados:"); lbBase.setBounds(10,90,100,30); add(lbBase); jtBase = new JTextField(100); jtBase.setBounds(110,90,350,30); add(jtBase); lbUser = new JLabel("Usuario:"); lbUser.setBounds(10,130,100,30); add(lbUser); jtUser = new JTextField(100); jtUser.setBounds(110,130,350,30); add(jtUser); lbSenha = new JLabel("Senha:"); lbSenha.setBounds(10,170,100,30); add(lbSenha); jtSenha = new JTextField(100); jtSenha.setBounds(110,170,350,30); add(jtSenha); lbArq = new JLabel("Arquivo:"); lbArq.setBounds(10,210,100,30); add(lbArq); jtArq = new JTextField(100); jtArq.setBounds(110,210,350,30); add(jtArq); btArq = new JButton("..."); btArq.setBounds(460,210,20,30); btArq.setToolTipText("Selecionar arquivo"); btArq.addActionListener(this); add(btArq); lbLog = new JLabel(""); lbLog.setBounds(10,270,450,30); lbLog.setForeground(Color.RED); add(lbLog); progressBar = new JProgressBar(0, 100); progressBar.setStringPainted(true); progressBar.setBounds(10,310,470,30); progressBar.setString("..."); add(progressBar); btConfirmar = new JButton("Confirmar"); btConfirmar.setBounds(190,350,120,30); btConfirmar.setToolTipText("Confirma a leitura"); btConfirmar.setMnemonic('C'); btConfirmar.addActionListener(this); add(btConfirmar); /* mudando visual dos componentes na tela */ try { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); SwingUtilities.updateComponentTreeUI(this); this.pack(); break; } } } catch (Exception e) {} /* definindo o valor default dos campos */ jtIPServ.setText("localhost"); jtPorta.setText("1433"); jtBase.setText("BaseTeste"); jtArq.setText("C:\\Spool\\teste_java.log"); jtUser.setText("sa"); jtSenha.setText("tst123"); } public void actionPerformed(ActionEvent e) { /* Se for o botao confirmar */ if (e.getSource() == btConfirmar) { String senhaPega = jtSenha.getText(); /* IP, DataBase, Arquivo, Usuario e Senha sao obrigatorios*/ if ( (jtIPServ.getText().isEmpty()) || jtBase.getText().isEmpty() || jtArq.getText().isEmpty() || jtUser.getText().isEmpty() || senhaPega.isEmpty()){ JOptionPane.showMessageDialog(null, "Campo(s) em branco!", "#001 - Campos", 0); lbLog.setText("Campo(s) em branco!"); } /* Senao, chama a tarefa de executar a leitura no banco */ else { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); task = new Task(); task.addPropertyChangeListener((PropertyChangeListener) this); task.execute(); } } /* Se for o botao de selecionar o arquivo, abre uma tela para definir o caminho*/ else if (e.getSource() == btArq) { final JFileChooser fc = new JFileChooser(jtArq.getText()); int returnVal = fc.showOpenDialog(TestBD.this); if (returnVal == JFileChooser.APPROVE_OPTION) { jtArq.setText(fc.getSelectedFile().getAbsolutePath()); } } } public void propertyChange(PropertyChangeEvent evt) { /* Definindo o valor da barra de progresso na mudanca de propriedade */ if ("progress" == evt.getPropertyName()) { int progress = (Integer) evt.getNewValue(); progressBar.setValue(progress); } } class Task extends SwingWorker<Void, Void> { @Override public Void doInBackground() { /* Define variaveis de controle e deixa os campos inativos para alteracao */ setProgress(0); double atual = 0, ultimo = 0; int porcentagem = 0; String codigo = ""; String descricao = ""; String textoFull = ""; String dbURL = ""; String user = jtUser.getText().trim(); String pass = jtSenha.getText().trim(); String atuStr = "", totStr = ""; btConfirmar.setEnabled(false); jtIPServ.setEnabled(false); jtPorta.setEnabled(false); jtBase.setEnabled(false); jtArq.setEnabled(false); jtUser.setEnabled(false); jtSenha.setEnabled(false); btArq.setEnabled(false); /* Define a barra como o valor total */ setProgress(porcentagem); try{ /* Monta a URL de conexao do banco */ dbURL = "jdbc:sqlserver://"+jtIPServ.getText().trim(); if (!(jtPorta.getText().isEmpty())) dbURL += ":"+jtPorta.getText().trim(); dbURL += ";databaseName="+jtBase.getText().trim(); /* Faz a conexao com o banco */ Connection conn = DriverManager.getConnection(dbURL, user, pass); if (conn != null) { Statement statement = conn.createStatement(); /* Pega o ultimo registro */ String selectQuery = ""; ResultSet rs = statement.executeQuery(" SELECT ISNULL(MAX(CODIGO), 0) AS ULTIMO FROM PRODUTOS "); while (rs.next()) { ultimo = Double.parseDouble(rs.getString("ULTIMO")); } /* Define o valor total em texto para mostrar na tela */ totStr = String.valueOf(ultimo); totStr = totStr.substring(0, totStr.indexOf(".")); /* Faz uma nova consulta pegando os campos de codigo e descricao */ selectQuery = " SELECT CODIGO, DESCRICAO FROM PRODUTOS "; rs= statement.executeQuery(selectQuery); /* Enquanto houver produtos, atualiza a barra de progresso, pega os dois campos e coloca na variavel texto*/ while (rs.next()) { atual++; atuStr = String.valueOf(atual); atuStr = atuStr.substring(0, atuStr.indexOf(".")); lbLog.setText("Processando linha "+atuStr+" de "+totStr+"..."); porcentagem = (int) ((atual*100)/(ultimo)); setProgress(porcentagem); progressBar.setString(String.valueOf(porcentagem)+" %"); codigo = rs.getString("CODIGO"); descricao = rs.getString("DESCRICAO"); textoFull += codigo + "|" + descricao + "\n"; } /* Tenta criar o arquivo com todos os produtos */ try { Formatter saida = new Formatter(jtArq.getText()); saida.format(textoFull); saida.close(); JOptionPane.showMessageDialog(null,"Arquivo '"+jtArq.getText()+"' criado!","Arquivo",1); } catch(Exception erro){ JOptionPane.showMessageDialog(null,"Arquivo nao pode ser gerado!","Erro",0); } lbLog.setText("Processo Concluido!"); } } /* Se houve algum problema mostra ao usuario */ catch (SQLException ex){ System.out.println("SQLException: "+ex.getMessage()); System.out.println("SQLState: "+ex.getSQLState()); System.out.println("VendorError: "+ex.getErrorCode()); JOptionPane.showMessageDialog(null, "Erro na conexao com o Banco!", "#003 - SQL Server", 0); lbLog.setText("Erro na conexao com o banco!"); } /* Volta o estado dos componentes */ btConfirmar.setEnabled(true); jtIPServ.setEnabled(true); jtPorta.setEnabled(true); jtBase.setEnabled(true); jtArq.setEnabled(true); jtUser.setEnabled(true); jtSenha.setEnabled(true); btArq.setEnabled(true); return null; } @Override public void done() { Toolkit.getDefaultToolkit().beep(); setCursor(null); } } public static void main(String arg[]) { TestBD tstJanela = new TestBD(); tstJanela.setSize(500,420); tstJanela.setLocationRelativeTo(null); tstJanela.setTitle("Test BD - Conexao com SQL Server"); tstJanela.getContentPane().setBackground(Color.WHITE); tstJanela.setResizable(false); tstJanela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); tstJanela.setVisible(true); } }
Bom pessoal, por hoje é só.
Abraços e até a próxima.