Olá a todos …
Estou aprendendo JAVA, porem eu tenho muita dificuldade em entender alguns conceitos …
Já estou a algum tempo tentando entender o funcionamento dos pacotes DAO … para isso eu fiz um como exemplo.
1º Criei o banco estoque, com algumas tabelas … duas delas estão abaixo:

2º Criei a classe ClienteDao
[code]package DAO;
import bean.Cliente;
import conexao.Banco;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
*
-
@author Eduardo
*/
public class ClienteDao {//Inserir
public boolean inserir(Cliente cliente) throws SQLException {
Banco banco = new Banco(); Connection con = null; String sql = "insert into usuario " + "( Id, Nome, Cpf, Id_contato, Id_endereco, Id_categoria, Id_pedido) " + " VALUES(?,?,?,?,?,?,?)"; try { con = banco.conectar(); PreparedStatement ps = (PreparedStatement) con.prepareStatement(sql); ps.setInt(1, cliente.getId()); ps.setString(2, cliente.getNome()); ps.setInt(3, cliente.getCpf()); ps.setInt(4, cliente.getId_contato()); ps.setInt(5, cliente.getId_endereco()); ps.setInt(6, cliente.getId_categoria()); ps.setInt(7, cliente.getId_pedido()); ps.execute(); ps.close(); return true; } catch (SQLException e) { System.err.println("Erro ao inserir na tabela cliente"); e.printStackTrace(); return false; } finally { banco.fechaConexao(con); }}
// Consulta (Lista)
public List getLista() throws SQLException {
Connection con = null; Banco banco = new Banco(); String sql = "select * from cliente"; List<Cliente> listaresultado = new ArrayList<Cliente>(); try { con = banco.conectar(); PreparedStatement stmt = con.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); while (rs.next()) { Cliente c1 = new Cliente(); c1.setId_contato(rs.getInt("id_contato")); c1.setCpf(rs.getInt("Cpf")); c1.setNome(rs.getString("nome")); c1.setId_endereco(rs.getInt("id_endereco")); c1.setId_categoria(rs.getInt("id_categoria")); c1.setId_pedido(rs.getInt("id_pedido")); c1.setId(rs.getInt("id")); listaresultado.add(c1); } rs.close(); stmt.close(); }catch (SQLException e) { System.err.println("Erro na Querry"); e.printStackTrace(); } finally { con.close(); }return listaresultado;
}
//Remove
public void exclui(Integer Id) throws ClienteException {
Connection conn = null;
Banco banco = new Banco();
try {
conn = banco.conectar();
String SQL = "DELETE FROM Usuario WHERE Id = ?";
PreparedStatement comando = conn.prepareStatement(SQL);
comando.setInt(1, Id);
comando.execute();
comando.close();
} catch (Exception e) {
System.out.println("Erro ao tentar deletar usuario: " + e);
throw new ClienteException(
"Erro ao tentar alterar informações de um usuario: "
+ e.getMessage());
} finally {
banco.fechaConexao(conn);
}
}
//Atualizar (Update)
public void update(Cliente cliente) throws ClienteException {
Connection conn = null;
Banco banco = new Banco();
try {
conn = banco.conectar();
String SQL = "UPDATE Cliente SET id = ?, nome = ?, cpf = ?, id_contato = ?, id_endereco = ?, id_categoria = ?, id_pedido = ?, WHERE id = ?";
PreparedStatement comando1 = conn.prepareStatement(SQL);
comando1.setInt(1, cliente.getId());
comando1.setString(2, cliente.getNome());
comando1.setInt(3, cliente.getCpf());
comando1.setInt(4, cliente.getId_contato());
comando1.setInt(5, cliente.getId_endereco());
comando1.setInt(6, cliente.getId_categoria());
comando1.setInt(7, cliente.getId_pedido());
// Executa o comando acima
comando1.execute();
// Fecha o comando executado.
comando1.close();
} catch (Exception e) {
System.out.println("Erro ao tentar alterar usuario: " + e);
throw new ClienteException(
"Erro ao tentar alterar informações de um usuario: "
+ e.getMessage());
} finally {
banco.fechaConexao(conn);
}
}
}[/code]
Agora vem as duvidas …
No 1º metodo da classe, onde é inserido os clientes. É necessario descrever no codigo o item ID (Que se refere ao id do cliente)?
Pois no banco este campo da tabela cliente esta como auto_incremento. Ou a maneira que eu fiz esta correta?
String sql = "insert into usuario " + "( Id, Nome, Cpf, Id_contato, Id_endereco, Id_categoria, Id_pedido) "
+ " VALUES(?,?,?,?,?,?,?)";
E o Id_contato, Id_endereco, Id_categoria, Id_pedido
Esta certo eu inserir eles na classe cliente mesmo?
Pois eles são chaves entrangeiras no BD.
Caso não entendam minhas duvidas, me digam que eu tento explicar de outra forma.
Se alguem puder me ajudar … qualquer correção, explicação ou dica sera muito bem vinda.
Vlw.