Kinhas 0 Denunciar post Postado Novembro 16, 2011 Bom dia pessoal, tenho um método na minha classe DAO que se chama consultar, Neesse método eu pego os dados do banco de dados e jogo em um objeto, e depois jogo esse objeto rpa uma List, O problema é que essa List fica mostrnaod null e eu não sei porque, segue o código do Método, A primeira parte é só a conexão: public List<Veiculo> consultar(String modelo) { Veiculo v = null; List<Veiculo> carros = null; try { String driverName = "com.mysql.jdbc.Driver"; Class.forName(driverName); // Configurando a nossa conexão com um banco de dados// String serverName = "localhost"; //caminho do servidor do BD String mydatabase = "faculdade"; //nome do seu banco de dados String url = "jdbc:mysql://" + serverName + "/" + mydatabase; String username = "root"; //nome de um usuário de seu BD //String passwordDB = "InuKinhas"; //sua senha de acesso String passwordDB = "Password1"; //sua senha de acesso Connection conn = DriverManager.getConnection(url, username, passwordDB); String mysql = "select id, modelo, placa, kms, montadora, ano from carro where modelo = ?"; PreparedStatement stmt = conn.prepareStatement(mysql); stmt.setString(1, modelo); ResultSet rs = stmt.executeQuery(); int cont = 0; if (rs.next()) { v = new Veiculo(); v.setId(rs.getInt("id")); System.out.println("ID do carro: " + v.getId()); v.setModelo(rs.getString("modelo")); System.out.println("Modelo do carro: " + v.getModelo()); v.setPlaca(rs.getString("placa")); System.out.println("Placa do carro: " + v.getPlaca()); v.setKms(rs.getString("kms")); System.out.println("Kms do carro: " + v.getKms()); v.setMontadora(rs.getString("montadora")); System.out.println("Montadora do carro: " + v.getMontadora()); v.setAno(rs.getString("ano")); System.out.println("Ano do carro: " + v.getAno()); carros.add(cont, v); cont++; } } catch (Exception e) { System.out.println("ERRO: " + e.getMessage()); e.printStackTrace(); } return carros; } Compartilhar este post Link para o post Compartilhar em outros sites
pvpzaum 0 Denunciar post Postado Novembro 16, 2011 É simples é por que a sua variavel é nula por isso esta retornando nulo pois você esta apontando apra um objeto que não existe entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
Kinhas 0 Denunciar post Postado Novembro 16, 2011 Mas Pvpzaum, la dentro do rs.Next(), eu populo o objeto Veiculo e logo em seguida eu jogo o Objeto populado pra dentro da List, Lá em cima eu só criei ela como null, o que será que está errado? EDIT. Pvpzaum consegui fazendo dessa forma: List<Veiculo> carros = new LinkedList(); carros = new ArrayList(); Só isso e já funcionou. Obrigado pela ajuda, porém não entendi porque eu setando inicialmente como null não funciona =// Compartilhar este post Link para o post Compartilhar em outros sites
pvpzaum 0 Denunciar post Postado Novembro 16, 2011 Não funcionou pelo motivo que eu falei o seu objeto é nulo e logo ele não vale nada por isso retorna null independente de você fazer popular ele a frente ou não entendeu? Um exemplo: Uma variavel quando não instanciada é nula ou seja ainda não é um objeto. Objeto a; // a = null; a = new Objeto(); // a deixa de ser null e vira um objeto do tipo Objeto. Seu erro: Veiculo v = null; // v = null List<Veiculo> carros = null; // dentro da lista Veículos carros seria nulo sendo sua lista Veículos ja sendo vazia. Veiculo(Objeto) não servindo para nada. Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
Kinhas 0 Denunciar post Postado Novembro 16, 2011 Mais ou menos, está meio confuso na cabeça, mas logo eu vou entender UHSAUHSuhaUH Obrigado pela explicação. Compartilhar este post Link para o post Compartilhar em outros sites
Vergil 15 Denunciar post Postado Novembro 17, 2011 A explicação é simples. Você pode muito bem deixar do jeito que estava: atribuindo valor null inicialmente para o objeto e para a lista. Entretanto teria que instanciá-los depois. O que acontece é que você recebia um NullPointerException na hora de adicionar o objeto na lista "carros.add(veiculo)". Porém, como estava tudo dentro de um bloco try/catch, o código passava pelo bloco catch, imprimia a pilha de erros e logo depois saía do bloco try/catch retornando a lista que nunca tinha sido instanciado: ou seja, null. Por isso a solução é apenas instanciar a lista antes de usá-la. Pra evitar este tipo de armadilha, é bom sempre colocar dentro do bloco try/catch apenas aquilo que realmente dispara exceção verificada. Compartilhar este post Link para o post Compartilhar em outros sites
Kinhas 0 Denunciar post Postado Novembro 17, 2011 ACho que agora esclareceu um pouco mais, mas mesmo assim eu acho sem sentido essas regras ai SUAHHSAHUSHUA Compartilhar este post Link para o post Compartilhar em outros sites