Mysql 在JSF中使用Prepared语句更新数据库

Mysql 在JSF中使用Prepared语句更新数据库,mysql,sql,jsf,jsf-2,javabeans,Mysql,Sql,Jsf,Jsf 2,Javabeans,我有mainpage.xhtml,它在我的数据库中显示整个记录并允许我编辑它们。如果使用cliclingEdit按钮,它将调用mainPageController.Edit()函数,该函数在MainPageConroller类中填充_bilgi变量,然后重定向到Edit.xhtml页面 在edit.xhtml页面中,它基本上显示了MainPageController类之前填充的_bilgi值。在这里之前没有问题(可能有,但我没有意识到。) 当我想更新这些变量中的一个时,比如baslik,我在Ma

我有
mainpage.xhtml
,它在我的数据库中显示整个记录并允许我编辑它们。如果使用cliclingEdit按钮,它将调用
mainPageController.Edit()
函数,该函数在MainPageConroller类中填充_bilgi变量,然后重定向到
Edit.xhtml
页面

edit.xhtml页面中,它基本上显示了
MainPageController类
之前填充的_bilgi值。在这里之前没有问题(可能有,但我没有意识到。)

当我想更新这些变量中的一个时,比如baslik,我在MainPageController中创建了一个方法,它在bilgiDAO类中调用
updateBilgi(\u bilgi)

UpdateBilgi
中,很清楚它在做什么,但它没有更新表。有趣的是,当我调试并跟踪变量时,一切都进行得很顺利,但最终它就是不更新

另一件事是,当我在BilgilerDAO中只放入一个字符串时,
ps.setString(1,“aqa1”)
它可以工作,但
ps.setString(2,bilgi.getBaslik())
不会返回更改后的值

有什么不对劲吗? 提前感谢您的回答

我希望我足够清楚

编辑:我发现了故障。在BilgilerDAO中,函数
updateBilgi(Bilgi-Bilgi)
变量
bilgi
不从_bilgi获取id,而是获取其他变量。为什么它拿不到身份证

mainpage.xhtml

<h:form id="bilgiForm">
    <h:dataTable id="bilgiTable" value="#{mainPageController.bilgiListesi}"
        var="bilgiler" border="1">
        <h:column>
            <f:facet name="header">
                <h:outputText value="Başlık" />
            </f:facet>
            <h:outputText value="#{bilgiler.baslik}" />
            <f:facet name="footer">
                <h:outputText value="Başlık" />
            </f:facet>
        </h:column>

        <h:column>
            <f:facet name="header">
                <h:outputText value="Bilgi Metni" />
            </f:facet>
            <h:outputText value="#{bilgiler.bilgi}" />
            <f:facet name="footer">
                <h:outputText value="Bilgi Metni" />
            </f:facet>
        </h:column>


        <h:column>
            <f:facet name="header">
                <h:outputText value="Bilgi Metni" />
            </f:facet>
            <h:outputText value="#{bilgiler.bilgi}" />
            <f:facet name="footer">
                <h:outputText value="Bilgi Metni" />
            </f:facet>
        </h:column>

        <h:column>
            <f:facet name="header">
                <h:outputText value="Bilgi Metni" />
            </f:facet>
            <h:graphicImage
                value="https://canakkale.000webhostapp.com/showImage.php/?name=#{bilgiler.img.name}" />
            <f:facet name="footer">
                <h:outputText value="Bilgi Metni" />
            </f:facet>
        </h:column>

        <h:column>
            <fcore:facet name="header">Edit</fcore:facet>
            <h:commandButton action="edit" value="Edit"
                actionListener="#{mainPageController.edit()}">
                <fcore:param name="id" value="#{bilgiler.id}" />
            </h:commandButton>
        </h:column>
    </h:dataTable>
</h:form>




    <fcore:view>
        <h:form>
            <fcore:view>
                <h:form>
                    <h1>Update</h1>
                    <h:panelGrid border="" cellpadding="20" cellspacing="20"
                        columns="3">
                        <h:outputLabel value="Bilgi ID" />
                        <h:inputText value="#{mainPageController._bilgi.id}"
                            readonly="true" required="true" requiredMessage="Id is Required"
                            id="bilgiID">
                        </h:inputText>
                        <h:message for="bilgiID" />

                        <h:outputLabel value="Tag" />
                        <h:inputText value="#{mainPageController._bilgi.tag}"
                            readonly="true" required="true"
                            requiredMessage="Tag Girmeniz Gereklidir." id="bilgiTag">
                        </h:inputText>
                        <h:message for="bilgiTag" />
                        <h:outputLabel value="Başlık" />
                        <h:inputText value="#{mainPageController._bilgi.baslik}"
                            required="true" requiredMessage="Başlık Girmeniz Gereklidir."
                            id="bilgiBaslik">
                        </h:inputText>
                        <h:message for="bilgiBaslik" />


                        <h:outputLabel value="Bilgi Metni" />
                        <h:inputTextarea value="#{mainPageController._bilgi.bilgi}"
                            required="true" requiredMessage="Başlık Girmeniz Gereklidir."
                            id="bilgiBilgi">
                        </h:inputTextarea>
                        <h:message for="bilgiBilgi" />


                        <h:outputLabel value="Image URL" />
                        <h:inputText value="#{mainPageController._bilgi.img.name}"
                            required="true" requiredMessage="Başlık Girmeniz Gereklidir."
                            readonly="true" id="bilgiImgName">
                        </h:inputText>
                        <h:message for="bilgiImgName" />

                        <h:outputLabel value="Başlık" />
                        <input type="file" value="#{mainPageController._bilgi.img.image}" />
                        <h:commandButton action="#{mainPageController.updateRecord()}"
                            value="Update">
                        </h:commandButton>
                    </h:panelGrid>
                </h:form>
            </fcore:view>


        </h:form>
    </fcore:view>
</h:body>
</html>

我差不多解决了这个问题

<h:inputText value="#{mainPageController._bilgi.id}" readonly="true" required="true" requiredMessage="Id is Required" id="bilgiID">

在这个xhtml行中,readonly=“true”导致它返回null。我现在把它取下来了,它按我的要求工作。尽管如此,我仍然希望它们显示出来,但不可编辑

@Override
    public String updateBilgi(Bilgi bilgi) throws Exception {
        String sql = "UPDATE bilgiler SET bilgi=?, baslik =? WHERE id=? ";
        ps = DatabaseConnection.getConnection().prepareStatement(sql);

        ps.setString(1, "aqa1");
        ps.setString(2, bilgi.getBaslik());
        ps.setInt(3, bilgi.getId());

        int ex = ps.executeUpdate();
        if (ex > 0) {
            System.err.println("coodld");
        }
        ps.close();
        return "mainpage";

    }
<h:inputText value="#{mainPageController._bilgi.id}" readonly="true" required="true" requiredMessage="Id is Required" id="bilgiID">