Chamando Stored Procedure no NetBeans

10 respostas
O

OLa pessoal tudo bem?
Sou novo aqui e gostaria de saber o seguinte.
Estou fazendo o projeto de conclusão de curso com NetBeans e Mysql e umas das exigencias é deixar uma boa parte do processo com Banco.
Então gostaria de saber como fazer uma Stored procedure de inserção e como chama-la no Netbeans.

Eu uso a versão Netbeans 6.0.1. ela é estavel ja ou vcs aconselham eu usar a 5.5.

Agradeço a ajuda pessaol

Até

10 Respostas

T

da uma olhada nesse artigo do fernando anselmo

http://www.sqlmagazine.com.br/Colunistas/Anselmo/04_StoredProcedure.asp

O

Valeu obrigado pela dica, mas estou tentando montar usando forms e não estou conseguindo,
Alguem pode me dizer o que eu tenho que fazer para usar o exemplo do professor Fernando Anselmo com Forms np Netbeans.

Valeuuu

A

Consta abaixo um trecho de código de como chamar uma stored procedure e jogar os dados dentro de um ResultSet:

Connection conn = this.getConnection();
CallableStatement CStmChamarStored;
ResultSet RsConsultarChamarStored;
try {            

        CStmChamarStored = conn.prepareCall("{call CONSULTARCLIENTE(?)}");
        ((FirebirdCallableStatement) CStmChamarStored).setSelectableProcedure(true);
        CStmChamarStored.setString(1,Parametro);
        CStmChamarStored.execute();

         RsConsultarChamarStored = CStmChamarStored.getResultSet();
	 String vCliente = RsConsultarChamarStored.getString("NomeCliente");

} catch (SQLException ex) {
 ex.printStackTrace();
}

Espero ter ajudado.

O

Eu coloco no envento do botão esse codigo, alguem poder me ajudar…

Valeww

A

No meu caso está em um botão, mas você pode adaptá-lo depois em um método se você quiser.

O
Pessoal preciso de uma ajuda, gostaria de separar o codigo abaixo que esta no envento de um botão, em uma classe de conexão, classes para inserir e uma classe para mostrar os dados. Isto é possivel??? alguem pode me dar um exemplo....
if (numero.getText().equals(""))
     {
     JOptionPane.showMessageDialog(null,"O campo Numero não poder Null");
     }else{  
          try{
             Class.forName("com.mysql.jdbc.Driver");
             Connection conn = DriverManager.getConnection(
              "jdbc:mysql://localhost:3306/agenda?useUnicode=true", "root", "mysql");
             CallableStatement cal = conn.prepareCall("{call sp_insereContato(?, ?)}");
             cal.setInt(1,Integer.parseInt(numero.getText()));
             cal.setString(2,nome.getText());
             cal.executeQuery();
             CallableStatement stm = conn.prepareCall("{call sp_mostraContato()}");
             ResultSet res = stm.executeQuery(); 
             jTable1.getColumnModel().getColumn(0).setPreferredWidth(20);
             jTable1.getColumnModel().getColumn(1).setPreferredWidth(20);     
             DefaultTableModel modelo = (DefaultTableModel)jTable1.getModel();
             modelo.setNumRows(0);
             try
               {    
                while (res.next()) 
                  modelo.addRow(new Object [] 
                  {
                  res.getString("numero"),
                  res.getString("nome")
                  });      
                res.first();
               }  
         catch (SQLException erro)
             {
             JOptionPane.showMessageDialog(null,"Erro ao listar no JTable "+erro);
             } 
         
          }    
          catch (ClassNotFoundException ex) {
                Logger.getLogger(frmteste.class.getName()).log(Level.SEVERE, null, ex);
                }
          catch (SQLException erro )
                     {
                     JOptionPane.showMessageDialog(null,"Este Valor ja existe");
                     }
           }
A

Por que você não cria uma classe só onde você cadastra, atualiza, deleta e pesquisa os dados?
Eu tenho uma classe “AcessoBD” e ela é responsável em comunicar-se com o banco de dados, daí quando eu precisar de algum método desta classe chamo ela.

Andei pesquisando no google o pessoal usa assim geralmente.

Estrutura da Classe:

public class AcessoBD(){

public Connection getConnection(){
/*
Início do código

Fim do código
*/
}

public String[][] ConsultarCliente(){
/*
Início do código

Fim do código
*/
}


}

Espero ter ajudado,
Abraço.

O

Blza é bem isso mesmo que preciso fazer, mas preciso de uma ajudinha pois, qdo tento fazer esta separação aparece um monte de erro.

Dizendo que preciso criar o metodos de preparecall, e SQLQxception…

Vc pode me dar um exemplo em cima do codigo que eu passei acima, tipo , deixar um arquivo de conxeção separados e e um exemplo de como chamar o metodo insert direto de uma classe.

A

Ok vamos lá,

Classe AcessoBD:

public class AcessoBD(){

public String URL= "jdbc:firebirdsql:localhost:C:/Projeto/BANCO.FDB";
public String Username="admin";
public String Password="ak18sjqu1";

public AcessoBD(){

}

public Connection getConnection() {

        Connection Conn = null;
        // Carregando o JDBC Driver
        String vdriverName = "org.firebirdsql.jdbc.FBDriver";
        try {
            Class.forName(vdriverName);
        } catch (ClassNotFoundException ex) {
            //System.out.println("Erro1: " + ex);
            return null;
        }
        try {
            Conn = (Connection) DriverManager.getConnection(URL, UserName, Password);
            return Conn;
        } catch (SQLException ex) {
            //System.out.println("Erro2: " + ex);
            return null;
        }

}

public int ConsultarCodigoCliente() {
        CallableStatement CStmCliente;
        int vCodigoCliente = 0;

        Connection conn = this.getConnection();
        try {
            CStmCliente = conn.prepareCall("{call CONSULTARCODIGOCLIENTE}");
            ((FirebirdCallableStatement) CStmCliente).setSelectableProcedure(true);
            CStmCliente.execute();

            ResultSet RsConsultarCliente = CStmCliente.getResultSet();

            try {
                while (RsConsultarCliente.next()) {
                    vCodigoCliente = Integer.parseInt(RsConsultarCliente.getString("IDCliente"));
                }
            } catch (Exception e) {
              
            }

	conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return vCodigoCliente;


}

}

OBS: No meu caso eu estou usando o Firebird, não esquecer de adicionar a bibliteca do banco de dados nessa classe, depois quando quiser efetuar executar algum método:

AcessoBD vAcesso = new AcessoBD();
int vCodigo = vAcesso.ConsultarCodigoCliente();

O
Pessoal seguinte, sou novo em Java, gostaria de saber o seguinte. Quero separar tudo em packages, (tipo dentro de Cadatros manter apenas o que refere a cadastro.) So que tem um detalhe, estou quebrando cabeça para fazer um unico arquivo que guarde a conexão, e depois apenas chamar esta conexão para inserir mostrar, ou alterar. Mas acabei parando de cara ja na inserção porque qdo tento colocar o metodo CallableStatment, ele da erro, dis que eu preciso criar metodo PrepareCall em conexao, ai tentei mas num fui feliz.... Sera que vcs podem me ajudar....... Segue codigo abaixo...
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;


public class frmteste extends javax.swing.JFrame {
    /** Creates new form frmteste */
    
     public frmteste() {
      initComponents();
    }
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        numero = new javax.swing.JTextField();
        nome = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null},
                {null, null},
                {null, null},
                {null, null}
            },
            new String [] {
                "Numero", "Nome"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPane1.setViewportView(jTable1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(89, 89, 89)
                        .addComponent(jButton1)
                        .addGap(79, 79, 79)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(numero)
                            .addComponent(nome, javax.swing.GroupLayout.DEFAULT_SIZE, 58, Short.MAX_VALUE))))
                .addContainerGap(15, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(28, 28, 28)
                        .addComponent(jButton1))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(numero, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 35, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 230, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(29, 29, 29))
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if (numero.getText().equals(""))
     {
     JOptionPane.showMessageDialog(null,"O campo Numero não poder Null");
     }else{  
          try{
             Class.forName("com.mysql.jdbc.Driver");
             Connection conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/agenda?useUnicode=true", "root", "mysql");
             CallableStatement cal = conn.prepareCall("{call sp_insereContato(?, ?)}");
             cal.setInt(1,Integer.parseInt(numero.getText()));
             cal.setString(2,nome.getText());
             cal.executeQuery();
             CallableStatement stm = conn.prepareCall("{call sp_mostraContato()}");
             ResultSet res = stm.executeQuery(); 
             jTable1.getColumnModel().getColumn(0).setPreferredWidth(20);
             jTable1.getColumnModel().getColumn(1).setPreferredWidth(20);     
             DefaultTableModel modelo = (DefaultTableModel)jTable1.getModel();
             modelo.setNumRows(0);
             try
               {    
                while (res.next()) 
                modelo.addRow(new Object [] 
                  {
                  res.getString("numero"),
                  res.getString("nome")
                  });      
                res.first();
               }  
          catch (SQLException erro)
             {
             JOptionPane.showMessageDialog(null,"Erro ao listar no JTable "+erro);
             } 
         
          }    
            catch (ClassNotFoundException ex) {
                Logger.getLogger(frmteste.class.getName()).log(Level.SEVERE, null, ex);
            }             catch (SQLException er )
                     {
                     JOptionPane.showMessageDialog(null,"Este Valor ja existe");
                     }
           }      
    }                                        

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new frmteste().setVisible(true);
    }
    });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField nome;
    private javax.swing.JTextField numero;
    // End of variables declaration
Criado 30 de março de 2008
Ultima resposta 3 de abr. de 2008
Respostas 10
Participantes 3