olá, eu fiz uma agenda com nome, email, dt. nascimento e telefone. e criei um BD com duas tabelas, uma tabela de contatos, e outra de telefone, pois telefone é multivalorado, não consigo trabalhar com as duas tabelas, quero adicionar um contato com nome, email, e data de nascimento na tabela contato,e telefones na tabela telefone, não sei como trablhar em java com chave primaria em duas tabelas, sou iniciante… se alguem ajudar desde jah agradeço
Problema com banco de dados (Atributos multivalorados)
34 Respostas
package Agenda;
import Agenda.Contato;
import Dao.ContatoDao;
import java.sql.Date;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.swing.*;
public class ContatoController {
private Date formatarData(String data) throws ParseException{
DateFormat formatter = new SimpleDateFormat ("dd/MM/yyyy");
return new Date(formatter.parse(data).getTime());
}
public void salvar(String nome, String email, String dtNascimento, String telefone, String celular) throws SQLException,
ParseException{
Contato contato = new Contato();
contato.setNome(nome);
contato.setEmail(email);
contato.setData_nascimento(formatarData(dtNascimento));
contato.setTelefone(telefone);
contato.setCelular(celular);
new ContatoDao().salvar(contato);
}
public void alterar( long id, String nome, String email, String dtNascimento, String telefone, String celular) throws SQLException,
ParseException{
Contato contato = new Contato();
contato.setId(id);
contato.setNome(nome);
contato.setEmail(email);
contato.setData_nascimento(formatarData(dtNascimento));
contato.setTelefone(telefone);
contato.setCelular(celular);
new ContatoDao().alterar(contato);
}
public List<Contato>listaContatos(){
ContatoDao dao = new ContatoDao();
try{
return dao.findContatos();
}catch(SQLException e){
JOptionPane.showMessageDialog(null, "Não foi possivel localizar esse contato\n" +
e.getLocalizedMessage());
}
return null;
}
public void excluir (long id) throws SQLException{
new ContatoDao().excluir(id);
}
public Contato buscaContatoPorNome(String nome) throws SQLException{
ContatoDao dao = new ContatoDao();
return dao.finfByName(nome);
}
}
package Agenda;
import java.sql.*;
public class ConnectionDataBase {
private static final String URL_MYSQL = "jdbc:mysql://localhost/agenda";
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String USER = "root";
private static final String PASS = "root123";
public static Connection getConnetion (){
try{
Class.forName(DRIVER_CLASS);
return DriverManager.getConnection(URL_MYSQL, USER, PASS);
}catch (ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e){
throw new RuntimeException(e);
}
return null;
}
}
package Dao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import Agenda.Contato;
import Agenda.GenericDao;
public class ContatoDao extends GenericDao {
public void salvar(Contato contato) throws SQLException{
String insert = " INSERT INTO CONTATOS ( nome, email, data_nascimento) VALUES (?,?,?)";
save(insert, contato.getNome(), contato.getEmail(), contato.getData_nascimento());
}
public void alterar (Contato contato) throws SQLException{
String update = "UPDATE CONTATOS"+
"SET nome = ?, email = ? , data_nascimento = ?"+
"WHERE id = ?";
update(update, contato.getId(), contato.getNome(), contato.getEmail(), contato.getData_nascimento());
}
public void excluir (long id) throws SQLException{
String delete = "DELETE FROM CONTATOS WHERE id= ?";
delete(delete, id);
}
public List<Contato> findContatos() throws SQLException{
List<Contato> contatos = new ArrayList<Contato>();
String select = "SELECT * FROM CONTATOS";
PreparedStatement stmt = getConnection().prepareStatement(select);
ResultSet rs = stmt.executeQuery();
while (rs.next()){
Contato contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setData_nascimento(rs.getDate("data_nascimento"));
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
}
public Contato finfByName(String nome) throws SQLException{
String select = " SELECT * FROM CONTATOS WHERE nome = ?";
Contato contato = null;
PreparedStatement stmt = getConnection().prepareStatement(select);
stmt.setString(1, nome);
ResultSet rs = stmt.executeQuery();
while (rs.next()){
contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setData_nascimento(rs.getDate("data_nascimento"));
contato.getTelefone();
}
rs.close();
stmt.close();
return contato;
}
}
package Frame;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import Agenda.Contato;
import Agenda.ContatoController;
@SuppressWarnings("serial")
public class ContatoFrame extends JFrame {
private JLabel lbNome, lbEmail, lbDtNascimento, lbTelefone, lbCelular;
private JTextField txtNome, txtEmail, txtDtNascimento, txtLocalizar, txtTelefone, txtCelular;
private JButton btnSalvar, btnAlterar, btnExcluir, btnClear, btnLocalizar;
private JButton btnPrimeiro, btnProximo, btnAnterior, btnUltimo;
private List<Contato> contatoList = new ContatoController().listaContatos();
private int registroAtual = 0;
public ContatoFrame() {
super("Contatos");
Container tela = getContentPane();
setLayout(null);
lbNome = new JLabel("Nome");
lbEmail = new JLabel("Email");
lbDtNascimento = new JLabel("Data de Nascimento(dd/mm/aaaa)");
lbTelefone = new JLabel("Telefone ");
lbCelular = new JLabel ("Celular ");
lbNome.setBounds(10, 10, 240, 15);
lbEmail.setBounds(10, 50, 240, 15);
lbDtNascimento.setBounds(10, 90, 240, 15);
lbTelefone.setBounds(10, 130, 240, 15);
lbCelular.setBounds(10, 170, 240, 15);
lbNome.setForeground(Color.BLACK);
lbEmail.setForeground(Color.BLACK);
lbDtNascimento.setForeground(Color.BLACK);
lbTelefone.setForeground(Color.BLACK);
lbCelular.setForeground(Color.BLACK);
lbNome.setFont(new Font("Courier New", Font.BOLD, 14));
lbEmail.setFont(new Font("Courier New", Font.BOLD, 14));
lbDtNascimento.setFont(new Font("Courier New", Font.BOLD, 14));
lbTelefone.setFont(new Font("Courier New", Font.BOLD, 14));
lbCelular.setFont(new Font("Courier New", Font.BOLD, 14));
tela.add(lbNome);
tela.add(lbEmail);
tela.add(lbDtNascimento);
tela.add(lbTelefone);
tela.add(lbCelular);
txtNome = new JTextField();
txtEmail = new JTextField();
txtDtNascimento = new JTextField();
txtTelefone = new JTextField();
txtCelular = new JTextField();
txtNome.setBounds(10, 25, 370, 20);
txtEmail.setBounds(10, 65, 370, 20);
txtDtNascimento.setBounds(10, 105, 370, 20);
txtTelefone.setBounds(10, 145, 370, 20);
txtCelular.setBounds(10, 185, 370, 20);
tela.add(txtNome);
tela.add(txtEmail);
tela.add(txtDtNascimento);
tela.add(txtTelefone);
tela.add(txtCelular);
btnSalvar = new JButton("Salvar");
btnAlterar = new JButton("Alterar");
btnExcluir = new JButton("Excluir");
btnClear = new JButton("Limpar");
btnPrimeiro = new JButton("|<");
btnAnterior = new JButton("<<");
btnProximo = new JButton(">>");
btnUltimo = new JButton(">|");
btnSalvar.setBounds(10, 250, 80, 20);
btnAlterar.setBounds(110, 250, 80, 20);
btnExcluir.setBounds(300, 250, 80, 20);
btnClear.setBounds(210, 250, 75, 20);
tela.add(btnSalvar);
tela.add(btnAlterar);
tela.add(btnExcluir);
btnPrimeiro.setBounds(50, 210, 75, 20);
btnAnterior.setBounds(120, 210, 75, 20);
btnProximo.setBounds(180, 210, 75, 20);
btnUltimo.setBounds(255, 210, 75, 20);
tela.add(btnPrimeiro);
tela.add(btnAnterior);
tela.add(btnClear);
tela.add(btnProximo);
tela.add(btnUltimo);
JLabel lbLocalizar = new JLabel("Localizar por nome");
lbLocalizar.setBounds(10, 280, 230, 20);
txtLocalizar = new JTextField();
txtLocalizar.setBounds(10, 300, 280, 20);
btnLocalizar = new JButton("Buscar");
btnLocalizar.setBounds(300, 298, 80, 20);
tela.add(lbLocalizar);
tela.add(txtLocalizar);
tela.add(btnLocalizar);
setSize(400, 365);
setVisible(true);
setLocationRelativeTo(null);
btnSalvar.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickSalvar();
}
}
);
btnAlterar.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickAlterar();
}
}
);
btnExcluir.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickExcluir();
}
}
);
btnClear.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
clearFields();
registroAtual = 0;
}
}
);
btnLocalizar.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickLocalizar();
}
}
);
btnPrimeiro.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickPrimeiro();
}
}
);
btnAnterior.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickAnterior();
}
}
);
btnProximo.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickProximo();
}
}
);
btnUltimo.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
onClickUltimo();
}
}
);
}
private void onClickUltimo() {
registroAtual = contatoList.size() - 1;
getValores(registroAtual);
}
private void onClickProximo() {
if (registroAtual != contatoList.size() - 1) {
getValores(++registroAtual);
}
}
private void onClickAnterior() {
if (registroAtual != 0) {
getValores(--registroAtual);
}
}
private void onClickPrimeiro() {
registroAtual = 0;
getValores(registroAtual);
}
private void getValores(int index) {
if (index <= contatoList.size() - 1) {
Contato contatoAtual = contatoList.get(index);
txtNome.setText(contatoAtual.getNome());
txtEmail.setText(contatoAtual.getEmail());
txtTelefone.setText(contatoAtual.getTelefone());
txtCelular.setText(contatoAtual.getCelular());
txtDtNascimento.setText(new SimpleDateFormat("dd/MM/yyyy").format(contatoAtual.getData_nascimento()));
}
}
private void onClickAlterar() {
ContatoController cc = new ContatoController();
long id = contatoList.get(registroAtual).getId();
try {
cc.alterar(id, txtNome.getText(), txtEmail.getText(), txtDtNascimento.getText(), txtTelefone.getText(), txtCelular.getText());
JOptionPane.showMessageDialog(this, "Contato alterado com sucesso!");
clearFields();
contatoList = new ContatoController().listaContatos();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Nao foi possivel alterar contato!\n" + e.getLocalizedMessage());
} catch (ParseException e) {
JOptionPane.showMessageDialog(this, "Data possui formato inválido!\n" + e.getLocalizedMessage());
}
}
private void onClickSalvar() {
ContatoController cc = new ContatoController();
try {
cc.salvar (txtNome.getText(), txtEmail.getText(), txtDtNascimento.getText(), txtTelefone.getText(), txtCelular.getText());
JOptionPane.showMessageDialog(this, "Contato salvo com sucesso!");
clearFields();
contatoList = new ContatoController().listaContatos();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Nao foi possivel salvar contato!\n" + e.getLocalizedMessage());
} catch (ParseException e) {
JOptionPane.showMessageDialog(this, "Data possui formato inválido!\n" + e.getLocalizedMessage());
}
}
private void onClickExcluir() {
ContatoController cc = new ContatoController();
long id = contatoList.get(registroAtual).getId();
try {
cc.excluir(id);
JOptionPane.showMessageDialog(this, "Contato excluido com sucesso!");
clearFields();
contatoList = new ContatoController().listaContatos();
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Nao foi possivel excluir o contato!\n" + e.getLocalizedMessage());
}
}
private void onClickLocalizar() {
ContatoController cc = new ContatoController();
try {
Contato c = cc.buscaContatoPorNome(txtLocalizar.getText());
txtNome.setText(c.getNome());
txtEmail.setText(c.getEmail());
txtDtNascimento.setText(new SimpleDateFormat("dd/MM/yyyy").format(c.getData_nascimento()));
txtTelefone.setText(c.getTelefone());
txtCelular.setText(c.getCelular());
} catch (SQLException e) {
JOptionPane.showMessageDialog(this, "Ocorreu um erro, tente novamente!\n" + e.getLocalizedMessage());
} catch (NullPointerException e){
JOptionPane.showMessageDialog(this, "Contato não localizado ou não existe!\n" + e.getLocalizedMessage());
}
}
private void clearFields() {
txtNome.setText("");
txtEmail.setText("");
txtDtNascimento.setText("");
txtLocalizar.setText("");
txtTelefone.setText("");
txtCelular.setText("");
}
public static void main(String[] args) {
ContatoFrame frame = new ContatoFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
jah tenho as tabelas criadas no banco de dados, se vcs presizarem mando os codigos dela tb… desde jah agradeço a todos… abraços
é a primeira vez q tento programar com chave primaria, e multivalorados… sou iniciante estudante…
e tb n tah todos os codigos q eu fiz ae, se precisar coloco o restante…
se precisar mando o restante dos codigos q eu fiz, n estão todos ae…
Iniciante e já ralou tudo isso ? Eu diria que está indo bem, colega !!
Bom, se quer fazer bonito no banco de dados, comece criando a foreign key entre as tabelas CONTATOS e TELEFONES (estou supondo que este é o nome da tabela já que não está aí). Se tiver dúvidas com essa etapa poste o script de criação das duas tabelas.
Para te explicar o que vem depois acho que fica mais fácil olhando o código do GenericDao. Pelo seguinte: imagine que você vai salvar um contato novo. Precisa obter o ID que ele vai gerar e então passá-lo como valor para o campo ID que vai existir na tua tabela TELEFONES. Como estás usando jdbc por baixo disso tudo, tem um método chamado getGeneratedKeys() da classe Statement que vai te dar exatamente isso. Veja esse exemplo: http://dev.mysql.com/tech-resources/articles/autoincrement-with-connectorj.html. O que não ficar claro pra você volte a postar e a galera não te faltará em ajuda.
obrigado amigo, mas tenho as tabelas prontas, mas o problema é que quero pegar o Id de uma pessoa e atribuir a tebela telefone, com isso posso identificar qual pessoa tem os telefones, mas não consigo fazer isso, inserir os dados nas duas tabelas, esse é o problema… obrigado
create table telefone(
id int not null,
telefone varchar(13) not null,
constraint pktelefone primary key (id, telefone),
constraint fktelefoneContatos foreign key (id)
references contatos (id)
on update cascade
on delete cascade
);
minha tabela telefone, ae tenho a tabela contatos com id, nome, email, data de nascimento, o id está com auto_increment… obrigado
agora tenho q inserir os dados nas duas tabelas…
Posta o método save() do teu GenericDao. Partindo dele acho que consigo te dar uma idéia de como fazer.
package Agenda;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class GenericDao {
private Connection connection;
protected GenericDao(){
this.connection = ConnectionDataBase.getConnetion();
}
protected Connection getConnection(){
return connection;
}
protected void save(String insertSql, Object... parametros)throws SQLException{
PreparedStatement pstmt = getConnection().prepareStatement(insertSql);
for (int i=0; i<parametros.length; i++){
pstmt.setObject(i+1, parametros[i]);
}
pstmt.execute();
pstmt.close();
}
protected void update (String updateSql, Object id, Object... parametros) throws SQLException{
PreparedStatement pstmt = getConnection().prepareStatement(updateSql);
for (int i=0; i<parametros.length; i++){
pstmt.setObject(i+1, parametros[i]);
}
pstmt.setObject(parametros.length + 1, id);
pstmt.execute();
pstmt.close();
}
protected void delete(String deleteSql, Object... parametros) throws SQLException{
PreparedStatement pstmt = getConnection().prepareStatement(deleteSql);
for (int i=0; i<parametros.length; i++){
pstmt.setObject(i+1, parametros[i]);
}
pstmt.execute();
pstmt.close();
}
}
Reescrevendo o método save para algo como isso, você vai ter o retorno do ID do contato que salvou.
protected int save(String insertSql, Object... parametros)throws SQLException{
PreparedStatement pstmt = getConnection().prepareStatement(insertSql,Statement.RETURN_GENERATED_KEYS);
for (int i=0; i<parametros.length; i++){
pstmt.setObject(i+1, parametros[i]);
}
pstmt.execute();
Resultset rs = pstm.getGeneratedKeys();
int retorno = -1;
if(rs.next()){
retorno = rs.getInt("ID");
}
rs.close();
pstmt.close();
return retorno;
}
public void salvar(Contato contato) throws SQLException{
String insertContato = " INSERT INTO CONTATOS ( nome, email, data_nascimento) VALUES (?,?,?)";
String insertTelefones = "INSERT INTO TELEFONES(id, telefone) values(?,?)";
int id = save(insertContato, contato.getNome(), contato.getEmail(), contato.getData_nascimento());
if(id > -1){
save(insertTelefones, id, contato.getTelefone());
save(insertTelefones, id, contato.getCelular());
}
}
Palpite de um cara já sonolento... não testei mas tá nesse rumo aí. Continue postando qualquer problema
agora tah dando o erro “column “id” not found”, oq q tah acontecendo, não sei pra onde correr… hehe… abraços
consegui aki amigo, é desse jeito msm, só esta com um erro no seu codigo
protected int save(String insertSql, Object... parametros)throws SQLException{
PreparedStatement pstmt = getConnection().prepareStatement(insertSql,Statement.RETURN_GENERATED_KEYS);
for (int i=0; i<parametros.length; i++){
pstmt.setObject(i+1, parametros[i]);
}
pstmt.execute();
Resultset rs = pstm.getGeneratedKeys();
int retorno = -1;
if(rs.next()){
retorno = rs.getInt(1);
}
rs.close();
pstmt.close();
return retorno;
}
tem q retornar 1 e não “ID”, obrigado, agora vou tentar arrumar os outros erros, valeu msm amigão… agradeço mt
agora tah dano erro ao listar os contatos, alguem pode dá uma luz, arruma um problema mais aparece outro, mas é assim q se aprende… obrigado
obrigado
Se ainda estiver com erro posta qual é pra galera ver.
olá agora tah dando erro ao buscar o contato, está imprimindo nome, email, dt de nascimento, ams não imprime os telefones, eu sei q está errado o metodo de busca mas não tenho ideia de como fazer, e tb outro erro é que quando quero excluir um contato, exclui, mas esxclui o contato errado, não e que eu quero excluir de verdade…
na minha opinião o erro esta na classe ContatoDao… desde jah agradeço
Se liga nesse select dentro do método findContatos():
Você está buscando dados somente na tabela contatos… os telefones estão em outra tabela, certo ? Seria isso:
Só que agora a porca torce o rabo… essa consulta vai retornar uma linha pra cada telefone que o cara tiver. Como você vai saber que o primeiro é celular e o outro é residencial ou vice-versa ?
não tem problema não, eu só usei o celualar como uma variavél, eu mudei aki, e coloquei telefone 1 e telefoene 2…hehe
eu não sabia fazer consulta com java, aprendí na facul os comandos só no banco de dados msm… vou testar aki, e te falo… valeu amigão
mesmo assim não deu certo… não tah imprimindo na tela os telefones… 
ah, mas peraí… te contei o começo da estória… Seu primeiro problema é que não estava buscando os telefones. Agora que está, tem que atribuí-los no seu objeto contato.
Logo depois desse select você tem isso:
while (rs.next()){
Contato contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setData_nascimento(rs.getDate("data_nascimento"));
se você acrescentar:
esse é o caminho… veja bem: estou “supondo” um método setTelefone() na tua classe Contato. Altera aí para o que for exatamente…
é isso msm amigo mas ae dá o erro, Column “telefone” not found… desculpa ficar te pertubando, valeu msm
Sem problemas…
Agora veja… se analisar o código que já escreveu vai encontrar as coisas aí… Veja esse exemplo: quando você escreve
quer dizer que: já conectou com o banco, já executou uma consulta e está percorrendo o resultado dessa consulta. Que está dentro de teu objeto rs que é um ResultSet. o rs.getString(“nome”) está dizendo: “ei, rs (que eu sei que você é um ResultSet)… me dê aí o valor do campo nome que está na consulta que foi executada… e quero isso pra hoje !!” O rs vai te retornar o valor se ele achar um campo chamado “nome” na consulta.
Veja em sua consulta qual é o nome do campo que corresponde ao telefone.
Não se deixe atropelar por uma avalanche de conhecimento. Você está no caminho certo, mas precisa compreender o que está fazendo. E continue postando as dúvidas aí, ajuda não vai te faltar com certeza!!
vou testar aki amigo, mas eu tava achando q o erro era na consulta com o banco de dados, estou entendendo sim, vou continuar tentando aki e te falo, vc foi de grande ajuda....
mas aparece o erro nessa função....public Contato finfByName(String nome) throws SQLException{
String select = " SELECT * FROM CONTATOS WHERE nome = ?";
Contato contato = null;
PreparedStatement stmt = getConnection().prepareStatement(select);
stmt.setString(1, nome);
ResultSet rs = stmt.executeQuery();
while (rs.next()){
contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setData_nascimento(rs.getDate("data_nascimento"));
contato.gsetTelefone(rs.getString("telefone"));
}
rs.close();
stmt.close();
return contato;
}
[code]
}
não tenho certeza, mas acho q tah dando erro, pq a consulta só pesquisa na tabela contatos e não na tabela telefone, eu pensei em fazzer um inner join, mas não sei como… abrigado
Certo bacana. Se você está fazendo isso:
só vai dar certo se na tua tabela CONTATOS lá no banco existir o campo telefone. OU OU OU… se você fizer como mencionei na outra resposta, trocar sua consulta (a instrução SQL) por isso:
"SELECT c.id, c.nome, c.email, c.data_nascimento, t.telefone FROM CONTATOS c, TELEFONES t where t.id = c.id";
Esse formato em que está o select corresponde ao inner join que você pensa ser o que precisa (e é exatamente isso !!!)
ou então… como você mencionou que criou as variáveis telefone 1 e telefone 2… será que você quis dizer que criou os campos telefone 1 e telefone 2 na tabela contatos ? Se for isso, são esses campos que você tem que chamar com o rs.getString("…"). Mas chame os campos pelo nome exato que deu a eles na tabela, e não acho que tenha criado eles com espaço nos nomes
Cara, desculpe… eu sou muito ruim pra explicar
package Dao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import Agenda.Contato;
import Agenda.GenericDao;
public class ContatoDao extends GenericDao {
public void salvar(Contato contato) throws SQLException{
String insertContato = " INSERT INTO CONTATOS ( nome, email, data_nascimento) VALUES (?,?,?)";
String insertTelefones = "INSERT INTO TELEFONE (id, telefone) VALUES (?,?)";
int id = save(insertContato, contato.getNome(), contato.getEmail(), contato.getData_nascimento());
if (id > -1){
save(insertTelefones, id, contato.getTelefone());
save(insertTelefones, id, contato.getCelular());
}
}
public void alterar (Contato contato) throws SQLException{
String update = "UPDATE CONTATOS"+
"SET nome = ?, email = ? , data_nascimento = ?"+
"WHERE id = ?";
update(update, contato.getId(), contato.getNome(), contato.getEmail(), contato.getData_nascimento());
}
public void excluir (long id) throws SQLException{
String delete = "DELETE FROM CONTATOS WHERE id = ?";
delete(delete, id);
}
public List<Contato> findContatos() throws SQLException{
List<Contato> contatos = new ArrayList<Contato>();
String select = "SELECT c.id, c.nome, c.email, c.data_nascimento, t.telefone FROM CONTATOS c, TELEFONE t WHERE t.id = c.id";
PreparedStatement stmt = getConnection().prepareStatement(select);
ResultSet rs = stmt.executeQuery();
while (rs.next()){
Contato contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setData_nascimento(rs.getDate("data_nascimento"));
contato.setTelefone(rs.getString("telefone"));
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
}
public Contato finfByName(String nome) throws SQLException{
String select = "SELECT *FROM CONTATOS WHERE nome = ?";
Contato contato = null;
PreparedStatement stmt = getConnection().prepareStatement(select);
stmt.setString(1, nome);
ResultSet rs = stmt.executeQuery();
while (rs.next()){
contato = new Contato();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setData_nascimento(rs.getDate("data_nascimento"));
//contato.setTelefone(rs.getString("telefone"));
}
rs.close();
stmt.close();
return contato;
}
}
tah assim agora amigo, eu modifiquei as tabelas não, na tabela telefone tenho id, telefone, e na tabela contato, tenho id, nome, email e data de nascimento eu só mudei o nome na JLabel… obrigado
tah dano erro ao buscar por nome… valeu
Sim, porque você só alterou um dos métodos de pesquisa que é o que lista todos. Se lá na busca por nome você repetir o mesmo miolo vai ver que funciona
deu o erro Parameter index of range (1> number of parameters, which is 0).
tô quase desistindo, mts erros conserta um e aprece outro… 
Isso é porque está tentando aprender muita coisa de uma vez só… Não sei qual a pegada na tua faculdade, mas como muita gente por aqui, recomendo as apostilas da Caelum (gratuitas e muito bem montadas).
Voltando ao seu erro… no método de pesquisa por nome… por acaso, escreveste isto:
Essa é a string de consulta correta para esse método. Veja que é diferente da anterior por causa do “and c.nome = ?”. É essa cláusula que fará listar um contato ao invés de todos, como no método anterior.
isso msm amigão, resolvido o problema, vc me ajudou demais, valeu msm… abraços