JSP/Servlet:尝试录制到 SQL 时导致 Servlet 错误的原因是什么?

JSP/Servlet: What causes Servlet Error when trying to record to SQL?

我尝试了 5 个小时解决这个问题但没有结果,我收到此错误消息单击提交时,它应该将字段中的信息记录到 SQL,但它没有:

我的 index.jsp 代码在这里:

contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        
       <body>

 
        
      <form action = "servlet3" method="get">
        Register : <br> <br>
         <input type="text" name ="first" placeholder="First Name">  <input type="text" name ="last" placeholder="Last Name"> <br> <br>
         <input type="email" name ="email" placeholder="Email"><br>
         <input type="text" name ="user" placeholder="Choose Username"><br>
         <input type="password" name ="pass" placeholder="Choose a Password"><br>
         <input type="password" name ="pass_ver" placeholder="Verify Password"><br> <br> <br>
        <input type="submit" value ="Submit">
    </form>
</body>
</html>

我的 Servlet 文件:

package com.let;

import com.mysql.jdbc.Connection;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



       @Override
       protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         
        String first = request.getParameter("first");
        String last = request.getParameter("last");
        String email = request.getParameter("email");
        String username = request.getParameter("user");
        String pass = request.getParameter("pass");
        String pass_ver = request.getParameter("pass_ver");
        
        boolean reg= Record.insert(2, first, last, email, username, pass);
        
        
    
  
  
    
        } 
    }
       

问题出在我的插入函数上,该函数应该将数据插入 SQL,它位于 "Record" class 内:

package com.let;

import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;


public class Record {
    
    public Record(){
        
    }
    
    public static boolean insert(int id, String f, String l, String email,String user,String pass){
        boolean status = true;
        
        Connection c=null; 
      try{
          c=Connecting.conn; //Connecting class contains conn object which is of type Connection
        Statement s = c.createStatement();
     
        
       
      
        String u = "USE login;"; //login database, info is table
        s.executeUpdate(u);
        String insert = "INSERT INTO login.info(ID,FIRST,LAST,EMAIL,USER,PASS) VALUES ('"+id +"','"+f +"','"+l+"','"+email+"','"+user+"','"+ Formulation.encypt(pass) +"')";
        s.executeUpdate(insert);
        }catch (SQLException e){
            status =false;
        }
        
        
        return status;
        
    }
    
}

和web.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>E1Servlet</servlet-name>
        <servlet-class>com.let.serv</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>E2Servlet</servlet-name>
        <servlet-class>com.let.serv2</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>E3Servlet</servlet-name>
        <servlet-class>com.let.serv3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>E1Servlet</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>E2Servlet</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>  E3Servlet</servlet-name>
        <url-pattern>/servlet3</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

Connecting class 包含实际连接并且可以 return "conn" 连接类型,它工作正常所以不需要 post 它的代码。

所以,这就是我累了:

所以,到目前为止我所知道的错误是从调用函数的这一行开始的:

boolean reg= Record.insert(2, first, last, email, username, pass);

根据网站上的错误代码,这是不正确的,表明这是错误的来源,而且错误消息还说这一行也出错(或未执行):

Statement s = c.createStatement();

我会很惊讶地知道为什么会产生这些错误,因为我觉得我已经尝试了很多东西但没有任何效果,所以这是我最后的选择。

更新:这是连接 class 代码,我从中获取 "conn" :

package com.let;
import com.mysql.jdbc.Connection;

import java.awt.EventQueue;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;




public class Connecting {
    
    
    public final static String username="root";
    public final static String pass ="mypassword99";
    public final static String conn_str="jdbc:mysql://localhost:3306/login";
    public static Connection conn = ge_conn();
    
    public static Connection get_conn (){
         Connection conn=null;
         
        try{
            conn =(Connection) DriverManager.getConnection(conn_str,username,pass);
       conn =(Connection) DriverManager.getConnection(conn_str,username,pass);
    }catch (SQLException e){
            System.out.println("SQL ERR!!!!");
        }
 
       
       return conn;
    }

    
}
    
    
    
    

在您的记录 class 文件中
将包导入从 com.mysql.jdbc.Connection 更改为 java.sql.Connection

您需要的createStetment()和其他jdbc相关方法属于java.sql包中的Connection对象。

经过一些评论,看起来 mysql jdbc 驱动程序不在您的 class 路径中。
您可以在这里下载:
https://dev.mysql.com/downloads/connector/j/
将 jar 文件包含在您的 class 路径中。一种最简单的方法是将 jar 复制到 WEB-INF/lib 文件夹中。

为了安全起见,我总是在您建立连接之前添加以下行,如下所示:

Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(connectionUrl, username, password);