在准备好的语句中更改表中的数据插入技术

时间:2017-06-02 14:41:13

标签: java jdbc

我在REST Webservice的数据访问对象实现代码中有以下语句。 Hibernate也参与其中。

private void createNewHistory(EmployeeHistory history_) throws DaoException
{            
        DataSource ds;
        Connection conn = null;
        PreparedStatement ps = null;


        java.util.Date now = new java.util.Date();
        java.sql.Date sqlNow = new java.sql.Date(now.getTime());

        try {

        ds = jdbcTemplate.getDataSource();
        conn = ds.getConnection();      

        // Generate the query
        StringBuilder sql = new StringBuilder();
        sql.append("INSERT INTO EMPLOYEE_HISTORY (");
        sql.append("EMPLOYEE_ID, ");
        sql.append("COMPANY_ID, ");
        sql.append("PREVIOUS_STATUS_ID, ");
        sql.append("CURRENT_STATUS_ID, ");
        sql.append("CHANGE_DATE, ");
        sql.append("CHANGER_ID, ");
        sql.append("EMPLOYEE_STATUS_CHANGE_COMMENT, ");
        sql.append("PREV_REVIEW_STATUS_ID, ");
        sql.append("CUR_REVIEW_STATUS_ID, ");
        sql.append("COMPANY_STATUS_CHANGE_COMMENT ");
        sql.append(") VALUES (");
        sql.append("?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ");


        ps = conn.prepareStatement(sql.toString());
        ps.setInt(1, history_.getEMPLOYEEId());
        ps.setInt(2, history_.getCompanyId());
        ps.setInt(3, history_.getPreviousStatusId());
        ps.setInt(4, history_.getCurrentStatusId());
        ps.setDate(5, sqlNow);
        ps.setInt(6, history_.getChangerId());
        ps.setString(7, history_.getEMPLOYEEStatusChangeComment());
        ps.setInt(8, history_.getPrevReviewStatusId());
        ps.setInt(9, history_.getCurReviewStatusId());
        ps.setString(10, history_.getCOMPANYStatusChangeComment());

        ... so on and so forth....

我实际上担心在表格中最近两行处理PREVIOUS_STATUS_IDCURRENT_STATUS_ID。 比如说两行中的最新数据如下所示(仅考虑上面两个ID)

数据场景#1

        PREVIOUS_STATUS_ID  |   CURRENT_STATUS_ID
              0             |         1001
              0             |         1001 

因此,当我运行上述查询时,基于当前场景的数据库中的第三条记录将如下插入:

数据场景#2:

         PREVIOUS_STATUS_ID  |   CURRENT_STATUS_ID
              0              |         1001
              0              |         1001 
              0              |         1001 

是否可以确保PREVIOUS_STATUS_ID看起来像以下(1001)而不是上面的那个,它只是下面一行的副本:

数据场景#3:

         PREVIOUS_STATUS_ID  |   CURRENT_STATUS_ID
              1001           |         1001
              0              |         1001 
              0              |         1001 

我假设这将涉及上述代码中围绕这两行的一些if-else语句?

ps.setInt(3, history_.getPreviousStatusId());
ps.setInt(4, history_.getCurrentStatusId());          

编辑(更多说明):

考虑到Data Scenario #1,我们可以看到常规模式已经建立,其中第一列始终获得0值,第二列 始终获得1001值。

同样在Data Scenario #2中,我们可以看到具有三行的相同模式。

每次第一列获得0而第二列获得1001时,我不想使用相同的模式,而是希望有一个像 Data Scenario#3中显示的一个,我想将最近记录的Previous_status_ID设置为与Current_Status_ID相同的值, 在我的情况下是1001

因为稍后在我的代码中的某个地方,我想使用像WHERE Previous_status_ID != Current_Status_ID这样的WHERE子句在我的代码中进行比较,并希望基于此来过滤记录。

0 个答案:

没有答案