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">