2013-12-20 3 views
0

Я создаю пользовательский интерфейс, показывающий таблицу, используя 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 поле устанавливается на текущую дату?

Просьба также прочитать мои комментарии ниже. Благодаря

+0

Как настраивается таблица, которую вы обновляете? Может быть, поле START_DT автоматически обновляется? См. [Здесь] (http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html). – Pieter

+0

@Pieter Я думаю, что вы правы, но можете ли вы объяснить это, потому что, читая его, я могу понять, что иногда, если я использую тип данных Timestamp, который я использовал в своей таблице, один из столбцов обновляется до текущего времени, когда выполняется обновление любой из столбцов в строке, но также там написано: «Чтобы предотвратить обновление столбца при изменении других столбцов, явно установите его на текущее значение». поэтому мой вопрос заключается в том, почему это происходит в моем случае, поскольку вы можете видеть, что я указываю значение для всего столбца, включая тот, который автоматически обновляется. Pl Help – 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

Смежные вопросы