Inserir FK de uma outra tabela a partir de uma coluna dela

30 respostas
A

.

30 Respostas

Cesimar

Tente esse código. Onde você carrega o select, ponha no value, o valor do esp_codigo.

<label>Nome da Espécie.:
    		<select name="lista_especie" id="lista_especie">
            <%
			     String sql = "select * from especie order by esp_nome";
				 rs = st.executeQuery(sql);
				 while(rs.next())
				 { 
				    System.out.print(request.getParameter("especie"));      
				 %>
                     <option selected="selected" value="<%=rs.getString("esp_codigo")%>"><%=rs.getString("esp_nome")%></option> 
                     
                 <%
				 	 
				 }

                 %>
</select>
A

continua com o mesmo erro

na hora do insert dai eu deixa como lista_especie?

mudei para esp_codigo e tbm não deu certo

Cesimar

Só precisa mudar aquela parte do código que falei. Tente agora.

A

então, fiz isso ae
aquela parte da lista la mudei e coloquei no value o esp_codigo
igual vc mandou
mais continuou com o mesmo erro, ou acho que entendi errado então

Cesimar

Espera so um instante que vou fazer aqui e ver se dá certo.

Cesimar
Testei com Mysql, mas o resultado é o mesmo. A única mudança que fiz além do Banco foi aquele que falei pra vc. De pô o campo value no Select. Eis o código. Lembre-se é preciso ter algum valor na Tabela espécie.
<%@page contentType="text/html" pageEncoding="ISO-8859-1" import="java.sql.*"%>
<!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>JSP Page</title>
    </head>
    <body>
<p  >Cadastro de Raças</p>
 			<%

	 			      Class.forName("com.mysql.jdbc.Driver");
	 		          Connection con = DriverManager.getConnection("jdbc:mysql://localhost/test","root","admin");
				      Statement st = con.createStatement();
					  ResultSet rs;

		if (request.getParameter("acao") == null)
			{
			%>

<form id="frmInserirRaca" name="frmInserirRaca" method="post" action="index.jsp?acao=gravar">
          <label>Código.:
          <input name="tf_codigo" type="text" id="tf_codigo" value="automático" size="15" maxlength="15" disabled="disabled"/>
          </label>
  <p>
            <label>Nome da Raça.:
            <input name="tf_raca" type="text" id="tf_raca" size="50" maxlength="50" />
            </label>
            <label></label>
            </p>
  <p>
   			<label>Nome da Espécie.:
    		<select name="lista_especie" id="lista_especie">
            <%
			     String sql = "select * from especie order by esp_nome";
				 rs = st.executeQuery(sql);
				 while(rs.next())
				 {
				    System.out.print(request.getParameter("especie"));
				 %>
                                 <option selected="selected" value="<%=rs.getString("esp_codig")%>"><%=rs.getString("esp_nome")%></option>

                 <%

				 }

                 %>
                 </select>
            </label>
   			<label></label>
  </p>
<p>
            <label></label>
            <label>
            <input type="submit" name="gravar" id="gravar" value="gravar" />
            </label>
            <label></label>
            <input type="reset" name="Limpar" id="Limpar" value="Limpar" />
  </p>
</form>
        <% }
		   else
		   {

	   		String sqlinsertrac = "insert into raca (rac_nome, rac_especie) values ('"+request.getParameter("tf_raca")+
					  "','"+request.getParameter("lista_especie")+"')";

				   st.executeUpdate(sqlinsertrac);
			  	   response.sendRedirect("index.jsp");



		}%>

        <p> </p>
</body>

</html>

Abraços!

A

puts, fiz as mesmas mudanças lá de somente o campo value, na tabela especie tem especie cadastrada na raça tbm tem raça,

porem qndo eu clico em gravar ele abenda a tela e gera aquela mensagem de erro…
tem alguma ideia do que pode ser?

Tipo assim, o combo box ele traz legal com os valores da especie, mais na hora de gravar é que dá o erro

Cesimar

Bom, pelo que vi seu código tá ok. Tem como vc fazer uma engenharia reversa de suas tabelas? Posta ai por favor. Igual como vc fez no banco que está sendo usado. To aguardando.

A

.

Cesimar

Você já tentou cadastrar uma raça pela query browser do próprio banco?

Cesimar

Por Favor, posta pra mim o código após renderização da página jsp.

A

segue

HTTP Status 500 - 
--------------------------------------------------------------------------------
type Exception report
message 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception 
org.apache.jasper.JasperException: An exception occurred processing JSP page /cadRaca.jsp at line 77

74: 	   		String sqlinsertrac = "insert into raca (rac_nome, rac_especie) values ('"+request.getParameter("tf_raca")+   
75:                       "','"+request.getParameter("lista_especie")+"')";   
76:   
77:                    st.executeUpdate(sqlinsertrac);
78: 			  	   response.sendRedirect("raca.jsp");
79: 				  
80: 	   


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

 root cause 
javax.servlet.ServletException: org.postgresql.util.PSQLException: ERRO: coluna "rac_especie" da relação "raca" não existe
  Posição: 29
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
	org.apache.jsp.cadRaca_jsp._jspService(cadRaca_jsp.java:158)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

 root cause 
org.postgresql.util.PSQLException: ERRO: coluna "rac_especie" da relação "raca" não existe
  Posição: 29
	org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
	org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
	org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
	org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
	org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
	org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:299)
	org.apache.jsp.cadRaca_jsp._jspService(cadRaca_jsp.java:142)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

 note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

--------------------------------------------------------------------------------
Cesimar

A página antes de você submeter o form. Onde você carregar o select dos dados de espécies.

A

.

Cesimar

Só mais uma coisa, quando você entra na página de cadastro, a página renderizado em html para visualização no browser. Preciso que você visualize o código, copie e cole aqui.

A

.

Cesimar

No insert do banco de dados vc ta tentando passar uma String como valor para um campo inteiro. Tire aquelas aspas e tente novamente. Estou aguardando…

A

Assim?

String sqlinsertrac = "insert into raca (rac_nome, rac_especie) values ('"+request.getParameter("tf_raca")+   
                      "','"+request.getParameter(lista_especie)+"')";   
  
                   st.executeUpdate(sqlinsertrac);
			  	   response.sendRedirect("raca.jsp");

se for ainda assim continua o erro

Cesimar
Original:
String sqlinsertrac = "insert into raca (rac_nome, rac_especie) values ('"+request.getParameter("tf_raca")+   
                      "','"+request.getParameter("lista_especie")+"')";   
  
                   st.executeUpdate(sqlinsertrac);
			  	   response.sendRedirect("raca.jsp");
Modificado:
String sqlinsertrac = "insert into raca (rac_nome, rac_especie) values ('"+request.getParameter("tf_raca")+   
                      "',"+request.getParameter("lista_especie")+")";   // quando você passar o valor '' para o banco ele entende como string e dará erro
  
                   st.executeUpdate(sqlinsertrac);
			  	   response.sendRedirect("raca.jsp");

Tente ai.

A

Mudei lá coloquei esse dai
e mesmo assim o codigo de erro continua o mesmo

ele fala

exception 
org.apache.jasper.JasperException: javax.servlet.ServletException: org.postgresql.util.PSQLException: ERRO: coluna "rac_especie" da relação "raca" não existe
  Posição: 29
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
Cesimar

Vamo fazer de um jeito que eh pra tirar todas as duvidas. Faca assim, ponha os valores direto no código de insert. Set os valores manualmente, sem pegar do form. Pra ver se a aplicação está conseguindo realizar o cadastro.

Cesimar

Assim:

String sqlinsertrac = "insert into raca (rac_nome, rac_especie) values ('nome_raca',1)";   
  
        st.executeUpdate(sqlinsertrac);
	response.sendRedirect("raca.jsp");
A

.

Cesimar

Então o problema é como eu pensei. O problema está na sua criação do banco de dados. Não sou muito conhecedor de PostgreSql. Achei estranho, mas pelo que to vendo o erro está na criação. O erro diz que a coluna não é reconhecida. Aconselho você criar suas tabelas novamente. Revise os nomes no seu banco e verifique se colocou os mesmos nomes, ou até mesmo se os outros campos não são Not Null.

A

hummm
os campos tem q ser not null ou nem?

Cesimar

Você algumas colunas para a tabela, mas só está usando duas para testar sua aplicação. Desta forma seria necessário os outros campos (diferentes dos quais você está usando), devem ser Null, pois você não setando estes campos.

A

.

Cesimar

Rapaz, muito estranho. Como falei pra você, fiz o exemplo com MySql, deu certo. Mas não entendo pq tá dando erro no seu. Já que o código está funcional, mas o banco não permite. O que te digo que partindo pro PostgreSQL, já foge do meu conhecimento. A partir daí não posso te ajudar. Galera, quem puder ajudar aqui, agradeço.

Abraços.

A

pow cara mesmo assim muito obrigado, tirou muita duvida q vai me ajudar mto no decorrer do meu projeto
inclusive o pessoal do meu grupo te adicionou la no msn, provavelmente um bruno

para tirar duvidas

Cesimar

Cara, o que você precisar e eu puder te ajudar. Sempre por aqui resolvendo dúvidas dos outros e tirando dúvidas minhas. Precisando e se eu puder ajudar, ajudo na hora.

Abraços

Criado 17 de outubro de 2010
Ultima resposta 17 de out. de 2010
Respostas 30
Participantes 2