Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在上载到表之前检查条件_Java_Jdbc_Db2 - Fatal编程技术网

Java 在上载到表之前检查条件

Java 在上载到表之前检查条件,java,jdbc,db2,Java,Jdbc,Db2,从下面的executeUpdate方法中,我想更新db2表中的数据。在此之前,我想检查C_Conf和D_Conf是否有值Yes表示我需要替换为“Y”,如果value为NO表示我需要替换为“N”。我在哪里可以检查这个并附加到更新查询 在executeUpdate中,我只是将C_Conf和D_Conf的值硬编码为'N'。这里我想检查值是否为Yes意味着我需要替换为'Y',如果为NO意味着我需要替换为'N'。如何检查以及代码中的位置?请帮忙 public class DbTask { Connec

从下面的executeUpdate方法中,我想更新db2表中的数据。在此之前,我想检查C_Conf和D_Conf是否有值Yes表示我需要替换为“Y”,如果value为NO表示我需要替换为“N”。我在哪里可以检查这个并附加到更新查询

在executeUpdate中,我只是将C_Conf和D_Conf的值硬编码为'N'。这里我想检查值是否为Yes意味着我需要替换为'Y',如果为NO意味着我需要替换为'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;

}
公共无效执行更新{

  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();

}
}


}

为什么不在单个查询中更新值,而不是先查找行,然后更新它呢。让数据库查找并返回该行并在另一次不必要的数据库访问中更新它没有多大意义:

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”?

了解准备好的语句:Hi Lan,感谢您的回复,我正在更新表R_VAL中的数据,方法是从表S_SAMPLE_VAL中选择与列S_NO对应的不同行。在将数据更新到表R_VAL中时,我需要替换列值buy Y(如果为“是”),如果为“否”,则替换为N(无论使用的大小写)。我尝试了上述查询。。但它导致了错误,因为子查询只允许返回一个列,因此返回了多个列。。SQLCODE=-412,SQLSTATE=42823,DRIVER=4.8.86。我尝试了下面的方法,如你所说。更新OTG.R_VAL set C_CONF=case C_CONF当'Yes'时,然后是'Y'当'Yes'时,然后是'Y'当'No'时,然后是'N'否则D_CONF end其中S_No=从OTG.S_R_VAL中选择S_NUM、CON、DIS、REV、VAL,其中R_TS=从OTG.S_R_VAL中选择最大值,在'Yes'中选择C_CONF,“否”或“是”、“否”中的C_CONF