【问题标题】:Invalid SQL data type error when deleting row from database?从数据库中删除行时出现无效的 SQL 数据类型错误?
【发布时间】:2013-11-27 14:16:39
【问题描述】:

我正在尝试使用 JSP 文件从我的 MS Access 数据库中删除一行。但我在下面收到以下错误。谁知道怎么修它。谢谢。任何帮助将非常感激。

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException:从员工那里删除 empId = ? : [Microsoft][ODBC Microsoft Access Driver]无效的 SQL 数据类型 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

根本原因

javax.servlet.ServletException: javax.servlet.jsp.JspException:
从员工那里删除 empId = ?


代码:JSP 文件。

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<html>
<head>
<title>DELETE Operation</title>
</head>
<body>

<sql:setDataSource
    var = "bookdB"
    scope = "session"
    driver = "sun.jdbc.odbc.JdbcOdbcDriver"
    url = "jdbc:odbc:bookdB"
/>

<c:set var="empId" value="${param['empId']}"/>

<sql:update dataSource="${bookdB}" var="count">
  DELETE FROM Employees WHERE empId = ?
  <sql:param value="${empId}" />
</sql:update>

<sql:query dataSource="${bookdB}" var="result">
   SELECT * from Employees;
</sql:query>

<table border="1" width="100%">
<tr>
   <th></th>
   <th>Emp ID</th>
   <th>First Name</th>
   <th>Last Name</th>
   <th>Age</th>
</tr>

<c:forEach var="row" items="${result.rows}">
<tr>
   <td><a href="?empId=[empId to remove]">Delete</a></td>
   <td><c:out value="${row.empId}"/></td>
   <td><c:out value="${row.first}"/></td>
   <td><c:out value="${row.last}"/></td>
   <td><c:out value="${row.age}"/></td>
</tr>
</c:forEach>
</table>

</body>
</html>

用下面的答案更新后仍然出现错误。有人有什么想法吗???,请您帮忙。谢谢。

【问题讨论】:

    标签: html sql jsp jdbc


    【解决方案1】:

    我认为锚标签有问题。您传递的是 [empId to remove] 而不是有效的 empId

    改变

    <a href="?empId=[empId to remove]">Delete</a>
                        ↑  
    

    到,

    <a href="?empId=${row.empId}">Delete</a>  
    

    来自堆栈跟踪

    [Microsoft][ODBC Microsoft Access Driver]Invalid SQL data type  
    

    [empId to remove] 是无效的 SQL 数据类型。

    编辑

    要看的东西

    1. 您正在提交表单但没有submit button
    2. 锚标签&lt;a href="?empId=[empId to remove]"&gt;Delete&lt;/a&gt;会调用哪个动作?
    3. 您正在循环打印表单

    创建两个JSP 文件,一个用于显示带有删除链接view_all.jsp 的所有记录,第二个是reserve.jsp,正如您在form 标签中提到的。

    view_all.jsp

    <sql:setDataSource
      var = "bookdB"
      scope = "session"
      driver = "sun.jdbc.odbc.JdbcOdbcDriver"
      url = "jdbc:odbc:bookdB"
    />
    
    <sql:query dataSource="${bookdB}" var="result">
       SELECT * from Employees;
    </sql:query>
    
    <table border="1" width="100%">
    <tr>
      <th></th>
      <th>Emp ID</th>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Age</th>
    </tr>
    
    <c:forEach var="row" items="${result.rows}">
      <tr>
       <td><a href="reserve.jsp?empId=${row.empId}">Delete</a></td>
       <td><c:out value="${row.empId}"/></td>
       <td><c:out value="${row.first}"/></td>
       <td><c:out value="${row.last}"/></td>
       <td><c:out value="${row.age}"/></td>
      </tr>
     </form>
    </c:forEach>
    </table>
    

    reserve.jsp

    <sql:setDataSource
      var = "bookdB"
      scope = "session"
      driver = "sun.jdbc.odbc.JdbcOdbcDriver"
      url = "jdbc:odbc:bookdB"
    />
    
    //get the empId send from view_all.jsp 
    <c:set var="empId" value="${requestScope.empId}"/> 
    
    <sql:update dataSource="${bookdB}" var="count">
      DELETE FROM Employees WHERE empId = ?
      <sql:param value="${empId}" />
    </sql:update>
    

    【讨论】:

    • 得到同样的错误。谢谢你的尝试。我认为 || 行有问题。
    • @ConorCaslin : 你能打印empId吗? &lt;c:set var="empId" value="${param['empId']}"/&gt; 在这行之后输入&lt;c:out value="${empId}"/&gt; 你有没有提到this tutorial
    • 如果我离开 &lt;c:set var="empId" value="${param['empId']}"/&gt; 行,我仍然会收到无效的 SQl 数据类型错误。我可以打印行号,但没有这一行,因为 JSP 文件将编译然后
    • jsp文件无法编译
    • 感谢更新代码。该行不会从数据库中删除。
    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多