Java 如何在JSP中的derby中插入和删除数据库中的值?
历史: 问题是我无法从数据库中删除客户。我可以创建一个新客户,但如果我将字段留空,它会在数据库中创建一个空记录,但我会创建一个if标准 client.java:Java 如何在JSP中的derby中插入和删除数据库中的值?,java,jsp,Java,Jsp,历史: 问题是我无法从数据库中删除客户。我可以创建一个新客户,但如果我将字段留空,它会在数据库中创建一个空记录,但我会创建一个if标准 client.java: public class client implements DatabaseConnection{ private static Connection conn = null; private static void createConnection(){ try { conn = DriverManager.getConne
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 List clientList(){
createConnection();
List list=new ArrayList();
try {
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM customer");
while(rs.next()){
list.add(rs.getString("CNAME"));
list.add(rs.getString("ADDRESS"));
list.add(rs.getString("PHONENUMBER"));
}
stmt.close();
} catch (Exception e) {
e.printStackTrace(System.err);
}
return list;
}
public void newClient(String name, String address, String phoneNumber)
throws SQLException{
PreparedStatement ps = null;
try {
createConnection();
String insert="INSERT INTO CUSTOMER(CNAME,ADDRESS, PHONENUMBER)
VALUES(?,?,?)";
ps=conn.prepareStatement(insert);
ps.setString(1, name);
ps.setString(2, address);
ps.setString(3, phoneNumber);
ps.executeUpdate();
ps.close();
} catch (Exception e) {
e.printStackTrace(System.err);
}
finally {
ps.close();
closeConnection();
}
}
public void deleteClient(String ID){
try {
createConnection();
String delete="DELETE FROM CUSTOMER WHERE ID=?";
PreparedStatement ps=conn.prepareStatement(delete);
ps.setString(1, ID);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
}
index.jsp文件:
<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">
<th colspan="2" align="center" style="color: brown">Field</th>
<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>PhoneNumber:</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"/>
<input type="submit" name="Cancel" onclick="
<%
//nothing
%>" value="Cancel"/>
<input type="submit" name="Delete" onclick="
<%client.deleteClient(ID);%>" value="Delete"/>
</table>
<table border="2">
<th colspan="4" align="center" bgcolor="orange">Clients</th>
<tr bgcolor="silver" align="center">
<td> </td>
<td>Name</td>
<td>Address</td>
<td>PhoneNumber</td>
</tr>
<%
List list=client.clientList();
Iterator it=list.iterator();
while(it.hasNext()){
out.print("<tr bgcolor='lightgreen'>");
out.print("<td>");
NAME=(String)it.next();
out.print("<input type='radio' name='ID' value="+NAME+"/>");
out.print("</td>");
out.print("<td>");
out.print(NAME);
out.print("</td>");
for (int i = 0; i < 2; i++) {
out.print("<td>");
out.print(it.next());
out.print("</td>");
}
out.print("</tr>");
}
%>
</table>
</form>
</body>
</html>
编辑
新错误:
严重:java.sql.SQLDataException:整数的字符串格式无效。看起来您没有在列表中设置ID
while(rs.next()){
list.add(rs.getString("ID")); // Add this
list.add(rs.getString("CNAME"));
list.add(rs.getString("ADDRESS"));
list.add(rs.getString("PHONENUMBER"));
}
如果列表中没有ID,您将无法从jsp访问该ID,并且在调用delete方法时该ID将不可用
另一件事是确保ID是string而不是int。通常我们将键(即这里的ID)保留为整数。我从前面的问题中了解到,您将ID定义为整数,因此您应该使用setInt而不是setString,请尝试使用
public void deleteClient(Integer id){
try {
createConnection();
String delete="DELETE FROM CUSTOMER WHERE ID=?";
PreparedStatement ps=conn.prepareStatement(delete);
ps.setInt(1, id);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
ps.close();
closeConnection();
}
}
Id是数据库字段中的一个整数,您在该字段中定义了它的主键
更新1
在index.jsp中使用以下命令将字符串转换为int,并将idNum传递给方法
Integer idNum = null;
String id = request.getParameter("ID");
if(id != null) {
try {
System.out.println("String Id value --> "+id.trim());
idNum = Integer.parseInt(id.trim());
}
catch(NumberFormatException ex) {
ex.printStackTrace();
}
}
在所有访问数据库的方法中包含createConnection()和closeConnection()怎么样?记录插入问题解决了吗?唯一剩下的问题是删除?大概是的,唯一的问题是删除。insert to的一个小问题是,我可以插入空记录,而不是查看if(NAME!=null&&ADDRESS!=null&&PHONENUMBER!=null)@Lobi首先我们将讨论删除问题。在
deleteClient
方法e.printStackTrace()中,以下内容返回什么代码>通过编辑您的问题粘贴输出。我添加了createConnection(),因为我忘了添加。现在:严重:java.sql.SQLDataException:整数的字符串格式无效。我尝试了它,结果:HTTP状态500-内部服务器错误异常org.apache.jasper.jaspereexception:java.util.NoSuchElementException根因java.util.NoSuchElementException我更改为:(client.java)public void deleteClient(整数ID)和ps.setInt(1,ID);和(index.jsp)Integer ID=Integer.parseInt(request.getParameter(“ID”));将字符串更改为int.Now:HTTP状态500-内部服务器错误,org.apache.jasper.jaspereException:java.lang.NumberFormatException:nullWarning:StandardWrapperValve[jsp]:Servlet.service()对于servlet jsp抛出的异常java.lang.NumberFormatException:nullSevere:java.lang.NumberFormatException:nullSevere:java.lang.NumberFormatException:对于输入字符串:“Bob/”@Lobi顺便说一下,“Bob”是一个字符串,您应该使用一个数字作为ID列。表中有三列:名称、地址、电话号码。每行开头都有一个单选按钮。我单击其中一个,然后单击“删除”按钮。如何添加“ID”列?
Integer idNum = null;
String id = request.getParameter("ID");
if(id != null) {
try {
System.out.println("String Id value --> "+id.trim());
idNum = Integer.parseInt(id.trim());
}
catch(NumberFormatException ex) {
ex.printStackTrace();
}
}