Java DB将数据插入表

时间:2018-11-18 08:38:20

标签: java sql database insert

我在尝试将数据插入到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”类中。 insert方法在类“ 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)
);

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

干杯

2 个答案:

答案 0 :(得分:0)

对于Oracle,您需要specify column来自动生成列:

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

“ ID”列

答案 1 :(得分:0)

您忘记将prepareStatement.return ..替换为Statement.return .. ps = connection.prepareStatement("INSERT INTO CUSTOMER VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS,new String[]{"ID"});