Problema na inserção de tabela relacionada

8 respostas
M

Olá galera. Estou tendo desenvolvendo um sistema que possui duas tabelas relacionadas a tabela Usuario e a tabela servidor. A tabela servidor precisa do código do usuario para identificar o usuario que é servidor, ou seja, o código na tabela servidor não é autoincremento. na minha classe ServidorDao eu criei o seguinte método de inserção:

public void insereServidor(Servidor servidor) throws SQLException{
       String sqlUsu = "Insert into servidor(Usuario_idUsuario,siape,lotacao) values(?,?,?)" ;
       PreparedStatement stmt = conexao.prepareStatement(sqlUsu);
       [b]stmt.setInt(1,servidor.getUsuario_idUsuario())      [/b]       
       stmt.setString(2,servidor.getSiape());
       stmt.setString(3, servidor.getLotacao());
       
       
       stmt.execute();
       stmt.close();
               
    }

e no JFrame chamado de usuarioView, eu criei o método cadastra servidor que respassa os valores dos jtextFields para o método da classe ServidorDao, mas na hora que eu chamo esse método no evento do botão salvar, o netbeans sempre aponta exceção para a linha acima selecionada. Eu não estou conseguindo resolver este problema. tentei fazer desta forma no usuarioView, selecionando o código do usuário na jTable e enviando para a tabela servidor no banco de dados, mas não está dando certo:

public void cadastraServidor(){
        
         try{
           
        Servidor serv = new Servidor();
        [b]serv.setUsuario_idUsuario(jTable1.getSelectedRow())     [/b]       
         serv.setSiape(jTextField11.getText());
        serv.setLotacao(jTextField12.getText());
        servidorDao servidor = new servidorDao();
        servidor.insereServidor(serv);
              
                
        }catch(SQLException ex){
            
      }
        
    }

Aguém sabe como resolver este problema?

8 Respostas

mauricioadl

se vc tentar usar getSelectedRow e nenhuma linha estiver seleciona vai dar exception. sera que nao pode ser isso?

M

Todas as vezes que eu vou inserir um servidor, sempre seleciono-o na jtabela e depois mando salvar no banco. Eu não criei nenhum código especial para pegar um usuário especial na jtable, como evento de mouse ou qualquer coisa. O que tenho que fazer ?

M

Estava testando o meu código ontem e acima deste ´método criei a seguinte “if” abaixo não está mais dando aquela exceção, no entanto está acontecendo uma coisa estranha. Ele insere o código do usuário na tabela servidor, mais não todas as vezes e além disso insere códigos diferentes do que eu selecionei. Por exemplo eu mandei ele inserir o servidor de código 7 e ele inseriu o de código 8 e quando ele insere. Alguém sabe me dizer por quê?

public void cadastraServidor(){   
           
         try{   
        [b]if (jTable1.getSelectdRow() != -1){    [/b]        
      Servidor serv = new Servidor();   
        [b]serv.setUsuario_idUsuario(jTable1.getSelectedRow()) [/b]         
         serv.setSiape(jTextField11.getText());   
          serv.setLotacao(jTextField12.getText()); 
        servidorDao servidor = new servidorDao();   
        servidor.insereServidor(serv);   
        }         
                   
        }catch(SQLException ex){   
               
      }   
           
    }
mauricioadl
marcelokleyton:
Estava testando o meu código ontem e acima deste ´método criei a seguinte "if" abaixo não está mais dando aquela exceção, no entanto está acontecendo uma coisa estranha. Ele insere o código do usuário na tabela servidor, mais não todas as vezes e além disso insere códigos diferentes do que eu selecionei. Por exemplo eu mandei ele inserir o servidor de código 7 e ele inseriu o de código 8 e quando ele insere. Alguém sabe me dizer por quê?
public void cadastraServidor(){   
           
         try{   
        [b]if (jTable1.getSelectdRow() != -1){    [/b]        
      Servidor serv = new Servidor();   
        [b]serv.setUsuario_idUsuario(jTable1.getSelectedRow()) [/b]         
         serv.setSiape(jTextField11.getText());   
          serv.setLotacao(jTextField12.getText()); 
        servidorDao servidor = new servidorDao();   
        servidor.insereServidor(serv);   
        }         
                   
        }catch(SQLException ex){   
               
      }   
           
    }

eh porque a linha selecionada comeca com 0 e nao com 1.

M
A qual parte vc está se referindo, na parte do código que faz a verficação da linha selecionada na jTable ou na parte do método insereServidor.
public void cadastraServidor(){     
             
         try{     
        [b]if (jTable1.getSelectdRow() != -1){    [/b]          
      Servidor serv = new Servidor();     
        [b]serv.setUsuario_idUsuario(jTable1.getSelectedRow()) [/b]           
         serv.setSiape(jTextField11.getText());     
          serv.setLotacao(jTextField12.getText());   
        servidorDao servidor = new servidorDao();     
        servidor.insereServidor(serv);     
        }           
                     
        }catch(SQLException ex){     
                 
      }

ou

public void insereServidor(Servidor servidor) throws SQLException{  
       String sqlUsu = "Insert into servidor(Usuario_idUsuario,siape,lotacao) values(?,?,?)" ;  
       PreparedStatement stmt = conexao.prepareStatement(sqlUsu);  
       [b]stmt.setInt(1,servidor.getUsuario_idUsuario())      [/b]         
       stmt.setString(2,servidor.getSiape());  
       stmt.setString(3, servidor.getLotacao());  
         
         
       stmt.execute();  
       stmt.close();  
                 
    }
Já fiz as modificações, por exemplo: no método insereServidor, coloquei no trecho:
stmt.setInt(0,servidor.getUsuario_idUsuario())
e continua não inserindo o código do usuario selecionado na jtable na tabela Servidor. Também modifiquei o trecho
if (jTable1.getSelectdRow() != -1)
colocando por exemplo:
if (jTable1.getSelectdRow() >= 0)
e nada, sempre mostrando o seguinte erro:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Modifiquei o método cadastraServidor
Servidor serv = new Servidor();     
        serv.setUsuario_idUsuario(jTable1.getSelectedRow())
para:
Servidor serv = new Servidor();
  serv.setUsuario_idUsuario(linha.get(jTable1.getSelectedRow()).getIdUsuario());
e continua a apresentar a seguinte mensagem de ponteiro nulo
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at br.com.sgbif.view.UsuarioView.cadastraServidor(UsuarioView.java:591)

Estou começando a ficar preocupado, pois não consigo resolver este problema.

M

Bem. Vou tentar ser mais específico . O que eu preciso é pegar o código de um usuário listado na jtable e inseri-lo na tabela Servidor no Banco de dados. Essas duas tabelas estão relacionadas.

mauricioadl

pelo que entendi, qndo vc pega um valor da tabela ele sempre te envia um valor diferente. isso prq a primeira linha da tabela é 0. basta vc fazer getSelectedRow() + 1 que resolve.

[]'s

M

Deu certo. Vou fazer mais alguns testes para ver se atende corretamente e informo os resultados. ok

Criado 14 de dezembro de 2011
Ultima resposta 26 de dez. de 2011
Respostas 8
Participantes 2