【问题标题】:Taking input variables from a table(HTML) and supply the values as a variable name for a database table从表(HTML)中获取输入变量并将值作为数据库表的变量名提供
【发布时间】:2022-01-04 20:47:54
【问题描述】:

我想为患者数据库系统创建一个表单。然后我会给表单的每个文本框提供一些输入数据,这些数据将存储在 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);

如果我为 Pid 输入一些值,例如为 Pid 输入“p101”,为 Name 输入“John”,那么我可以轻松地在数据库 hospitalM 上输入一条记录。

但是如果我尝试使用 Pid 和 Name 作为表的变量名,

<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>

我出错了。

我该如何解决这个问题?

【问题讨论】:

  • php i9s 在服务器上处理,因此您的表单需要通过 post 发送所有数据或获取处理它的服务器 php 脚本,请参阅raghwendra.com/blog/…
  • 你得到的错误是什么?
  • 我改变了 statement.setString(1, Pid); to statement.setString(1, request.getParameter("Pid"));但是当我试图改变 statement.setDouble(4, phone); to statement.setDouble(4, request.getParameter(phone));我收到错误phone cannot be resolved to a variable

标签: html mysql jsp jdbc prepared-statement


【解决方案1】:

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 语句中设置什么,无论如何都会在传送到 DB 之前将其转换为字符串。因此,您可以使用setString 并完成它并让驱动程序/数据库解决。

无论哪种方式,如果您发送格式错误的数据(即“Tom”作为电话号码),您将收到一个异常,无论是来自 Double.parseDouble 还是当数据库在插入过程中尝试转换它时.但这是与简单设置参数不同的问题。

【讨论】:

  • 使用 request.getParameter(4,phone) 更改后,我收到 phone cannot be resolved to a variable 错误。
  • @Encipher 我为你更新了我的帖子
  • 感谢您的帮助。我真的很感激。我在给用户输入时遇到了另一个问题,你能看看stackoverflow.com/questions/70139701/…
猜你喜欢
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多