2013-12-20 15 views
0

我在使用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字段設置爲當前日期?

請同時閱讀我的​​評論。由於

+0

你正在更新的表格是如何設置的?也許字段START_DT是自動更新的?請參閱[這裏](http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html)。 – Pieter

+0

@Pieter我認爲你是對的,但你能解釋這一點,因爲通過閱讀它,我可以理解,有時如果我使用Timestamp數據類型,我已經在我的表中使用,其中一列更新到當前時間執行更新一行中的任何一列,但也寫有「當其他列更改時防止列更新,明確將其設置爲其當前值。」所以我的問題是爲什麼這是發生在我的情況,因爲你可以看到我指定了所有列的值,包括自動更新的列。 Pl幫助 – newProgramer

+0

@Pieter我明白了。我不更新自動更新的列。但現在我的問題是我該如何預防它? – newProgramer

回答

1

像這樣的東西應該這樣做:

ALTER TABLE EXCHANGE_RATES 
    MODIFY COLUMN START_DT TIMESTAMP NOT NULL; 

這種說法僅僅是一個例子,所以一定要小心使用它(例如,我不知道,如果你最初的列可以爲空或不)。

希望這會有所幫助。

+0

非常感謝您的幫助:) 我還發現了其他一些方法: http://stackoverflow.com/questions/2844863/mysql-updating-entry-without-updating-timestamp – newProgramer

相關問題