Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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;
}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 =//
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?
Mais ou menos,
está meio confuso na cabeça,
mas logo eu vou entender UHSAUHSuhaUH
Obrigado pela explicação.
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.
ACho que agora esclareceu um pouco mais,
mas mesmo assim eu acho sem sentido essas regras ai SUAHHSAHUSHUA
É simples é por que a sua variavel é nula por isso esta retornando nulo pois você esta apontando apra um objeto que não existe entendeu?