首页 > 解决方案 > Java DB将数据插入表中

问题描述

我在尝试将数据插入我的 netbeans 数据库中的表时遇到问题,下面是我的代码:

public class NewUser extends HttpServlet {

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    HttpSession session = request.getSession(false);

    String [] query = new String[5];
    query[0] = (String)request.getParameter("username");
    query[1] = (String)request.getParameter("password");
    query[2] = (String)request.getParameter("confPassword");
    query[3] = (String)request.getParameter("name");
    query[4] = (String)request.getParameter("address");


    Jdbc jdbc = (Jdbc)session.getAttribute("dbbean"); 

    if (jdbc == null)
        request.getRequestDispatcher("/WEB-INF/conErr.jsp").forward(request, response);

    else {
        jdbc.insert(query);
        request.setAttribute("message", query[0]+" has been registered successfully!");
    }

这是在“NewUser.java”类中。插入方法在“jdbc”类中,如下所示:

public void insert(String[] str){
    PreparedStatement ps = null;
    try {
        ps = connection.prepareStatement("INSERT INTO CUSTOMER VALUES (?,?,?,?)",PreparedStatement.RETURN_GENERATED_KEYS);
        ps.setString(1, str[0].trim()); 
        ps.setString(2, str[1]);
        ps.setString(3, str[3]);
        ps.setString(4, str[4]);
        ps.executeUpdate();

        ps.close();
        System.out.println("1 row added.");
    } catch (SQLException ex) {
        Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
    }

}

“客户”表如下所示:

# | Username | Password | Name | Address | ID

('ID' 是自动递增的主键)

用户输入信息的JSP如下:

<%@page import="model.Jdbc"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>User</title>
    </head>
    <body>
        <h2>User's details:</h2>
        <%! int i = 0;
            String str = "Register";
            String url = "NewUser.do";
        %>
        <%
            if ((String) request.getAttribute("msg") == "del") {
                str = "Delete";
                url = "Delete.do";
            } 
            else 
            {
                str = "Register";
                url = "NewUser.do";
            } 
        %>
        <form method="POST" action="<%=url%>">     
            <table>
                <tr>
                    <th></th>
                    <th>Please provide your following details</th>
                </tr>
                <tr>
                    <td>Username:</td>
                    <td><input type="text" name="username"/></td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><input type="password" name="password"/></td>
                </tr>
                <tr>
                    <td>Confirm Password:</td>
                    <td><input type="password" name="confPassword"/></td>
                </tr>
                <tr>
                    <td>Name:</td>
                    <td><input type="text" name="name"/></td>
                </tr>
                <tr>
                    <td>Address:</td>
                    <td><input type="text" name="address"/></td>
                </tr>
                <tr> 
                    <td> <input type="submit" value="<%=str%>"/></td>
                </tr>
            </table>
        </form>   
        <%
            if (i++ > 0 && request.getAttribute("message") != null) {
                out.println(request.getAttribute("message"));
                i--;
            }
        %>
        </br>
        <jsp:include page="foot.jsp"/>
    </body>
</html>

用于创建数据库的 SQL 语句:

CREATE TABLE Customer (
  username varchar(20),
  password varchar(20),
  name varchar(20),
  address varchar(60),
  id INT primary key GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
);

但是,代码不会引发任何错误,当我检查数据库以查看是否已添加数据时,它永远不会被添加,我无法弄清楚为什么(我认为这与“插入”方法有关?)。我已经四处寻找解决方案,但是,我仍然得到相同的结果,并且真的可以使用一些帮助。

干杯,

标签: javasqldatabaseinsert

解决方案


对于 Oracle,您需要为自动生成的列指定列:

 ps = connection.prepareStatement("INSERT INTO CUSTOMER VALUES (?,?,?,?)", new String[]{"ID"})

对于 ID 列


推荐阅读