Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JSP中向derby数据库插入值?_Java_Jsp_Derby - Fatal编程技术网

Java 如何在JSP中向derby数据库插入值?

Java 如何在JSP中向derby数据库插入值?,java,jsp,derby,Java,Jsp,Derby,我在JSP中创建了一个表单,将数据插入derby中的数据库,但它不起作用 数据库名为CUSTOMER。各表: ID (int), CNAME (varchar), ADDRESS (varchar), PHONENUMBER (varchar) client.jsp的内容: <%@page contentType="text/html" pageEncoding="UTF-8"%> <jsp:useBean id="client" class="database.client

我在JSP中创建了一个表单,将数据插入derby中的数据库,但它不起作用

数据库名为CUSTOMER。各表:

ID (int), CNAME (varchar), ADDRESS (varchar), PHONENUMBER (varchar)
client.jsp的内容:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="client" class="database.client" scope="page" />
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body bgcolor="lightgrey">
    <%
        String ID=request.getParameter("ID");
        String NAME=request.getParameter("CNAME");
        String ADDRESS=request.getParameter("ADDRESS");
        String PHONENUMBER=request.getParameter("PHONENUMBER");
    %>
    <form method="post" action="">
    <table border="0" align="left">
        <tr>
            <td>Name</td>
            <td><input type="text" name="CNAME" style="background-color:beige"/></td>
        </tr>
        <tr>
            <td>Address</td>
            <td><input type="text" name="ADDRESS" style="background-color:beige"/></td>
        </tr>
        <tr>
            <td>TelNumber</td>
            <td><input type="text" name="PHONENUMBER" style="background-color:beige"/></td>
        </tr>
            <input type="submit" name="OK" onclick="
                <%
               if(NAME!=null && ADDRESS!=null && PHONENUMBER!=null){
                    client.newClient(NAME, ADDRESS, PHONENUMBER);
                }
                %>" value="OK"/>
    </table>
</form>  
</body>
数据库连接的内容

package database;

public interface DatabaseConnection{
String URL="jdbc:derby://localhost:1527/Test";
String USER="myusername";
String PASSWORD="mypassword"; 
}
编辑

错误消息:

Caused by: org.apache.derby.client.am.SqlException: Column position '4' is 
outside the allowed range. The columns of ResultSet are '3'.
Org.apache.derby.client.am.ColumnMetaData.checkForValidColumnIndex (unknown 
source)
EDIT2

public void deleteClient(String ID){
    try {
        String delete="DELETE FROM CUSTOMER WHERE ID=?";
        PreparedStatement ps=conn.prepareStatement(delete);
        ps.setString(1, ID);
        ps.executeUpdate();
    } catch (Exception e) {
    }
}

您的preparedStatement索引应该从1开始,而不是从2开始,因此请按如下所示进行尝试

public void newClient(String name, String address, String phoneNumber){
    PreparedStatement ps = null;
    try {
        createConnection();
        String insert="INSERT INTO CUSTOMER(ID,CNAME,ADDRESS, PHONENUMBER) VALUES(?,?,?,?)";
        ps=conn.prepareStatement(insert);
        ps.setString(1, name);
        ps.setString(2, address);
        ps.setString(3, phoneNumber);
        ps.executeUpdate();
    } catch (Exception ex)  {
        ex.printStackTrace();
    } finally  {
        ps.close();
        closeConnection();
    }
}    
PreparedStatement或Connection close方法应位于
try catch finally
块的finally部分

closeConnection()
方法类似,您可以创建另一个关闭preparedStatement的方法,并在finally块中调用该方法

更新1

如果您正在用Java捕获Id,请尝试

public void newClient(Integer id, String name, String address, String phoneNumber){
    PreparedStatement ps = null;
    try {
        createConnection();
        String insert="INSERT INTO CUSTOMER(CNAME,ADDRESS, PHONENUMBER) VALUES(?,?,?)";
        ps=conn.prepareStatement(insert);
        ps.setInt(1, id)
        ps.setString(2, name);
        ps.setString(3, address);
        ps.setString(4, phoneNumber);
        ps.executeUpdate();
    } catch (Exception ex)  {
        ex.printStackTrace();
    } finally  {
        ps.close();
        closeConnection();
    }
}    
在JSP中,修改为

if(ID!=null && NAME!=null && ADDRESS!=null && PHONENUMBER!=null){
                    client.newClient(ID, NAME, ADDRESS, PHONENUMBER);
                }

你犯了什么错误?我想我没有犯任何错误。jsp页面刷新,但数据库中没有新数据。您记录了它甚至调用了save函数吗?美元到甜甜圈在
newClient
中抛出了一个异常,它被
catch(exception e){}
完全吞没了不要在
catch
子句中放置空块!永远结束rant请至少输入
e.printStackTrace(System.err)所以当坏事发生时,你有了线索!您应该使用Servlet接受表单提交,并调用newClient并将jsp页面返回给客户端。我试过了。现在错误消息是:org.apache.derby.client.am.SqlException:列“ID”不能接受NULL。customer表中是否有ID列?@Lobi它表示数据库表中的
ID
列是
非NULL
。因此,如果您是从Java代码填充,那么您也应该传递ID。我该怎么做?@Lobi您可以将该列声明为autoincrement
if(ID!=null && NAME!=null && ADDRESS!=null && PHONENUMBER!=null){
                    client.newClient(ID, NAME, ADDRESS, PHONENUMBER);
                }