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 它的代码。
所以,这就是我累了:
- 通过在项目中创建 Main class 并使用手动变量 运行 并将它们插入 Record [=93] 中的函数插入来检查 SQL 连接是否良好=]...好的
通过 response.out.println() 将来自 JSP 的字段的信息打印回 JSP,以确保变量不为空。 ..好的
问别人是不是一定要在web.xml文件里定义SQL.....(我不用定义)
所以,到目前为止我所知道的错误是从调用函数的这一行开始的:
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);
我尝试了 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 它的代码。
所以,这就是我累了:
- 通过在项目中创建 Main class 并使用手动变量 运行 并将它们插入 Record [=93] 中的函数插入来检查 SQL 连接是否良好=]...好的
通过 response.out.println() 将来自 JSP 的字段的信息打印回 JSP,以确保变量不为空。 ..好的
问别人是不是一定要在web.xml文件里定义SQL.....(我不用定义)
所以,到目前为止我所知道的错误是从调用函数的这一行开始的:
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);