2013-10-25 42 views
0

嗨,大家好我在JSF中有一個數據表,它顯示我的數據庫表的所有內容,它顯示它很好,我也有一個刪除功能,可以成功地從數據庫中刪除罰款然而,並更新數據表很好,當我嘗試更新的數據庫中,我得到的錯誤無法編輯JSF的數據庫行

java.lang.IllegalArgumentException: Cannot convert [email protected] of type class richard.test.User to long 
以下

的是,我一直用它來刪除數據庫中的行時,做工精細代碼:

public void delete(long userID) { 
     PreparedStatement ps = null; 
     Connection con = null; 
     if (userID != 0) { 
      try { 
       Class.forName("com.mysql.jdbc.Driver"); 
       con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root"); 
       String sql = "DELETE FROM user1 WHERE userId=" + userID; 
       ps = con.prepareStatement(sql); 
       int i = ps.executeUpdate(); 
       if (i > 0) { 
        System.out.println("Row deleted successfully"); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        con.close(); 
        ps.close(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

我只是想編輯上面的代碼,所以它會更新重新繩而非將其刪除,所以我編輯它看起來像:

public void editData(long userID) { 
     PreparedStatement ps = null; 
     Connection con = null; 
     if (userID != 0) { 
      try { 
       Class.forName("com.mysql.jdbc.Driver"); 
       con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root"); 
       String sql = "UPDATE user1 set name = '"+name+"', email = '"+ email +"', address = '"+address+"' WHERE userId=" + userID; 
       ps = con.prepareStatement(sql); 
       int i = ps.executeUpdate(); 
       if (i > 0) { 
        System.out.println("Row updated successfully"); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        con.close(); 
        ps.close(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 

和XHMTL是:

  <p:dataTable id="dataTable" var="u" value="#{userBean.getUserList()}" 
         paginator="true" rows="10" 
         editable="true" 
         paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
         rowsPerPageTemplate="5,10,15"> 



       <p:column> 

        <f:facet name="header"> 
         User ID 
        </f:facet> 
        #{u.userID} 

       </p:column> 

       <p:column> 
        <f:facet name="header"> 
         Name 
        </f:facet> 
        #{u.name} 
       </p:column> 

       <p:column> 
        <f:facet name="header"> 
         Email 
        </f:facet> 
        #{u.email} 
       </p:column> 
       <p:column> 
        <f:facet name="header"> 
         Address 
        </f:facet> 
        #{u.address} 
       </p:column> 

       <p:column> 
        <f:facet name="header"> 
         Created Date 
        </f:facet> 
        #{u.created_date} 
       </p:column> 

       <p:column> 
        <f:facet name="header"> 
         Delete 
        </f:facet> 
        <h:commandButton value="Delete" action="#{user.delete(u.userID)}" /> 
       </p:column> 
       <p:column> 
        <f:facet name="header"> 
         Delete 
        </f:facet> 
        <h:commandButton value="Edit" action="#{user.editData(u)}" /> 
       </p:column> 

目前當你按下編輯按鈕,它只能與我相同的值更新還沒有設法讓數據表可以和數據庫一起編輯,我已經看到了一些數據表的例子,其中數據表從數據庫獲取它的值,但從來沒有數據庫,所以如果你對此有任何建議,它也會是很好

謝謝

回答

5

的錯誤是很明確的:

無法將類型類richard.test.User的[email protected]

你要發送的用戶對象時,你的edit方法收到long。這裏記下這一點。

JSF代碼:

<h:commandButton value="Edit" action="#{user.editData(u)}" /> 

Java代碼:

public void editData(long userID) { 
    //... 
} 

解決方案:

  1. 更改JSF代碼,您在delete方法做它來發送用戶ID :

    <h:commandButton value="Delete" action="#{user.delete(u.userID)}" /> 
    
  2. 更改您的Java代碼來接收用戶的參數在Java方法:

    public void editData(User user) { 
        //... 
    } 
    

還有其他問題,您的當前代碼:

  • 你打開並手動關閉連接。這是在現實世界的應用程序中一定不能。相反,您應該爲此使用數據庫連接池。有幾種方法可以實現這一點,您可以選擇將其創建爲應用程序服務器中的JNDI資源,或者使用處理此問題的第三方庫。
  • 您沒有使用PreparedStatement的所有功能。您通過連接值來創建查詢,而您應該使用參數,使用?來設置參數(這是PreparedStatement的主要目的)。

更多信息:

+0

非常感謝你已經固定它抱歉它是一個簡單的錯誤它是一個漫長的一天! – user1924104

+0

@ user1924104注意我的答案更新,包括對您目前的方法的一些建議 –

+0

好的,謝謝你,我會在明天更詳細地研究這些 – user1924104