.
Inserir FK de uma outra tabela a partir de uma coluna dela
30 Respostas
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>
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
Só precisa mudar aquela parte do código que falei. Tente agora.
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
Espera so um instante que vou fazer aqui e ver se dá certo.
<%@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!
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
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.
.
Você já tentou cadastrar uma raça pela query browser do próprio banco?
Por Favor, posta pra mim o código após renderização da página jsp.
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.
--------------------------------------------------------------------------------
A página antes de você submeter o form. Onde você carregar o select dos dados de espécies.
.
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.
.
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…
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
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");
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.
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)
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.
Assim:
String sqlinsertrac = "insert into raca (rac_nome, rac_especie) values ('nome_raca',1)";
st.executeUpdate(sqlinsertrac);
response.sendRedirect("raca.jsp");
.
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.
hummm
os campos tem q ser not null ou nem?
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.
.
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.
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
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