Nao executa bloco TRY e gera excecao - java.lang.NullPointer

Bom Dia Javaneses, neste trecho de codigo eu estou lendo uma tabela e depois com o resultado eu leio a segunda tabela, meu problema eh o seguinte quando chega na linha 30 nao executa nada ate a linha 48 ou melhor ele gera uma excecao na linha 49(java.lang.NullPointerException), como eh que eu faco para executar o bloco try (linha 32 a 46)? Obrigado

01      jt_Codigo = new JTextField();
02      jt_Codigo.addActionListener ( new ActionListener() 
03      {  public void actionPerformed ( ActionEvent e ) {  
04            PreparedStatement st_sb1 = null;
05            try {
06                    xCodigo = jt_Codigo.getText().trim();
07                    try {
08                            st_sb1 = conexao.prepareStatement (" SELECT * FROM SB1010 WHERE B1_COD = '" + xCodigo + "' ");
08                            ResultSet rs_sb1 = st_sb1.executeQuery();
10                            rs_sb1.next();
11                             
12                            xDescricao = rs_sb1.getString(5);
13                            jt_Descricao.setText(xDescricao);
14                             
15                            xPreco = rs_sb1.getFloat(7);
16                            sPreco = String.valueOf(xPreco);
17                            jt_Preco.setText(sPreco);
18	                      
19                     } catch ( Exception x ){
20                             JOptionPane.showMessageDialog(C.this, "Codigo Invalido! Digite outro", "", JOptionPane.PLAIN_MESSAGE);
21                             jt_Codigo.setText("");
22                             jt_Descricao.setText("");
23                             jt_Codigo.requestFocus(true);
24                     }
25                     finally {}
26                      
27            for ( int i = 1; i <= 5; ++i ) {
28                     JOptionPane.showMessageDialog ( C.this, "cheguei aqui 2", "", JOptionPane.PLAIN_MESSAGE);
29                     xCodigo = rs_sb1.getString(2);  
30                     rs_sb1.next();
31                     PreparedStatement st_sb2 = null;
32                     try { 
33                             JOptionPane.showMessageDialog ( C.this, "cheguei aqui 3", "", JOptionPane.PLAIN_MESSAGE);
34                             st_sb2 = conexao.prepareStatement (" SELECT * FROM SB2010 WHERE B2_COD = '" + xCodigo + "' ");
35                             ResultSet rs_sb2 = st_sb2.executeQuery();
36                             rs_sb2.next();
37                             
38                             xEstoque1 = rs_sb2.getFloat(3);
39                             sEstoque1 = String.valueOf(xEstoque1);
40                             jt_Estoque1.setText(sEstoque1);
41	                      
42                             rs_sb2.next();
43                             xEstoque2 = rs_sb2.getFloat(3);
44                             sEstoque2 = String.valueOf(xEstoque2);
45                             jt_Estoque2.setText(sEstoque2);
46                     } catch ( Exception x ){}
47                     finally {}	    
48            }//for
49            }catch ( Exception x ){}
50         }
51      } );

Olah,

vc debugou o teu codigo e viu que rro dava na linha 29??? pois, se ele não executa a 30 e pula pro catch… o motivo é ter acontecido uma exception na 29…

xCodigo = rs_sb1.getString(2);

que tal vc verificar o retorno do teu select… imagine que no teu select, ele so retornasse 2 campos… o erro NullPointerException aconteceria… pois vc ta tentando pegar a posição 2, e so existem as posições 0 e 1…

verifica isso… pega o teu select e coloca num cliente sql qualquer… ve o resultado…

se não for isso… tenta pegar pelo nome no campo… por exemplo se o campo que vc quer é o codigo, e o nome da coluna é cod, tente:

xCodigo = rs_sb1.getString(“cod”);

mas, eu acho que o problema de ser o primeiro… ou seja, o teu select deve estar retornando somente 2 linhas…

boa sorte

[]'s

Putz, foi falha minha, realmente eu nao prestei atencao no meu Select e ele tava trazendo somente um registro

st_sb1 = conexao.prepareStatement (" SELECT * FROM SB1010 WHERE B1_COD = '" + xCodigo + "' ");

Inves de = coloquei >= ai sim ira me trazer mais registros

st_sb1 = conexao.prepareStatement (" SELECT * FROM SB1010 WHERE B1_COD >= '" + xCodigo + "' ");

Obrigado rodrigomaia, as vezes a gente se passa em detalhes bobo como esse, valeu a forca…[/code]

Só corrigindo o rodrigomaia, se a consulta retornasse 2 elementos, existiriam os índices 1 e 2!!! Nesse caso (não sei porque), o índice não começa de 0, começa de 1.

Confira em http://java.sun.com/j2se/1.5.0/docs/api/java/sql/ResultSet.html#getString(int)

Até mais,

hehehe :oops:

fiquei ate receioso na hora de escrever… pois ja tinha essa duvida, e qd precisei usar, usei com o nome no campo…

valew Crístian Deives, informação importante…

[]'s

Sugiro fazer uso do método abaixo para fazer o controle dos registros ao invés do for(…)… Segue abaixo trecho da documentação para avaliação…
Abs

ResultSet.next()
public boolean next() throws SQLException

Moves the cursor down one row from its current position. A ResultSet cursor is initially positioned before the first row; the first call to the method next makes the first row the current row; the second call makes the second row the current row, and so on.
If an input stream is open for the current row, a call to the method next will implicitly close it. A ResultSet object’s warning chain is cleared when a new row is read.

Returns:
true if the new current row is valid; false if there are no more rows
Throws:
SQLException - if a database access error occurs

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html