【发布时间】:2017-10-24 07:07:37
【问题描述】:
我在 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)
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) {
}
}
【问题讨论】:
-
您遇到的错误是什么
-
我想我没有收到任何错误。 jsp页面刷新,但数据库中没有新数据。
-
你记录了吗,它甚至调用了那个保存函数吗?
-
美元对甜甜圈有一个异常被抛出
newClient被catch (Exception e) { }完全吞噬。 // 咆哮开始 不要在catch子句中放入空块!永远! // 结束咆哮 请至少输入e.printStackTrace(System.err);,这样当坏事发生时你就有线索了! -
您应该使用Servlet接受表单提交并调用newClient并将jsp页面返回给客户端。示例o7planning.org/en/10285/…