使用JSF从MySQL中删除行

时间:2015-01-07 15:08:29

标签: mysql jsf jsf-2.2

我想删除MySQL表中的行,这是我的admin.xhtml:

<h:form>
    <h:dataTable value="#{userController.items}"
                 var="item" border="0" cellpadding="2"
                 cellspacing="0" rules="all"
                 style="border:solid 1px">

        <h:column>
            <f:facet name="header">
                <h:outputText value="#{bundle.ListUserTitle_iduser}"/>
            </f:facet>
            <h:outputText value="#{item.iduser}"/>
        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputText value="#{bundle.ListUserTitle_username}"/>
            </f:facet>
            <h:outputText value="#{item.username}"/>
        </h:column>
        <h:column>
            <h:commandLink action="#{userController.destroyUser(item.iduser)}"
                           value="#{bundle.ListUserDestroyLink}"/>
        </h:column>
    </h:dataTable>
</h:form>

然后在我的userController我有一个方法destroyUser

public String destroyUser(int iduser) {

    try {
        Connection con = ds.getConnection();
        String sql = "DELETE FROM projekt2.user WHERE iduser =" + iduser;
        PreparedStatement ps = con.prepareStatement(sql);
        ps.executeUpdate();

    } catch (SQLException ex) {
        Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
    }
    return "admin";
}

我知道写这样的SQL查询并不好,无论如何在点击destroy链接之后没有任何反应,除非我点击以销毁我当前登录的用户,然后将其从表中删除。我无法删除任何其他用户。但是,由于#{item.iduser}得到正确的值,那么#{userController.destroyUser(item.iduser)}应该得到正确的值吗?

@edit

好吧我想我知道问题所在。我的用户表上有另一个带有外键的表(每个添加的广告都有userId作为外键)这就是为什么它阻止我删除至少添加了1个广告的用户(admin didn&#39有任何所以我能删除他)。你能告诉我在哪里可以改变它,它可以工作,在数据库中的某个地方,或者在我的实体中?我正在使用MySQL Workbench

1 个答案:

答案 0 :(得分:0)

我想通了,我的用户表上有另外一张带有外键的表(每个添加的广告都有userId作为外键)这就是为什么它阻止我删除至少有1个广告的用户添加。因此,我必须在MySQL Workbench的外键选项中将“On Delete”选项设置为“Cascade”(或者可以设置不同的值)。

感谢Tiny的回答,我的评论可能有点误导