Chamando Stored Procedure no NetBeans

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é

da uma olhada nesse artigo do fernando anselmo

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

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

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.

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

Valeww

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

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…

[code]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");
                 }
       }      [/code]

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.

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.

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();

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…

[code]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   [/code]