从下拉列表中获取foreignkey id

时间:2014-12-18 13:47:09

标签: java jsp

我有两张桌子学生桌和部门表, 我的专栏有学生表的student_id,firstname,department_id(foreignkey)。 以及department表的department_id和department_name。 department表中的department_id是自动增量。

这里学生表连接到部门,并将部门的外键作为department_id。在学生表学生部门(department_id(fk))的下拉列表中,将显示所有部门名称,如果我选择1个部门名称。我想获取它的部门ID并将其保存在department_id(foreignkey)中,而不是它自己的department_name。因为我有一个包含 " java.lang.NumberFormatException的错误:对于输入字符串:"数学系""

这是来自我的Servlet类

    String userdepartment= request.getParameter("department_id");

    String userfirstname = request.getParameter("firstname");

    String userlastname = request.getParameter("lastname");

    studentbean.setDepartment_id(userdepartment);

    studentbean.setFirstname(userfirstname);

    studentbean.setLastname(userlastname);

这是我的JSP文件

    <%
        try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection("jdbc:mysql://localhostdb?user=root&password=root");

Statement statement = connection.createStatement() ;

resultset =statement.executeQuery("select * from department") ;

    %>
    <tr>
  <td>Department Name</td>  
         <td><select name="department_id">
            <%  while(resultset.next()){ %>
                <option><%= resultset.getString(2)%></option>
          <% } %>
            </select>
    </td></tr>
    <%
            }
            catch(Exception e)
            {
                 out.println("Error"+e);
            }
    %>

1 个答案:

答案 0 :(得分:1)

首先,提供一些有用的提示:

resultset =statement.executeQuery("select * from department") ;

从不select *始终按照您希望它们显示的顺序指定所需的字段。这很可能是您问题的根源

与此相关,您使用的是数字索引版getString

<option><%= resultset.getString(2)%></option>

也不要这样做。指定所需字段的名称,如下所示:

<option><%= resultset.getString("department_name") %></option>

将SQL直接放入这样的JSP中通常也被认为是不好的做法。最好在servlet中执行此类操作,然后使用请求属性将对象发送到JSP,或者更好地使用框架。但是,这只是一种风格批评,并不会对你的结果造成影响。

现在,关于你的实际问题。希望这两个提示已经让您知道为什么您的代码不起作用,但让我们看一下错误信息。

java.lang.NumberFormatException: For input string: "Math Department"

您的程序(我认为您尚未发布的部分)正在尝试将该下拉菜单的值解码为整数,但"Math Department"。显然,这不是一个数字,所以它会抛出一个错误。您需要做的是将部门名称显示为菜单标签,但将id作为值。因此,查看您的选项标记,您需要执行以下操作:

<option value="<%= resultset.getInt("department_id") %>">
  <%= resultset.getString("department_name") %>
</option>

这将向用户显示部门的名称,但将id发送回servlet进行处理。