2017-05-24 27 views
0

歷史:history我如何可以插入和JSP在德比戰中刪除數據庫中的價值?

問題是我無法從數據庫中刪除客戶。我可以創建一個新客戶,但是如果我留下空白的字段,它會在數據庫中創建一個空記錄,但我會創建一個標準。

的client.java:

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>&nbsp;</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> 

如果我離開空白字段,然後單擊確定出現以下錯誤消息:org.apache: 所致.derby.client.am.SqlException:沒有實際的連接。

如果沒有連接如何創建一個空的記錄?

和:

Severe: java.lang.NullPointerException at: client.java PreparedStatement ps=conn.prepareStatement(delete); 

編輯 新的錯誤: 嚴重:java.sql.SQLDataException:整數無效的字符串格式。

+0

有關,包括所有的方法訪問該數據庫的createConnection()和closeConnection()什麼? – RubioRic

+0

插入的記錄問題是否已解決?剩餘的問題是刪除? – user75ponic

+0

大概是的,只有問題是刪除。和一個小問題,插入到我可以插入空的記錄,不看,如果(NAME!= NULL &&地址!= NULL && PHONENUMBER!= NULL) – Lobi

回答

0

看起來你是不是在列表中設置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和相同的習慣,當你調用delete可用方法。

另一件事是確保該ID是字符串,不是整數。通常我們把密鑰(即ID在這裏)保存爲整數。

+0

我試了一下,結果如下:HTTP狀態500 - 內部服務器錯誤 例外 org.apache.jasper.JasperException:java.util.NoSuchElementException 根源 java.util.NoSuchElementException – Lobi

0

我從那裏你定義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(); 
    } 
} 

如果你在看代碼,我做字符串的顯式轉換整數。這是因爲setString只會接受字符串值。 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(); 
     } 
    } 
+0

我更改爲:(客戶端。 java)public void deleteClient(Integer ID)和ps.setInt(1,ID);和(index.jsp)Integer ID = Integer.parseInt(request.getParameter(「ID」));將字符串更改爲int。 現在:HTTP狀態500 - 內部服務器錯誤,org.apache.jasper.JasperException:java.lang.NumberFormatException:null – Lobi

+0

警告:Servlet jsp的StandardWrapperValve [jsp]:Servlet.service()拋出異常 java.lang.NumberFormatException :null – Lobi

+0

嚴重:java.lang.NumberFormatException:null 嚴重:java.lang.NumberFormatException:對於輸入字符串:「Bob /」 – Lobi

相關問題