【问题标题】:How to insert data in oracle SQL developeroracle SQL开发人员如何插入数据
【发布时间】: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 vonoticeBoardVO 类的实例
  • 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


【解决方案1】:
  • ORA-01400:无法将 NULL 插入 ("SCHEMA"."TABLE_NAME"."COLUMN_NAME")

您的 textarea 未设置名称,所以我认为您的内容值为 null。

【讨论】:

  • 你是对的!我刚刚给了名字textarea,现在它正在工作。谢谢百万:)
猜你喜欢
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2022-07-19
  • 2012-03-21
  • 1970-01-01
  • 2019-02-19
  • 2021-01-08
  • 2020-06-06
相关资源
最近更新 更多