我喜歡創建一個注冊表單,用戶可以在其中注冊他或她的資料,并且給定的資料將保存在資料庫中。我使用 mysql workbench 8.0創建了一個資料庫HospitalM。我運行了該專案,即用于在Tomcat服務器上創建表單的jsp檔案。pid 是資料庫HospitalM中名為患者的表中的主鍵。
當我在服務器上運行表單時,生成了一個表單,但該表單沒有等待輸入資料并拋出一條訊息SQLException caught: Column 'pid' cannot be null。
我將在下面分享我的代碼和表格。任何人都可以給我一些提示為什么它不起作用?
JSP代碼:(jsp檔案insert.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, request.getParameter("pid"));
statement.setString(2, request.getParameter("pname"));
statement.setString(3, request.getParameter("address"));
statement.setString(4, request.getParameter("phone"));
statement.setString(5, request.getParameter("email_id"));
statement.setString(6,request.getParameter("ptype"));
int row = statement.executeUpdate();
if (row > 0) {
System.out.println("One row inserted.");
}
}
catch(SQLException e) {
out.println("SQLException caught: " e.getMessage());
}
%>
</body>
</html>
患者表的sql查詢:
create table patient(pid varchar(10),
pname varchar(40) not null,
address varchar(10),
phone numeric(10,0) not null,
email_id varchar(20) not null,
ptype varchar(2),
primary key(pid),
check(email_id like '%_@__%.__%'));
我得到的輸出

uj5u.com熱心網友回復:
這里的問題是當你第一次訪問頁面時,所有的代碼都會被執行,但沒有處理請求。
因此,在第一次訪問期間,所有這些請求引數都為空。
正如 Piotr 所建議的,您可以使用 request 方法來獲取它是 aGET還是 a POST,并且只在POST.
對此的正確答案更深入地探討了這些型別的事物是如何與頁面作業流一起構建的,但這是一個更深入的主題,需要在這里討論。
目前,簡單的問題是在第一次訪問時,沒有引數,因此您實際上是在嘗試執行以下操作:
statement.setString(1, null);
這是非法的(要在 JDBC 中將列設定為顯式 SQL NULL 值,請使用該statement.setNull(1)方法)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368592.html
下一篇:如何分類串列?[PHP手風琴]
