Gente tenho um método que o q lista os cursos do banco traz sempre o primeiro valor como null, pq a variavel cod tem q se repetir para mostrar todos os valores do banco, porém ela é inicializada como null, tenho q achar um modo de listar todos os valores do banco em um só string, mas sem o maldito null, tem como??
pq dá no mesmo, vai sair uma variavel em branco e não pode pq depois vou trabalhar com as variaveis
F
felipealbuquerque
Use um substring() para retirar “null”.
Por exemplo:
returncod.substring(4,cod.length)
C
carllacj
tá certo, vou tentar
L
lvffilho
Se ela ta retornando null eh pq nao ta entrando no while(rs.next())…
vc ja verificou se esta passando por ali?
se vc inicializou ela como null ou “”
e ta colocando coisas dela soh no while e ainda esta vazia eh pq nao entrou la ueh!
C
carllacj
VALEU FELIPE!!!
F
felipealbuquerque
Disponha
V
ViniGodoy
Você pode simplesmente inicializar sua String com “” ao invés de null. Com isso não precisaria nem de um substring. Isso para mim cheira a inserir gambiarra no código, sem entender direito pq o null apareceu por ali.
O null apareceu pq o operador += concatenou o valor atual da sua string (null) com o próximo valor.
Na verdade, o seu código tem uma série de problemas:
Você deveria utilizar um StringBuilder no lugar de uma String;
Você deve garantir que as conexões sejam fechadas;
Você deve criar variáveis apenas no ponto mais próximo onde irá usa-las e, de preferência, já iniciar o seu valor, exemplo:
int aux1 = rs.getInteger(“Disciplina”);
V
ViniGodoy
Um código melhor seria assim:
publicStringlistarCurso(){//Criamos s e rs aqui pq precisaremos usa-las no catch... não dá para ser depois.Statements;ResultSetrs;try{Stringsql="SELECT Disciplinas.CodCurso, Disciplinas.Semestre,Disciplinas.Carga,Disciplinas.Disciplina,Professores.Nome "+" FROM Disciplinas"+" INNER JOIN Professores ON Disciplinas.CodDisciplina = Professores.CodDisciplina"+" ORDER BY Disciplinas.CodCurso, Disciplinas.Semestre";s=this.can.createStatement();rs=s.executeQuery(sql);//Deixamos para criar saída só momentos antes de usa-laStringBuildersaida=newStringBuilder();while(rs.next()){saida.append(rs.getInt("CodCurso"));saida.append(rs.getInt("Semestre"));saida.append(rs.getInt("Carga"));saida.append(rs.getString("Disciplina"));saida.append(rs.getString("Nome"));saida.append("\n");}returnsaida.toString();}catch(Exceptione){System.out.println("Erro listarCurso: "+e);thrownewRuntimeException(e);//Lançamos a exceção em caso de erro}finally{//Temos que garantir que tudo será fechado!!!if(s!=null)s.close();if(rs!=null)rs.close();}}
Outros problemas que encontrei:
1. Ao usar os métodos "get" de um resultset, use o nome do campo, não o número. Deixa o código mais claro.
2. Você pode usar o getString mesmo para pegar inteiros do banco. Eles já retorna como String direto! :)
3. Se ocorreu uma exceção, é melhor trata-la corretamente. Nesse caso, disparei uma exceção de Runtime. Só imprimir a exceção vai fazer seu método continuar, como se nenhum problema tivesse ocorrido (exceto o fato de aparecer um texto no outputstream, que provavelmente não sera visto se sua aplicação rodar em janelas).
4. Também não entendi para que, no código original, você criou a variável saída. Você acabou nem usando. Acho que era para fazer um cabeçalho, certo? Foi isso que fiz nesse código ali em cima.
C
carllacj
VinyGodoy, na verdade a variavel saida não será usada, até ja retirei do codigo, valeu pelas dicas, o objetivo desse método não é imprimi-las, mas sim concatenar os campos para retorna-los em um só string!!! o formato ficaria por exemplo: “113Matematica Aline”, dai tenho que extraí os tres digitos e transforma-los em inteiros para fazer operações com eles!!!