Preencher campos em tabelas diferentes

2 respostas
AndLobo

Boa tarde a todos, tenho o seguinte problema, no meu banco de dados tenho duas tabelas: jogador e posição. Tenho uma tela feita em jsp, quando preencho o campo posição, está se referindo a posição q o jogador joga. Estou conseguindo cadastrar o jogador. Neste campo Posição, quero redirecionar o preenchimento deste campo para a tabela posicao, estou com dificuldades para implementar isto no código. Quero fazer isto no JogadorDao. Pq se ñ teria q fazer um PosicaoDao, aí daria para popular a tabela posicao

Codigo JogadorDao
package br.com.Projeto.Dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.Projeto.bean.Jogador;
import br.com.Projeto.bean.Posicao;

public class JogadorDAO {
	private Connection conexao;

	public JogadorDAO() throws SQLException {

		this.conexao = new ConnectionFactory().getConnection();
	}

	public void adicionaJogador(Jogador jogador) throws SQLException {
		String sql = "insert into jogador(codigo_registro,nome,data_nascimento)"
				+ "value(?,?,?)";

		PreparedStatement stm = conexao.prepareStatement(sql);

		stm.setString(1, jogador.getCdRegistro());
		stm.setString(2, jogador.getNomeJog());
		stm.setDate(3, new Date(jogador.getDtNascimento().getTimeInMillis()));
		

		stm.execute();
		stm.close();
		conexao.close();
	}

	public List<Jogador> recuperarJogador() throws SQLException {
		String sql = "select * from jogador";
		PreparedStatement stm = conexao.prepareStatement(sql);

		ResultSet rs = stm.executeQuery();

		List<Jogador> jogadores = new ArrayList<Jogador>();
		while (rs.next()) {
			Jogador j = new Jogador();
			j.setId(rs.getLong("id_jogador"));
			j.setNomeJog(rs.getString("nome"));

			Calendar data = Calendar.getInstance();
			data.setTime(rs.getDate("data_nascimento"));

		}

		rs.close();
		stm.close();
		conexao.close();
		return jogadores;
	}

	public void adicionaPosicao(Posicao posicao) throws SQLException {  //aqui pensei que, quando eu preenchece o campo posição iria adicionar na tabela posicao
		String sql = "insert into posicao(id_posicao, nome_posicao)"
				+ "values(?,?)";

		PreparedStatement stm = conexao.prepareStatement(sql);

		stm.setString(1, posicao.getId());
		stm.setString(2, posicao.getNomePosicao());

		stm.execute();
		stm.close();

	}

	public List<Posicao> recuperaPosicaos() throws SQLException {
		String sql = "select from posicao";

		PreparedStatement stm = conexao.prepareStatement(sql);

		ResultSet rs = stm.executeQuery();

		List<Posicao> posicaos = new ArrayList<Posicao>();
		while (rs.next()) {
			Posicao p = new Posicao();
			p.setId(rs.getString("id_posicao"));
			p.setNomePosicao(rs.getString("nome_posicao"));
		}
		rs.close();
		stm.close();
		conexao.close();
		return posicaos;

	}

}
A servlet:
package br.com.Projeto.servlet;

import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.Projeto.Dao.JogadorDAO;
import br.com.Projeto.bean.Jogador;

public class AdicionaJogador extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Jogador jogador = new Jogador();
		jogador.setNomeJog(request.getParameter("nome"));
		jogador.setCdRegistro(request.getParameter("cdRegistro"));
		
		SimpleDateFormat sf = new SimpleDateFormat("dd/MM/yyyy");
		Date dtNascimento = null;
		
		try {
			dtNascimento = sf.parse(request.getParameter("dtNascimento"));
		} catch (ParseException e) {
			e.printStackTrace();
			response.sendRedirect("/projetoFinalJspServlet/erro.jsp");
		}
		
		Calendar dtNascimentoCalendar = Calendar.getInstance();
		dtNascimentoCalendar.setTime(dtNascimento);
		
		jogador.setDtNascimento(dtNascimentoCalendar);
		jogador.setIdPosicao(request.getParameter("idPosicao"));
		jogador.setIdTime(request.getParameter("idTime"));
		
		if(request.getParameter("id").isEmpty()){
			try {
				JogadorDAO dao = new JogadorDAO();
				dao.adicionaJogador(jogador);
				response.sendRedirect("/projetoFinalJspServlet/sucesso.jsp");
			} catch (SQLException e) {
				e.printStackTrace();
				response.sendRedirect("/projetoFinalJspServlet/erro.jsp");
			} 
			
		}
	}

}
Jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Tela para adicionar jogadores</title>
</head>
<body>
	<center>
		<h2>Registrar jogadores</h2>
	</center>

	<center>
	<form action="AdicionaJogador" method="get">
		 
		 <table border="5">
		 <input type="hidden" name="id" value="${Jogador.id }">
		       <tr>
		            <td>Nome:</td>
		            <td><input type="text" value="${Jogador.nome }" name="nome" size="40">		
		       </tr>
		       
 		       <tr>
		           <td>Data de Nascimento:</td>
		           <td><input type="text" value="<fmt:formatDate value='${Jogador.dtFndacao.jogador}' pattern='dd/MM/yyyy'/>" name="dtNascimento" size="40" maxlength="10"></td>
		       </tr>
		       <tr>
		           <td>Posição:</td>
		           <td><input type="text" value="${Jogador.Posicao }" name="Posicao" size="40"></td>	
		       </tr>
		       <tr>
		           <td>Times:</td>
		            <td>
		          	 <select name="idTime" class="times"> //aqui ñ sei mandar a lista para a tela
		           	  <option value="">Selecione:</option>
		                    <c:forEach var="nome_time" items="${recuperarTimes}">
		                       <option value="${Jogador.nome_time }">${nome_time.Time }</option>
		                    </c:forEach>
		           	</select>
		            </td> 	  
		       </tr>  
		       <tr>
		           <td>Código de Registro:</td>	
		           <td><input type="text" value="${Jogador.cdRegistro }" name="cdRegistro" size="40"> </td>
		       </tr>
		      
	  	       <tr>
		           <td colspan="2" align="center">
		           <input type="submit" name="Gravar" value="Gravar"></td>
		 
		      </tr>
		 </table>    
	</form>
	</center>

</body>
</html>

Também to com outro problema, quero preencher um combobox com os times ja cadastrados na tabela time.

List de times
public List<Time> recuperarTimes() throws SQLException {
		String sql = " SELECT * FROM time";
		conexao = getConection().getConnection();
		PreparedStatement stm = conexao.prepareStatement(sql);

		ResultSet rs = stm.executeQuery();

		List<Time> times = new ArrayList<Time>();
		while (rs.next()) {
			Time t = new Time();
			t.setId(rs.getString("id_time"));
			t.setCdRegistro(rs.getString("codigo_registro"));
			t.setNomeTime(rs.getString("nome_time"));

			Calendar data = Calendar.getInstance();
			data.setTime(rs.getDate("data_fundacao"));

			t.setDtFundacao(data);
			times.add(t);

		}
		rs.close();
		stm.close();
		conexao.close();

		return times;
	}
}

Alguém poderia dá uma idéia.

2 Respostas

mateuscs

Você irá ter que popular as duas tabelas.
Crie metodos para isso

jogadorInserePosicao()
campoInserePosicaoJogador()

Ambas utilizando dao com os sets de banco.

AndLobo

mateuscs:
Você irá ter que popular as duas tabelas.
Crie metodos para isso

jogadorInserePosicao()
campoInserePosicaoJogador()

Ambas utilizando dao com os sets de banco.

Mas é isso que ñ estou sabendo fazer.

Criado 11 de agosto de 2011
Ultima resposta 11 de ago. de 2011
Respostas 2
Participantes 2