【问题标题】:calling the same page again does not add datas to the DB再次调用同一页面不会将数据添加到数据库
【发布时间】:2013-03-02 05:49:40
【问题描述】:

我有一个 jsp 页面,它获取两个参数 1 用于添加另一个用于查看。这个 jsp 页面被命名为 sucessAdmin.jsp。我有另一个调用 sucessadmin.jsp 的 jsp 页面 admin1.jsp。 admin1.jsp 有一个表单视图和 add.so,如果我按下视图按钮,它会调用 sucessAdmin.jsp 并显示数据。当我按下添加按钮时,它会显示一个输入数据的表单,但它不会向 mysql DB 添加值。当我再次调用同一页面时,它不会添加数据。请告诉我哪里出错了

这是豆子

package sucessAdmin;
import java.sql.*;
import java.io.*;
import java.util.*;
public class sucessAdmin {
private String question;
private String answer;

private String questionNo;
private String opt1;
private String opt2;
private String opt3;
private String opt4;
public sucessAdmin()
{

}

public void setQuestion(String question)
{
    this.question=question;
}
public String getQuestion()
{
    return question;
}
public void setAnswer(String answer)
{
    this.answer=answer;
}
public String getAnswer()
{
    return answer;
}
public void setQuestionNo(String questionNo)
{
    this.questionNo=questionNo;
}
public String getQuestionNo()
{
    return questionNo;
}
public void setOpt1(String opt1)
{
this.opt1=opt1;
}
public String getOpt1()
{
    return opt1;
}
public void setOpt2(String opt2)
{
this.opt2=opt2;
}
public String getOpt2()
{
    return opt2;
}
public void setOpt3(String opt3)
{
this.opt3=opt3;
}
public String getOpt3()
{
    return opt3;
}
public void setOpt4(String opt4)
{
this.opt4=opt4;
}
public String getOpt4()
{
    return opt4;
}

    public Vector getDetails()
    {
        int x=0;
        Vector v= new Vector();
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/Ontest";
            Connection con=DriverManager.getConnection(url,"root","spanwave");
            ResultSet rs=null;
            Statement st=con.createStatement();
            rs=st.executeQuery("select * from questions");
            String quer="SELECT * FROM questions";

                     rs=st.executeQuery(quer);
                    ResultSetMetaData rsmd = rs.getMetaData();
                    int NumOfCol=0;
                    NumOfCol=rsmd.getColumnCount();
                    System.out.println("Query Executed!! No of Colm="+NumOfCol);
            while(rs.next())
            {

                for(int i=1;i<NumOfCol+1;i++)
                {
                    if(i==NumOfCol)
                        {System.out.print(rs.getString(i));System.out.println();}else
                System.out.print(rs.getString(i)+" ");
                    v.addElement(rs.getString(i));
                }


            }

        }
        catch(Exception e)
        {
            System.out.println(e);
        }
        return v;
    }
    public void addDetails(String question,String opt1,String opt2,String opt3,String opt4,String questionNo,String answer)
    //public void addDetails()
    {
        int qnNo=0;

        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/Ontest";
            Connection con=DriverManager.getConnection(url,"root","spanwave");
            ResultSet rs=null;
            qnNo=Integer.parseInt(questionNo);
            PreparedStatement ptst=con.prepareStatement("insert into questions values(?,?,?,?,?,?,?)");
ptst.setString(1,question );
ptst.setString(2,opt1 );
ptst.setString(3,opt2 );
ptst.setString(4,opt3 );
ptst.setString(5,opt4 );
ptst.setInt(6, qnNo);
ptst.setString(7,answer);
ptst.executeUpdate();

                    int NumOfCol=0;
                    System.out.println("Query Executed!! No of Colm="+NumOfCol);

    }
        catch(Exception e)
        {
            System.out.println(e);
        }


}
}

这是调用页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<jsp:useBean id="admin" scope="request" class="admin.adminBean">
<jsp:getProperty property="userId" name ="admin"/>
</jsp:useBean>
<jsp:useBean id="sucessAdmin" scope ="request" class="sucessAdmin.sucessAdmin"></jsp:useBean>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><jsp:getProperty property="userId" name ="admin"/></title>
</head>
<body bgcolor="pink">
<form action="details.jsp" method="get">
view questions<input type="radio" name="details" value="view"><br>
edit questions
<input type="radio" name="details" value="edit"><br>
add questions

<input type="radio" name="details" value="add"><br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>

这是被调用的页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ page import="java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><jsp:useBean id="sucessAdmin" scope ="request" class="sucessAdmin.sucessAdmin">

</jsp:useBean>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Details</title>
</head>
<body>

<%String input; %>
<%=input=request.getParameter("details") %>
<%if (input.equals("view")) {
    %><%Vector v; %>
    <%v=(Vector)sucessAdmin.getDetails();
out.println(sucessAdmin.getDetails()); }
%><%
if(input.equals("add"))
    {out.println("addds");
    %>
    <form method="POST" action="details.jsp">
<table>
<tr>
<td>question<input type="text" name="question" value="" /></td>
</tr>
<tr>
<td>opt1<input type="text" name="opt1" value="" /></td>
</tr>
<tr>
<td>opt2<input type="text" name="opt2" value="" /></td>
</tr>
<tr>
<td>opt3<input type="text" name="opt3" value="" /></td>
</tr>


<tr>
<td>opt4<input type="text" name="opt4" value="" /></td>
</tr>
<tr>
<td>questionNumber<input type="text" name="questionNo" value="" /></td>
</tr>
<tr>
<td>answer<input type="text" name="answer" value="" /></td>
</tr>




</table><br><input type="hidden" name="details"/>
<br><input type="submit" name="submit" value="submit"/>
<%sucessAdmin.addDetails("question","opt1","opt2","opt3","opt4","questionNo","answer");%>
</form>

    <%out.println("adding");}
%>
</body>
</html>

【问题讨论】:

  • 好吧,在 PHP 中,我只需在 $_SESSION[] 中的会话数据中添加一个标志 - 你有类似的东西吗?或者您可以在第二轮表单中添加一个隐藏字段作为这样的标志吗?或者,在第二次生成表单时,将所有输入字段标记为只读...
  • 您是否检查过连接的自动提交设置?例如,请参阅this Post 的答案。
  • @collapsar 实际上我很抱歉上面的问题。我没有得到想要的输出,因为它会被捕获并且我没有显示任何东西。现在,当我检查时,我发现并解决了错误。但我需要你的另一个帮助。我在 mysql 表中有 questionNo 字段,它是 INT 类型。现在告诉我如何在那里添加数据。因为从表单中我可以将数据作为字符串,我已经将它转换为 INT,但它仍然没有添加到表中。

标签: java mysql jsp javabeans


【解决方案1】:
replace <%sucessAdmin.addDetails("question","opt1","opt2","opt3","opt4","questionNo","answer");%>

<% 
      String question = request.getParameter("question");
      String opt1= request.getParameter("opt1");
      String opt2 = request.getParameter("opt2");
      String opt3 = request.getParameter("opt3");
      String opt4 = request.getParameter("opt4");
      String questionNo = request.getParameter("questionNo");
      String answer = request.getParameter("answer");
      if(question!=null && opt1!=null && opt2 != null
         opt3!=null && opt4 !=null && questionNo!=null && answer!=null) 
      {
           sucessAdmin.addDetails(question,opt1,opt2,opt3,opt4,questionNo,answer);
       }
   %>

试试这个,希望它有效..

【讨论】:

  • 感谢您的建议,但这不会运行,因为我使用的是 bean,并且我发布的代码在 addDetails 页面中有争论,仅用于测试目的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 2013-10-16
  • 1970-01-01
  • 2017-04-19
  • 2017-07-13
  • 2014-07-14
  • 2015-01-29
相关资源
最近更新 更多