【问题标题】:Getting foreignkey id from dropdownlist从下拉列表中获取外键 ID
【发布时间】:2014-12-18 13:47:09
【问题描述】:

我有两张表学生表和部门表, 我的 Column 有学生表的 student_id、firstname、department_id(foreignkey)。 以及部门表的department_id 和department_name。 部门表中的department_id 是自动递增的。

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

这是来自我的 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);
            }
    %>

【问题讨论】:

  • 你能修复你的代码缩进吗?很难理解发生了什么。

标签: java jsp


【解决方案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 进行处理。

【讨论】:

  • 我现在可以获取department_id,但是有问题。当我已经使用我的方法将它添加到数据库时,这是错误“java.lang.NumberFormatException:对于输入字符串:“1””我已经这样做了。 studentbean.setDepartment_id(Integer.parseInt(userdepartment));但我有同样的错误。对不起我的英语不好
  • 看到" 1" 中的空格字符了吗?那是个问题。 parseInt 对它允许的内容非常严格。您需要 trim() 字符串才能成功将其解析为数字。如果您遇到困难,请不要害怕提出新问题,或在此网站上搜索线索。
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
相关资源
最近更新 更多