【问题标题】:Insertion deletion updating not happening in MS Access Database using NetBeans使用 NetBeans 在 MS Access 数据库中未发生插入删除更新
【发布时间】:2017-08-18 07:30:23
【问题描述】:

在学习了一点 Servlets 之后,我尝试做一个简单的学生信息系统。 index.html 代码是

<html>
    <body bgcolor="AliceBlue">
        <h1 style="text-align: center">Student Information System</h1>
        <form method="get" action="MIS">
         First Name <input type="text" name="FName"/><br><br>
         Last Name <input type="text" name="LName"/><br><br>
         ID <input type="number" name="ID"/><br><br>
         Age <input type="number" name="Age"><br><br>
         <input type="submit" name="Insert" value="Insert">
         <input type="submit" name="Delete" value="Delete">
         <input type="submit" name="Update" value="Update">
        </form>
    </body>
</html>

在这里,我使用三个按钮插入、更新和删除来对数据库执行相应的操作。

这是MIS.java 代码

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Gaurav
 */
@WebServlet(urlPatterns = {"/MIS"})
public class MIS extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet MIS</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet MIS at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
       PrintWriter pr = response.getWriter();



       try
       {
           Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
           Connection con=DriverManager.getConnection("jdbc:ucanaccess://F://Subjects//WT Netbeans//WT P5//src//studentmis.accdb","","");
           String FirstName = request.getParameter("FName");
           String LastName = request.getParameter("LName");
           String Insert = request.getParameter("Insert");
           String Update = request.getParameter("Update");
           String Delete = request.getParameter("Delete");
           int ID = Integer.parseInt(request.getParameter("ID"));
           int Age = Integer.parseInt(request.getParameter("Age"));
           String SqlInsert="INSERT INTO student_info(Firstname,Lastname,ID,Age)VALUES(?,?,?,?)";
           String SqlUpdate="UPDATE student_info SET Lastname=? ID=? Age=? WHERE Firstname=?";
           String SqlDelete="DELETE FROM student_info WHERE Firstname=?";
           if(Insert!=null)
           {
               PreparedStatement InsertStatement = con.prepareStatement(SqlInsert);
               InsertStatement.setString(1,FirstName);
               InsertStatement.setString(2,LastName);
               InsertStatement.setInt(3,ID);
               InsertStatement.setInt(4,Age);
               int RowsInserted = InsertStatement.executeUpdate();
               if(RowsInserted > 0)
                pr.println("New User Added Successfully");

           }

           else if(Update!=null)
           {
               PreparedStatement UpdateStatement = con.prepareStatement(SqlUpdate);
               UpdateStatement.setString(1,FirstName);
               UpdateStatement.setString(2,LastName);
               UpdateStatement.setInt(3,ID);
               UpdateStatement.setInt(4,Age);
               int RowsUpdated = UpdateStatement.executeUpdate();
               if(RowsUpdated > 0)
                pr.println("User Updated Successfully");

           }

           else if(Delete!=null)
           {
               PreparedStatement DeleteStatement = con.prepareStatement(SqlDelete);
               DeleteStatement.setString(1,FirstName);
               int RowsDeleted = DeleteStatement.executeUpdate();
               if(RowsDeleted > 0)
                pr.println("User Updated Successfully");
           }

       } 


       catch (ClassNotFoundException | SQLException ex) 
       {
           pr.println(ex);
       }

        //processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Returns a short description of the servlet.
 *
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>

}

运行项目后, 如果我按下插入按钮(输入信息后)它会出错

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 user lacks privilege or object not found: FIRSTNAME

如果我按下删除按钮(输入信息后),它会报错

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 user lacks privilege or object not found: FIRSTNAME

如果我按下更新按钮(输入信息后)它会报错

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 user lacks privilege or object not found: LASTNAME

这是我的 MS Access 数据库studentmis.accdb 包含的内容:

请帮我找出这段代码中的问题。如果是数据库身份验证问题,那么我保证我没有为此数据库创建用户名和密码。 此外,我保证我已导入所有必要的 .jar 文件以使用 Ucanaccess 驱动程序。

好的,现在其他错误已解决。现在,当我尝试单击更新按钮时,我得到了这个errornet.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 unexpected token: ID。已修改MIS.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Gaurav
 */
@WebServlet(urlPatterns = {"/MIS"})
public class MIS extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet MIS</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet MIS at " + request.getContextPath() + "</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
       PrintWriter pr = response.getWriter();



       try
       {
           Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
           Connection con=DriverManager.getConnection("jdbc:ucanaccess://F://Subjects//WT Netbeans//WT P5//src//studentmis.accdb");
           String FirstName = request.getParameter("FName");
           String LastName = request.getParameter("LName");
           String Insert = request.getParameter("Insert");
           String Update = request.getParameter("Update");
           String Delete = request.getParameter("Delete");
           int ID = Integer.parseInt(request.getParameter("ID"));
           int Age = Integer.parseInt(request.getParameter("Age"));
           String SqlInsert="INSERT INTO student_info(Firstname,Lastname,ID,Age)VALUES(?,?,?,?)";
           String SqlUpdate="UPDATE student_info SET Lastname=? ID=? Age=? WHERE Firstname=?";
           String SqlDelete="DELETE FROM student_info WHERE Firstname=?";
           if(Insert!=null)
           {
               PreparedStatement InsertStatement = con.prepareStatement(SqlInsert);
               InsertStatement.setString(1,FirstName);
               InsertStatement.setString(2,LastName);
               InsertStatement.setInt(3,ID);
               InsertStatement.setInt(4,Age);
               int RowsInserted = InsertStatement.executeUpdate();
               if(RowsInserted > 0)
                pr.println("New User Added Successfully");

           }

           else if(Update!=null)
           {
               PreparedStatement UpdateStatement = con.prepareStatement(SqlUpdate);
               UpdateStatement.setString(1, LastName);
               UpdateStatement.setInt(2,ID);
               UpdateStatement.setInt(3,Age);
               UpdateStatement.setString(4,FirstName);
               int RowsUpdated = UpdateStatement.executeUpdate();
               if(RowsUpdated > 0)
                pr.println("User Updated Successfully");

           }

           else if(Delete!=null)
           {
               PreparedStatement DeleteStatement = con.prepareStatement(SqlDelete);
               DeleteStatement.setString(1,FirstName);
               int RowsDeleted = DeleteStatement.executeUpdate();
               if(RowsDeleted > 0)
                pr.println("User Deleted Successfully");
           }

       } 


       catch (ClassNotFoundException | SQLException ex) 
       {
           pr.println(ex);
       }

        //processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

【问题讨论】:

    标签: java ms-access jdbc netbeans ucanaccess


    【解决方案1】:

    您收到此错误是因为您的字段名称不正确,您的字段名称是:

    |  Field1   |   Field1   |  Field3   |   Field4   |
    

    而不是:

    |  Firstname |   Lastname   |  ID   |   Age   |
    

    事实上Firstname, Lastname, ID, Age 是值而不是列名,因此请更正字段名称,一切都会好起来的。


    编辑

    net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 意外 令牌:ID

    这是逻辑,因为您将属性设置在错误的位置:

    UPDATE student_info SET Lastname=? ID=? Age=? WHERE Firstname=?
    //--------------------------1----^--2-^--3--^----------4------^
    
    UpdateStatement.setString(1,FirstName);//<<-----this should be Lastname
    UpdateStatement.setString(2,LastName);//<<-----this should be ID
    UpdateStatement.setInt(3,ID);//<<-----this should be Age
    UpdateStatement.setInt(4,Age);//<<-----this should be Firstname
    

    所以改用这个:

    UpdateStatement.setString(1, LastName);
    UpdateStatement.setInt(2, ID);
    UpdateStatement.setInt(3, Age);
    UpdateStatement.setString(4, FirstName);
    

    良好做法

    不要在开头 UpdateStatement 时使用大写字母命名变量

    编辑

    您错过了字段之间的逗号,UPDATE 的正确语法是:

    UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
    

    所以在您的查询中:

    UPDATE student_info SET Lastname=? ID=? Age=? WHERE Firstname=?
    //--------------------------------^----^--miss comma
    

    改为使用:

    UPDATE student_info SET Lastname=?, ID=?, Age=? WHERE Firstname=?
    

    【讨论】:

    • 非常感谢。我真是太傻了。但现在有一个不同的错误。插入和删除工作正常,更新不工作。当我尝试按下更新按钮时,它给出了错误net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 unexpected token: ID。请告诉@YCF_L可能是什么问题
    • 检查我的编辑@GauravGilalkar 你混合了你的属性,你得到这个错误祝你好运
    • 尝试了您建议的编辑,但不起作用。仍然是完全相同的错误。 net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 unexpected token: ID@YCF_L
    • 你确定@GauravGilalkar 也许你改变了 if Insert 块,如果没有发布你改变它的代码,请再次检查
    • 是的,我更改了正确的块。但我不能在这里发表评论代码。它说评论太长了。我将修改问题而不是@YCF_L
    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多