2013-08-19 7 views
0

Из приведенного ниже метода executeUpdate() я хочу обновить данные в таблице db2. Прежде чем делать это, я хочу проверить, имеет ли C_Conf и D_Conf значения «Да» означает, что мне нужно заменить на «Y», а если значение «НЕТ» означает, что мне нужно заменить на «N». где я могу проверить это и добавить к запросу обновления.Проверка состояния Перед загрузкой в ​​таблицу

В executeUpdate() я просто закодировал значение как «N» для C_Conf и D_Conf. здесь я хочу проверить, является ли значение «Да» означает, что мне нужно заменить «Y» или «НЕТ» означает, что мне нужно заменить на «N». Как проверить и где в коде? Пожалуйста, помогите

public class DbTask { 

Connection connection; 

Statement statement, statement1; 

public boolean executeQuery(String dbQuery){ 

    boolean result = false; 

    connection = DatabaseConnection.getCon(); 

    try { 

     statement = connection.createStatement(); 


        result = statement.execute(dbQuery); 

    } catch (SQLException e) { 

     // TODO Auto-generated catch block 

     e.printStackTrace(); 

    } 

    return result; 
} 


public boolean cleanTable(String schema, String tableName) { 

    boolean result = false; 

    connection = DatabaseConnection.getCon(); 

    try { 

     statement = connection.createStatement(); 

     // can be implemented later for deleteing the table data 

    } catch (SQLException e) { 


     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return result; 

} 

общественности недействительным executeUpdate() {

String selectQuery = "select 

                               S_NUMBER,CON,D_CON,R_CON,VAL_CON 

         from 

         OTG.S_SAMPLE_VAL" 

         +" WHERE R_TS = (SELECT MAX(R_TS) FROM 

         OTG.S_SAMPLE_VAL)"; 

    Statement statement; 

try { 
    connection = DatabaseConnection.getCon(); 

    statement = connection.createStatement(); 

    statement1 = connection.createStatement(); 

    ResultSet rs = statement.executeQuery(selectQuery); 

    while(rs.next()){ 

     StringBuffer updateQuery = new StringBuffer(); 

     updateQuery.append("update OTG.R_VAL set "); 

     updateQuery.append("C_Conf='"); 

     updateQuery.append("N', "); 

     // updateQuery.append(rs.getString(2) + "', "); 

     updateQuery.append("D_Conf='"); 

    // updateQuery.append(rs.getString(3) + "', "); 

       updateQuery.append("N', "); 

     updateQuery.append("REVE="); 

     updateQuery.append(rs.getString(4) + ", "); 

     updateQuery.append("VAL='"); 

     updateQuery.append(rs.getString(5) + "' "); 

     updateQuery.append("where S_NO ='" + rs.getString(1) + "'"); 

     System.out.println(updateQuery.toString()); 

     statement1.executeUpdate(updateQuery.toString()); 

     } 



} catch (SQLException e) { 

    // TODO Auto-generated catch block 

      e.printStackTrace(); 

} 

}

}

+0

Изучите подготовленные операторы: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html –

ответ

1

Почему бы вам не просто обновлять значения в одном запросе, в отличие от нахождения сначала, а затем обновить его. Там нет особого смысла в создании базы данных найти и вернуть строку, только затем обновить его в других (ненужных) поездках в базу данных:

update OTG.S_SAMPLE_VAL 
    set C_CONF = case C_CONF when 'Yes' then 'Y' 
          when 'No' then 'N' 
          else C_CONF end 
     ,D_CONF = case D_CONF when 'Yes' then 'Y' 
          when 'No' then 'N' 
          else D_CONF end  
where R_TS = (SELECT MAX(R_TS) FROM OTG.S_SAMPLE_VAL) 
    and C_CONF in ('Yes','No') or D_CONF in ('Yes','No'); 

еще лучше, почему бы не добавить триггер в базу данных для обновления строка перед вставкой происходит, или даже лучше, обновите приложение, которое вставляет строку, чтобы вставить нужное значение ('Y' или 'N')?

+0

Привет, Спасибо, за ответ. Я обновляю данные в таблице R_VAL, выбирая отдельные строки из таблицы S_SAMPLE_VAL с соответствующим столбцу S_NO. При обновлении данных в таблице R_VAL мне нужно заменить значение столбца «Y», если оно «да» или «N», если оно «нет», независимо от того, что используется (верхний или нижний). – 123HIS

+0

Я попытался выполнить запрос .. но это привело к ошибке: «Несколько столбцов возвращаются из подзапроса, которым разрешен только один столбец .. SQLCODE = -412, SQLSTATE = 42823, DRIVER = 4.8.86». Я попробовал ниже, как сказал. – 123HIS

+0

update OTG.R_VAL set C_CONF = case C_CONF, когда «Да», а затем «Y» , когда «Нет», затем «N» else C_CONF end, D_CONF = регистр D_CONF, когда «Да», а затем «Y», когда «Нет», затем «N 'else D_CONF end, где S_NO = (SELECT S_NUM, CON, DIS, REV, VAL FROM OTG.S_R_VAL WHERE R_TS = (SELECT MAX (R_TS) FROM OTG.S_R_VAL)) и C_CONF в («Да», «Нет») или C_CONF в («Да», «Нет») – 123HIS