Me AJUDEM a tirar esse null!

11 respostas
C

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??

public String listarCurso()

{

String cod = null;

try

{

String sql = 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;

Statement s = this.can.createStatement();

ResultSet rs = s.executeQuery(sql);

int aux1,aux2,aux3;

String a1, a2, a3, a4, a5, a6;

String saida = REGISTRO DE LOCAÇÕES;

saida = “\t\t\tRegistro Geral\n\n;

while(rs.next())

{

aux1 = rs.getInt(1);

aux2 = rs.getInt(2);

aux3 = rs.getInt(3);

a1 = Integer.toString(aux1);

a2 = Integer.toString(aux2);

a3 = Integer.toString(aux3);

a4 = rs.getString(4);

a5 = rs.getString(5);

cod += “\n+ a1+a2+a3+a4+a5;

}

}

catch(Exception e)

{

System.out.println("Erro listarCurso: " + e);

}

return cod;

}

11 Respostas

P

Porque não fez assim

String cod = “”;

C

pq dá no mesmo, vai sair uma variavel em branco e não pode pq depois vou trabalhar com as variaveis

F

Use um substring() para retirar “null”.

Por exemplo:

return cod.substring(4, cod.length)
C

tá certo, vou tentar

L

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

VALEU FELIPE!!!

F

Disponha :smiley:

V

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:

  1. Você deveria utilizar um StringBuilder no lugar de uma String;
  2. Você deve garantir que as conexões sejam fechadas;
  3. 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
Um código melhor seria assim:
public String listarCurso() {
    //Criamos s e rs aqui pq precisaremos usa-las no catch... não dá para ser depois.
    Statement s;
    ResultSet rs;
    
    try 
    {        
        String sql = "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-la
        StringBuilder saida = new StringBuilder();
        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");
        }
        return saida.toString();
    } 
    catch(Exception e) 
    { 
        System.out.println("Erro listarCurso: " + e);
        throw new RuntimeException(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

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!!!

V

Nesse caso, é só deixar como arrumei ali em cima! :slight_smile:

Criado 8 de novembro de 2007
Ultima resposta 9 de nov. de 2007
Respostas 11
Participantes 5