Dúvida em chamada de Método com INSERT

6 respostas
K

Boa tarde pessoal,

Estou fazendo um exercicio onde tenho um bean Livro e categoria.

agora estou criando os métodos para criar,excluir,atualizar,listar…

criei um método

insertBook

public void insertBook(Livro livro) throws Exception{
			
		Connection db2 = con.conectarBanco();
		System.err.println("Conexão OK");
		System.out.println();
		PreparedStatement ps = null;
		ps = db2.prepareStatement("INSERT INTO TBLIVRO (ISBN,IDCATEGORIA,TITULO,AUTOR) VALUES (?,?,?,?);");
		ps.setInt(1, livro.getIsbn());
		ps.setString(2, livro.getCategoria().getDescricao());
		ps.setString(3, livro.getTitulo());
		ps.setString(4, livro.getAutor());
		ps.executeUpdate();
		
	}

e a chamada de teste.

CategoriaDAO cdao = new CategoriaDAO();
		LivroDAO ldao = new LivroDAO();
		Livro livro = new Livro();
		Categoria categoria = new Categoria();
		
	
		ldao.insertBook(livro.setIsbn(1),livro.setCategoria(categoria),livro.setTitulo("Teste"),livro.setAutor("Teste"));

na hora que eu xamo o método e tento inserir os atributos, ele fica dando erro, nao consigo fazer a chamada do método funcionar nem a pau.
alguem pode me ajudar pls!?

6 Respostas

alanbrasil1984

manda o erro.

robinsonbsilva

Jovem,

Sua chamada ao método insert recebe como parametro um Objeto livro!!
Dá forma que está passando, seria como ele recebesse várias strings:

//(livro.setIsbn(1),livro.setCategoria(categoria),livro.setTitulo("Teste"),livro.setAutor("Teste"));  
insertBook(String isbn, String categoria, String titulo, String autor)

o correto é:

livro.setIsbn(1);
livro.setCategoria(categoria);
livro.setTitulo("Teste");
livro.setAutor("Teste"));  
insertBook(livro) //aqui é só um parametro..vc seta os valores antes de chegar aqui
alanbrasil1984

é ele tem razão…

que vc tem que popular a instancia primeiro e depois passar para ser inserida.

yorgan

Acredito que seja get e não set nos parametros do método insertBook.

Os set´s você deve fazer antes.

Esquece…deixei a janela aberta e demorei p/ responder! rsrsrs

[]´s.

K

realmente vc está certo, desculpe a burrice kk, to meio enferrujado ai fico dando essas.

vlww! Resolvido!

K
Bom dia pessoal, sou novato tbm na area de desenvolvimento em java Estou com um problema que  não sei como solucionar.

Utilizo a IDE netbeans, onde separei meu código da seguinte forma:

package classes;

import java.sql.<em>;

import javax.swing.</em>;

/**

*
  • @author Bruno
    
    */
    
    public class ConexaoBD {
    
    private String driver = org.postgresql.Driver;
    
    private String url = jdbc:postgresql://localhost:5432/postgres”;
    
    private String usuario = postgres;
    
    private String senha = xatm092;
    
    private Connection conexao;
    
    public Statement stmt;
    
    public ResultSet rs;
    
    //conexao = null;
    
    /** Creates a new instance of ConexaoBD */
    
    public ConexaoBD() {
    
    try {
    
    Class.forName(driver);
         conexao = DriverManager.getConnection(url, usuario, senha);
         JOptionPane.showMessageDialog(null,"Conexão Realizada.");
     }
     catch(ClassNotFoundException Driver){
         // retorna se houve erro na class.forName
         JOptionPane.showMessageDialog(null,"Driver não localizado: "+Driver);
         
     }
     catch(SQLException erro){
         // retorna se houve erro no na conexao sql
         JOptionPane.showMessageDialog(null,"Deu erro na conexão "+"com a fonte de dados: "+erro);
         
     } catch(Exception ex)
     {
         JOptionPane.showMessageDialog(null,""+ex);
         
     }
    

    }
    public void conecta(){

    }

    public void desconecta(){
    
    try{
    
    conexao.close();
    
    JOptionPane.showMessageDialog(null,“conexão fechada”);
    
    }
     catch(SQLException erro){
        
         JOptionPane.showMessageDialog(null,"Conexao não pode ser encerrada, erro: "+erro);
     }
    
    }
    
    public void executeSQL(String sql)
    
    {
    
    // cria se uma statement da conexao onde é utilizada para executar a query retornando os valores para o objeto rs.
    
    try
    
    {
    
    stmt = conexao.createStatement();
    
    rs = stmt.executeQuery(sql);
    
    }
    
    catch(SQLException erro)
    
    {
    
    JOptionPane.showMessageDialog(null,“Não foi possível executar o comando sql.”+erro);
    
    }
    
    }
    

}

Está seria a minha classe de conexão com o banco e o código a seguir seria o do evento de inserção dos dados no banco.

private void but_Usu_SairActionPerformed(java.awt.event.ActionEvent evt) {

ConexaoBD con = new ConexaoBD();
    //con.conecta();
    try{       
        con.stmt.executeUpdate("insert into usuario (nome, sobrenome, telefone, cargo, senha)" +
                " values ('ricardo', 'vieira', 38326720, 'conferente', 'ric')");
        JOptionPane.showMessageDialog(null,"Dados inseridos com sucesso");
       }
    catch(SQLException erro){
        JOptionPane.showMessageDialog(null,"erro no update"+erro);
    }
    
    con.desconecta();
}

Este código está me retornando o seguinte erro:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

at Interfaces.Cad_Usuarios.but_Usu_SairActionPerformed(Cad_Usuarios.java:185)

at Interfaces.Cad_Usuarios.access$100(Cad_Usuarios.java:17)

at Interfaces.Cad_Usuarios$2.actionPerformed(Cad_Usuarios.java:87)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6038)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Já procurei saber sobre este erro, pois este somente acontece quando estamos passando um objeto nulo à um metódo, creio eu então que esta instrução de sql esteja errada, porem este comando sql foi executado no banco, e assim sendo resultou em sucesso.

Agradeço a voçes a atenção…

Criado 4 de setembro de 2009
Ultima resposta 8 de set. de 2009
Respostas 6
Participantes 5