我在使用Struts
,JSP
來製作一個UI,其中用戶可以更新表中的記錄。爲什麼更新的字段不是UPDATE請求的一部分?
更新查詢UpdateExchangeRate.xml
是:
<query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="callType.xsd">
<statement>
update EXCHANGE_RATES set Code = ?, RATE = ?, DATE_UPDATED = ? where START_DT = ? and END_DATE = ?
</statement>
<parms>
<parm datatype="VARCHAR" type="IN"/>
<parm datatype="DECIMAL" type="IN"/>
<parm datatype="DATE" type="IN"/>
<parm datatype="DATE" type="IN"/>
<parm datatype="DATE" type="IN"/>
</parms>
<datasource>mysql</datasource>
</query>
exchange_rates.xml
:除了START_DT被更新爲當前日期
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="page.xsd">
<columns>
<group id="exchange_rates">
<column name="START_DT" displayName="Start Date"/>
<column name="END_DATE" displayName="End Date"/>
<column name="Code" displayName="Code"/>
<column name="RATE" displayName="Rate" />
<column name="DATE_UPDATED" displayName="Date Updated" />
</group>
</columns>
<javascript>yenToDollarExchangeRate.js</javascript>
<daoConfig>
<operations>
<operation type="RETRIEVE">
<dao name="exchange_rates/GetExchangeRate" id="exchangeRate" groupId="exchange_rates" display="table" />
</operation>
<operation type="UPDATE">
<dao name="exchange_rates/UpdateExchangeRate" id="exchangeRate" >
<param requestParameter="Code" />
<param requestParameter="RATE" />
<param requestParameter="DATE_UPDATED" />
<param requestParameter="START_DT" />
<param requestParameter="END_DATE" />
</dao>
</operation>
</operations>
</daoConfig>
</page>
當執行更新查詢一切工作正常。
我不知道爲什麼會發生這種情況,因爲我甚至沒有更新更新查詢中的START_DT。
這裏是日誌:
SystemOut,014 [SampleApp] com.app.common.util.DAOFrameworkUtil [DEBUG] - Interpretation of file /xml/dao/exchange_rates/UpdateExchangeRate.xml as Procedure was unsuccessful. Retrying as Query.
SystemOut,022 [SampleApp] com.app.common.dao.GenDAO [INFO ] - callString =
update EXCHANGE_RATES set Code = ?, RATE = ?, DATE_UPDATED = ? where START_DT = ? and END_DATE = ?
SystemOut,023 [SampleApp] com.app.common.dao.GenDAO [DEBUG] - parmValues =
SystemOut,023 [SampleApp] com.app.common.dao.GenDAO [DEBUG] - p value = C
SystemOut,023 [SampleApp] com.app.common.dao.GenDAO [DEBUG] - p value = 870.000
SystemOut,024 [SampleApp] com.app.common.dao.GenDAO [DEBUG] - p value = 2013-09-17
SystemOut,024 [SampleApp] com.app.common.dao.GenDAO [DEBUG] - p value = 2010-08-01 <<---- This is the value that UI should show instead of current date
SystemOut,024 [SampleApp] com.app.common.dao.GenDAO [DEBUG] - p value = 2010-08-31
SystemOut,024 [SampleApp] com.app.common.dao.GenDAO [INFO ] - parmL .size() = 5, parmValues.length = 5
SystemOut,025 [SampleApp] com.app.common.dao.GenDAO [INFO ] - parm.getType() = IN, parm.getDatatype() = VARCHAR
SystemOut,025 [SampleApp] com.app.common.dao.GenDAO [INFO ] - method name = setString
SystemOut,025 [SampleApp] com.app.common.dao.GenDAO [INFO ] - parm.getType() = IN, parm.getDatatype() = DECIMAL
SystemOut,025 [SampleApp] com.app.common.dao.GenDAO [INFO ] - method name = setBigDecimal
SystemOut,026 [SampleApp] com.app.common.dao.GenDAO [INFO ] - parm.getType() = IN, parm.getDatatype() = DATE
SystemOut,026 [SampleApp] com.app.common.dao.GenDAO [INFO ] - method name = setDate
SystemOut,026 [SampleApp] com.app.common.dao.GenDAO [INFO ] - parm.getType() = IN, parm.getDatatype() = DATE
SystemOut,026 [SampleApp] com.app.common.dao.GenDAO [INFO ] - method name = setDate
SystemOut,027 [SampleApp] com.app.common.dao.GenDAO [INFO ] - parm.getType() = IN, parm.getDatatype() = DATE
SystemOut,027 [SampleApp] com.app.common.dao.GenDAO [INFO ] - method name = setDate
SystemOut,027 [SampleApp] com.app.common.dao.GenDAO [INFO ] - Calling query
SystemOut,114 [SampleApp] com.app.common.dao.GenDAO [INFO ] - Query executed successfully
SystemOut,114 [SampleApp] com.app.common.dao.GenDAO [INFO ] - Calling user defined method to create DTO
SystemOut,114 [SampleApp] com.app.common.dao.GenDAO [INFO ] - Attempting to close resultset, statement and connection
SystemOut,115 [SampleApp] com.app.common.dao.GenDAO [INFO ] - resultset, statement and connection closed successfully
爲什麼START_DT
字段設置爲當前日期?
請同時閱讀我的評論。由於
你正在更新的表格是如何設置的?也許字段START_DT是自動更新的?請參閱[這裏](http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html)。 – Pieter
@Pieter我認爲你是對的,但你能解釋這一點,因爲通過閱讀它,我可以理解,有時如果我使用Timestamp數據類型,我已經在我的表中使用,其中一列更新到當前時間執行更新一行中的任何一列,但也寫有「當其他列更改時防止列更新,明確將其設置爲其當前值。」所以我的問題是爲什麼這是發生在我的情況,因爲你可以看到我指定了所有列的值,包括自動更新的列。 Pl幫助 – newProgramer
@Pieter我明白了。我不更新自動更新的列。但現在我的問題是我該如何預防它? – newProgramer