Я создаю пользовательский интерфейс, показывающий таблицу, используя Struts
, JSP
, где пользователь может обновить запись в таблице.Почему обновляется поле, которое не является частью запроса 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
:
<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 обновляется до текущей даты.
Я не знаю, почему это происходит, поскольку я даже не обновляю 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 Help – newProgramer
@Pieter Я получил его. Я не обновляю столбец, который обновляется автоматически. Но теперь мой вопрос: как я могу это предотвратить? – newProgramer