我正在尝试将数据从我的 XPage 保存到 MySQL 数据库。我已经建立了一个连接并且它可以工作(这可以通过我的动态视图面板能够获取 MySQL 表中的数据这一事实来证明)。但我无法将我的数据提交给 MySQL。我正在关注XPagesJDBC.nsf
扩展库中的示例数据库。
MySQL连接文件mysqlconn.jdbc
:
<jdbc>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://***.***.***.***:3306/project_management</url>
<user>adminuser</user>
<password>******</password>
</jdbc>
在我的 XPage 中,我创建了一个数据源xe:jdbcRowSet
<xp:this.data>
<xe:jdbcRowSet var="jdbcrsProjectMgmt" connectionName="mysqlconn"
sqlTable="project_details">
</xe:jdbcRowSet>
</xp:this.data>
然后在我的xp:panel
我使用数据源来保存对象。我有两个名称和描述字段映射到 MySQL 数据库表中的相应列。
<xp:panel>
<xp:this.data>
<xe:objectData var="row"
saveObject="#{javascript:jdbcrsProjectMgmt.saveRow(row);}">
<xe:this.createObject><![CDATA[#{javascript:var id = context.getUrlParameter("id");
if (id != null && !id.trim().equals("")) {
jdbcrsProjectMgmt.getRow(parseInt(id) - 1);
} else {
jdbcrsProjectMgmt.newRow(0);
}}]]></xe:this.createObject>
</xe:objectData>
</xp:this.data>
<xp:table border="0" cellpadding="5" cellspacing="0">
<xp:tr>
<xp:td>Name</xp:td>
<xp:td>
<xp:inputText id="txtName" value="#{row.name}"></xp:inputText>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>Description</xp:td>
<xp:td>
<xp:inputText id="txtDescription"
value="#{row.description}">
</xp:inputText>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td colspan="2" align="center">
<xp:button value="Save" id="btnSave">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" immediate="false" save="false">
<xp:this.action>
<xp:actionGroup>
<xp:saveDocument var="row"></xp:saveDocument>
<xp:openPage
name="/viewProject.xsp">
</xp:openPage>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
当我尝试单击保存按钮时,数据未保存且未显示错误。但是,如果我将其更改Button type
为Submit
( <xp:eventHandler ..... save="true">
),则会出现错误:
Error saving data source jdbcrsProjectMgmt
javax.sql.rowset.spi.SyncProviderException: Can't call commit when autocommit=true
Can't call commit when autocommit=true
但这一次奇怪的是数据被保存了。我找不到这个autocommit
属性,也不知道在哪里设置它。我该如何解决这个问题?这是 XPages 还是 MySQL 的问题?