从 table(HTML) 获取输入变量并将值作为数据库 table 的变量名称提供
Taking input variables from a table(HTML) and supply the values as a variable name for a database table
我想为患者数据库系统创建一个表格。然后我将向表单的每个文本框提供一些输入数据,这些数据将存储在 MySQL 数据库中。
我写了一个JSP文件如下
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<tr><td>Pid</td><td><input type="text" name="pid" required /></td></tr>
<tr><td>Name</td><td><input type="text" name="patientname" required /></td></tr>
<tr><td>Address</td><td><input type="text" name="patientaddress" ></td></tr>
<tr><td>Phone number</td><td><input type="number" name="Ph" required /></td></tr>
<tr><td>Email</td><td><input type="email" name="email" required /></td></tr>
<tr><td>Type</td><td><input type="text" name="patienttype" ></td></tr>
<tr><td></td><td><input type="submit" name="submit" value="register"></td></tr>
</table>
<%
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospitalm","root","1234");
out.println ("database successfully opened.");
String sql = "INSERT INTO patient (pid, pname, address, phone, email_id,ptype) values (?, ?, ?,?,?,?)";
PreparedStatement statement = con.prepareStatement(sql);
statement.setString(1, Pid);
statement.setString(2, Name);
statement.setString(3, "Forrest");
statement.setDouble(4, 664208158);
statement.setString(5, "ava@gmail.com");
statement.setString(6,"G");
int row = statement.executeUpdate();
if (row > 0) {
System.out.println("One row inserted.");
}
}
catch(SQLException e) {
out.println("SQLException caught: " +e.getMessage());
}
%>
</body>
</html>
这两行抛出错误
statement.setString(1, Pid);
statement.setString(2, Name);
如果我输入一些值,例如 'p101' 的 Pid 和 'John' 的名称,那么我可以轻松地在数据库 hospitalM 上输入一条记录。
但如果我尝试 Pid 和 Name,它们是 table、
的变量名称
<tr><td>Pid</td><td><input type="text" name="pid" required /></td></tr>
<tr><td>Name</td><td><input type="text" name="patientname" required /></td></tr>
我出错了。
我该如何解决这个问题?
JSP 不会自动将请求参数绑定到 Java 变量,这正是您在此处尝试执行的操作。
为了获取参数,需要直接查询请求对象。类似于:
statement.setString(1, request.getParameter("Pid"));
statement.setString(2, request.getParameter("Name"));
附录:
关于双精度数(或其他非字符串),您可以做两件事。
一,你可以即时转换它们:
statement.setDouble(4, Double.parseDouble(requests.getParameter("phone")));
其次,您可以依靠 SQL 驱动程序为您完成。
statement.setString(4, requests.getParameter("phone"));
JDBC 中的“setXXX”基于您设置的值,而不是数据库中列的数据类型。不可避免的是,大多数情况下,无论您在 JDBC 语句中设置什么,都将先转换为字符串,然后再传送到数据库。所以,你可以只使用 setString
并完成它,让 driver/db 解决它。
无论哪种方式,如果您发送格式错误的数据(即 phone 号码的“Tom”),您将得到一个异常,无论是来自 Double.parseDouble
还是当DB 尝试在插入期间转换它。但这是与简单设置参数不同的问题。
我想为患者数据库系统创建一个表格。然后我将向表单的每个文本框提供一些输入数据,这些数据将存储在 MySQL 数据库中。
我写了一个JSP文件如下
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<tr><td>Pid</td><td><input type="text" name="pid" required /></td></tr>
<tr><td>Name</td><td><input type="text" name="patientname" required /></td></tr>
<tr><td>Address</td><td><input type="text" name="patientaddress" ></td></tr>
<tr><td>Phone number</td><td><input type="number" name="Ph" required /></td></tr>
<tr><td>Email</td><td><input type="email" name="email" required /></td></tr>
<tr><td>Type</td><td><input type="text" name="patienttype" ></td></tr>
<tr><td></td><td><input type="submit" name="submit" value="register"></td></tr>
</table>
<%
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/hospitalm","root","1234");
out.println ("database successfully opened.");
String sql = "INSERT INTO patient (pid, pname, address, phone, email_id,ptype) values (?, ?, ?,?,?,?)";
PreparedStatement statement = con.prepareStatement(sql);
statement.setString(1, Pid);
statement.setString(2, Name);
statement.setString(3, "Forrest");
statement.setDouble(4, 664208158);
statement.setString(5, "ava@gmail.com");
statement.setString(6,"G");
int row = statement.executeUpdate();
if (row > 0) {
System.out.println("One row inserted.");
}
}
catch(SQLException e) {
out.println("SQLException caught: " +e.getMessage());
}
%>
</body>
</html>
这两行抛出错误
statement.setString(1, Pid);
statement.setString(2, Name);
如果我输入一些值,例如 'p101' 的 Pid 和 'John' 的名称,那么我可以轻松地在数据库 hospitalM 上输入一条记录。
但如果我尝试 Pid 和 Name,它们是 table、
的变量名称<tr><td>Pid</td><td><input type="text" name="pid" required /></td></tr>
<tr><td>Name</td><td><input type="text" name="patientname" required /></td></tr>
我出错了。
我该如何解决这个问题?
JSP 不会自动将请求参数绑定到 Java 变量,这正是您在此处尝试执行的操作。
为了获取参数,需要直接查询请求对象。类似于:
statement.setString(1, request.getParameter("Pid"));
statement.setString(2, request.getParameter("Name"));
附录:
关于双精度数(或其他非字符串),您可以做两件事。
一,你可以即时转换它们:
statement.setDouble(4, Double.parseDouble(requests.getParameter("phone")));
其次,您可以依靠 SQL 驱动程序为您完成。
statement.setString(4, requests.getParameter("phone"));
JDBC 中的“setXXX”基于您设置的值,而不是数据库中列的数据类型。不可避免的是,大多数情况下,无论您在 JDBC 语句中设置什么,都将先转换为字符串,然后再传送到数据库。所以,你可以只使用 setString
并完成它,让 driver/db 解决它。
无论哪种方式,如果您发送格式错误的数据(即 phone 号码的“Tom”),您将得到一个异常,无论是来自 Double.parseDouble
还是当DB 尝试在插入期间转换它。但这是与简单设置参数不同的问题。