当前位置: 首页 > 面试题库 >

如何在JSP中将值插入数据库以进行derby?

洪国兴
2023-03-14
问题内容

我在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>

client.java的内容。

package database;

public class Client implements DatabaseConnection{

private static Connection conn = null;

private static void createConnection(){
try {
  conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException ex) {
  Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
}
}

private static void closeConnection(){
if (conn != null){
  try {
    conn.close();
  } catch (SQLException ex) {
    Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
  }
}
}

public void newClient(String name, String address, String phoneNumber){
    try {
        createConnection();
        String insert="INSERT INTO CUSTOMER(CNAME,ADDRESS, PHONENUMBER) VALUES(?,?,?)";
        PreparedStatement ps=conn.prepareStatement(insert);
        ps.setString(2, name);
        ps.setString(3, address);
        ps.setString(4, phoneNumber);
        ps.executeUpdate();
        ps.close();
    } catch (Exception e) {

    }
}    
}

databaseConnection的内容。

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)

编辑2

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) {
    }
}

问题答案:

您的prepareStatement索引应该从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关闭方法应位于try catch finally块的最后一部分。

与该closeConnection()方法类似,您可以创建另一个用于关闭prepareStatement的方法,并在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);
                }


 类似资料:
  • 问题内容: 我想在我的MySQL数据库中插入整数188和90,但以下代码不起作用: 为什么不起作用? 问题答案: 编辑 为我工作: 在MySQL表;

  • 问题内容: 我想在循环中将一组数组插入数据库(HANA)中,我的代码如下: 但这是行不通的。我尝试过 不支持此返回方法的Connection创建数组。 我的表架构看起来像 我也希望我的数据类型为整数数组。感谢您的帮助。 问题答案: 这里已经在SO上讨论了“ ARRAY插入HANA”主题。HANA仅支持通过ARRAY()函数存储数组。此函数不将列表作为参数,而仅将单独的元素作为参数。 所以,代替 你

  • 问题内容: 我最近开始使用访问权限。我试图在数据库中插入几行;但是,我被卡住了,因为它引发了一个错误: 参数太少。 我有一个表测试,其中只有一个名为start_date的列,我想在两个日期之间插入所有日期,例如,如果我考虑将2014年7月1日至2014年7月7日,我需要将日期设为1/7 / 2014,2 / 7 / 2014,3 / 7/2014在我的表格中,但是我在插入所用代码时遇到问题如下 我

  • 问题内容: 我试图将一个希伯来语值插入到我的mysql数据库中,而不是希伯来语值看起来像那样。 ××××××××××××× 该表的排序规则默认为latin1_swedish_ci,我也尝试将其更改为utf-8_general_ci,hebrew_bin,hebrew_general_ci,但结果仍然相同。 在我的代码中,我当然使用meta标签来配置字符集: 在我的PHP查询之前,我添加了以下这一行

  • 我想向数据库中插入值,但它无法工作,尽管我的代码在用作存储过程时运行良好。我需要使用按钮点击来存储值。请告诉我代码有什么问题。它没有显示任何错误或异常,但表中的数据没有更新