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