Resultset não recebe o valor null da tabela

22 respostas
gabrielemidio

Pessoal estou com um probleminha aqui com meu cadastro o que ocorre é que quando o funcionário for apertar para dar um novo cadastro tem que aparecer ja o código do cliente, assim criei um método onde ele iria verificar o código e se já tivesse ele somaria com mais 1 ,se recebe-se NULL ele teria que dar para esse código como 1 , mas o programa está descendo direto no cacth.. agradeço a ajuda.

public int getCodigo() throws SQLException{
            
        int cod =0 ;
        Statement stmt;
        ResultSet res;
        int num;
        try {
              
             stmt = con.createStatement();  
             res = stmt.executeQuery ("SELECT max(id_cliente) from cadastro_cliente;");     
             System.out.println(res.toString());
            
              if(res.next()){
            
              if (res.getString("id_cliente").equals(null)){
                  
               
               res = stmt.executeQuery("SELECT max(id_cliente) from cadastro_cliente;");
                cod = res.getInt("id_cliente");
                cod = cod+1;
                }
                       
         }    
        
        }
        catch(Exception e){
                
          System.out.println("Erro");              
        
        }
    
     return cod;
    }

22 Respostas

eduardoromcy

Eu faria assim:

public int getCodigo() throws SQLException{
            
        int cod =0 ;
        Statement stmt;
        ResultSet res;
        int num;
        try {
             stmt = con.createStatement();  
             res = stmt.executeQuery ("SELECT max(id_cliente) from cadastro_cliente;");     
            
            if(res.next()){
                cod = res.getInt("id_cliente");
                cod = cod+1;
			}else{
				cod = 1;
			}
        }
        catch(Exception e){
          System.out.println("Erro");              
        }
     return cod;
}

Testa ae e boa sorte.

gabrielemidio

Testei aqui e ele retornou 0 para minha Text ,ele ainda passa para o cacth, o o estranho que testei no banco ele lá aparece NULL já o Resultset não recebe esse valor

A

é menos propenso a erros usar o recurso de auto-geração desse número no próprio banco de dados. E te livra dessa operação de ir lá ler a tabela antes de inserir o registro também

gabrielemidio

Ja tentei o auto_incremento mas tambem ele inicializa como Null não a zero então do mesmo modo não iria da certo o fato que é quero mostrar para o funcionário qual é o código do cliente antes de colocar o resto dos dados do cliente.

A

qual a saída do printStackTrace()?

gabrielemidio

java.lang.NullPointerException

pmlm

Em que linha?

gabrielemidio

no catch ele informa o erro e retorna

A

cara, na linha 15 você está tentando obter o valor chamando pelo nome do campo, que não está no teu select. Tente alterar para isto:

SELECT max(id_cliente) as id_cliente from cadastro_cliente;

Se você for mais agressivo, já dá pra obter o número do próximo no próprio select. Basta usar uma função que substitua nulo por 0 - o nome dessa função varia de banco pra banco. Se fosse num Oracle ficaria assim:

SELECT nvl(max(id_cliente),0) + 1 as id_cliente from cadastro_cliente;
gabrielemidio

Não deu certo tambem =/, ná segunda opção você saberia me dizer o nome da função do Mysql?

A

http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull

emanuelCruz

O problema é que você está usando int ao invés de Integer.

Lembro que int é primitivo e não pode receber null, diferente de Integer.

gabrielemidio

Poderia ate ser isso se o codigo estive-se recebendo o resultado da Query mas não é o Problema e no recebimento da mensagem vinda do banco que é o res que pega mas quando chega no res ele ja cai para o catch , pelo fato do Res não receber o null da Query.

jamirdeajr
O ';' no final do 'select' precisa ser retirado, também como já falaram aqui antes, o campo de retorno não se chama 'id_cliente' então ou você chama ele pelo número (como eu fiz) ou você dá um nome para ele (Ex. 'max(id_cliente) as maxcli') e chama pelo nome. E na exception é bom incluir um e.printStackTrace(); para facilitar a descoberta dos erros...
public int getCodigo() throws SQLException{
    int cod =0 ;
    Statement stmt;
    ResultSet res;
    int num;
    try {
        stmt = con.createStatement();  
        res = stmt.executeQuery ("SELECT max(id_cliente) from cadastro_cliente");     // Tirei o ';' daqui
              
        if(res.next()){  
           cod = res.getInt(1);  
           cod = cod+1;  
        }else{  
            cod = 1;  
        }  
    }
    catch(Exception e){
    e.printStackTrace();      // Para mostrar a exceção 
    System.out.println("Erro");              
    }
    return cod;
}
luizfelipetx

Esse é fácil…

Você precisa Iniciar o result set…

Já apanhei com esse problema também…

use algo do tipo …

while (linhaURL != null) {

" Que o codigo esteja com vocês"

gabrielemidio

Ah sim mas do mesmo jeito ele esta apontando o erro e o ";" e preciso pois meu banco é MySql , testei sem o ";" no Banco e não rodou, meu tcc esta parado faz 4 por que dias que estou tentando arrumar isso e nada.

LuizFelipex então ficaria assim

public int getCodigo() {
            
        int cod =0 ;
        Statement stmt;
        ResultSet res = null;
        try {
             
             stmt = con.createStatement();    
             res = stmt.executeQuery ("select max(id_cliente) as maxid_cliente from cadastro_cliente;");      
             
         while (res != null){ 
             
            if(res.next()){  
                cod = res.getInt("maxid_cliente");  
                cod = cod+1;  
               
            }else{  
                cod = 1; 
            }  
         
        }
        }
        catch(Exception e){
          e.printStackTrace();
         System.out.println("erro");             
        
        }
    
     return cod;
jamirdeajr
Bom, quando ao ';' é porque não sabia que banco você estava utilizando, no Oracle onde fiz um teste dava exceção de caracter inválido. No MySQL funciona tanto com como sem o ';'. Testei aqui com MySQL e funcionou corretamente, sugiro que você retire o throws SQLExceptions do método e trate ele diretamente e veja qual mensagem exceção está gerando. Pode ser algum outro tipo de erro... Também tem a pergunta mais óbvia, teu con está corretamente inicializado né? Se estiver null vai dar exceção...
private int getCodigo() {

		int cod = 0;
		Statement stmt;
		ResultSet res;
		
		try {
			stmt = con.createStatement();
			res = stmt
					.executeQuery("SELECT max(id_cliente) as maxid_cliente from cadastro_cliente;");

			if (res.next()) {
				cod = res.getInt("maxid_cliente");
				cod = cod + 1;
			} else {
				cod = 1;
			}
		}

		catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Erro");
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("Erro");
		}
		return cod;
	}
SandroSoftwares

boa noite!

postei o código mas vi que as discussões estavam aprofundadas…

por isso retirei…

creio que esse código do jamirdeajr rodará legal…

gabrielemidio

jamirdeajr:
Bom, quando ao ‘;’ é porque não sabia que banco você estava utilizando, no Oracle onde fiz um teste dava exceção de caracter inválido. No MySQL funciona tanto com como sem o ‘;’.
Testei aqui com MySQL e funcionou corretamente, sugiro que você retire o throws SQLExceptions do método e trate ele diretamente e veja qual mensagem exceção está gerando. Pode ser algum outro tipo de erro…
Também tem a pergunta mais óbvia, teu con está corretamente inicializado né? Se estiver null vai dar exceção…

Esta sim é eu criei ele publico na classe pq é uma classe de métodos então para não ficar digitando eu deixei ele publico, e tambem o SQLException não retorna nenhum erro =/.

gabrielemidio

SandroSoftwares:
boa noite!

postei o código mas vi que as discussões estavam aprofundadas…

por isso retirei…

creio que esse código do jamirdeajr rodará legal…

o Meu já esta assim obrigado

gabrielemidio

Pessoal Consegui era o con mesmo eu estava declarando ele publico mas em apenas um metodo ele estava recebendo a conexão ai os outros não recebia a ligação com o banco deu certo agradeço a todos que me ajudaram .

Obrigado

eduardoromcy

Desejo sucesso em seus estudos! Boa sorte.

Criado 28 de maio de 2011
Ultima resposta 1 de jun. de 2011
Respostas 22
Participantes 8