【发布时间】:2020-05-20 01:59:44
【问题描述】:
我想在 Oracle SQL Developer 中插入数据。 在客户端,我的意思是网页,它显示数据已被插入, 但是当我在 SQL Developer 中检查时,没有插入任何数据。
我看到了这个错误信息:
原因:错误:1400,位置:88,Sql = INSERT INTO noticebook(NUM, NAME, EMAIL, CONTENTS) VALUES(BOOK_NUM.NEXTVAL, :1 , :2 , :3) , OriginalSql = INSERT INTO noticebook( NUM, NAME, EMAIL, CONTENTS) VALUES(BOOK_NUM.NEXTVAL, ?, ?, ?) , Error Msg = ORA-01400: NULL ("C##YESMONDAY"."NOTICEBOOK"."CONTENTS")
好像查询不正确,但我找不到问题所在。
查看页面(main.jsp)
<body>
<h1>Notice Board</h1>
<div id="wrap">
<div id="wrap_form">
<form action="mainWritePro.jsp" method="post">
<table>
<tr>
<td></td>
<td><input type="text" name="name" placeholder="TITLE "></td>
</tr>
<tr>
<td></td>
<td><input type="text" name="email" placeholder="EMAIL "></td>
</tr>
<tr>
<td> </td>
<td>
<textarea rows="15" cols="50" placeholder="INQUIRY"></textarea>
</td>
</tr>
<tr class="send">
<td colspan="2" align="center"><input type="submit" name="" value="SEND" ></td>
</tr>
</table>
</form>
</div>
<ul>
<li><a href="#">DELETE</a></li>
<li><a href="#">UPDATE</a></li>
<li><a href="#">LIST</a></li>
</ul>
</div>
noticeBoardVO.java
package edu.kosta.vistorsPrac;
public class noticeBoardVO { // Model
private int num; private String name, email, contents;
public noticeBoardVO() {}
public int getNum() { return num; }
public void setNum(int num) { this.num = num; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
public String getContents() { return contents; }
public void setContents(String contents) { this.contents = contents; }
}
noticeBoardDAO.java 我假设错误发生在这里..
public class noticeBoardDAO {// Controller
// DB Connection & Open
public static Connection loadOracleDriver() {
Connection conn = null;
try {
conn = ConnectionHelper.getConnection("oracle");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
// INSERT
public static void insert(Connection conn, noticeBoardVO vo) {
StringBuffer sb = new StringBuffer();
PreparedStatement pstmt = null;
try {
conn = ConnectionHelper.getConnection("oracle");
sb.append("INSERT INTO noticebook(NUM, NAME, EMAIL, CONTENTS) ");
sb.append(" VALUES(BOOK_NUM.NEXTVAL, ?, ?, ?) ");
System.out.println(sb.toString());
pstmt = conn.prepareStatement(sb.toString());
pstmt.setString(1, vo.getName());
pstmt.setString(2, vo.getEmail());
pstmt.setString(3, vo.getContents());
pstmt.executeUpdate(); //
} catch (Exception e) {
e.printStackTrace();
}
}
mainWritePro.jsp(在用户点击 SEND btn 后显示)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert Page</title>
<link rel="stylesheet" type="text/css" href="../css/main.css">
</head>
<%
request.setCharacterEncoding("utf-8");
%>
<body>
<jsp:useBean id="vo" class="edu.kosta.vistorsPrac.noticeBoardVO"></jsp:useBean>
<jsp:setProperty property="*" name="vo" />
<%
Connection conn = noticeBoardDAO.loadOracleDriver();
noticeBoardDAO.insert(conn, vo);
%>
<h1>Successfully Inserted !</h1>
<ul>
<li><a href="#">DELETE</a></li>
<li><a href="#">UPDATE</a></li>
<li><a href="#">LIST</a></li>
</ul>
</body>
</html>
【问题讨论】:
-
a) 您不应该尝试从您的 jsp 中进行 db 插入、发布数据并在 servlet 中进行。 b)正如您拥有
e.printStackTrace();,请发布您的堆栈跟踪。另外,vo的值是多少? -
@ScaryWombat
vo是noticeBoardVO类的实例 -
a) 对于这个,这是我在课堂上学到的,所以首先,我想尝试这种方式:) b) INSERT INTO noticebook(NUM, NAME, EMAIL, CONTENTS) VALUES(BOOK_NUM.NEXTVAL, ?, ?, ?) java.sql.SQLIntegrityConstraintViolationException: ORA-01400: NULL ("C##YESMONDAY"."NOTICEBOOK"."CONTENTS") 无法插入。 -- -> 这是
e.printStackTrace();吗? c) vo 来自 notiveBoardVO。 -
System.out.println(sb.toString());的输出是什么? -
INSERT INTO noticebook(NUM, NAME, EMAIL, CONTENTS) VALUES(BOOK_NUM.NEXTVAL, ?, ?, ?)
标签: java oracle sql-insert