Resultset não recebe o valor null da tabela

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.

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

Eu faria assim:

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

}
[/code]

Testa ae e boa sorte.

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

é 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

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.

qual a saída do printStackTrace()?

java.lang.NullPointerException

Em que linha?

no catch ele informa o erro e retorna

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;

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

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

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.

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.

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…

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

}
[/code]

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"

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

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

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…

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

[/code]

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…

[quote=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…[/quote]

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 =/.