Java循环中自定义标签

在C语言中,goto语句也被称为无条件转移语句,通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。而在Java语言中goto是保留关键字,但是在Java中我们也可以在特定的情况下,通过特殊的手段来实现goto所能达到的功能效果,即:(特定环境:只有在循环体内,比如for、while语句(含do…while语句)等语句中。)(特殊手段:通过自定义标签,结合循环控制关键字break和continue来实现,eg:break[标签]/contonue[标签])

如:要实现 指定输入参数,指针遍历A表每次拿出1000条数据,之后将1000条同时插入B表,以此循环取数据插数据…

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.utils.Toolkit;

/**
 * @author wugang
 *  指定输入参数,指针遍历A表每次拿出1000条数据,之后将1000条同时插入B表,循环...
 *  (参数输入: -p parameter -startTime 2015 -01 -endTime 2015- 02)
 */
public class ModelPriceHistory {

      public static void main (String[] args) {
           String scope = "parameter"; //parameter 添加时间参数 , all 全部执行
           String startTime = "";
           String endTime = "";

            // 参数输入: -p parameter -startTime 2015-01 -endTime 2015-02
            for ( int i = 0; i < args. length; i++) {
                String arg = args[ i];
                 if ( arg.equals( "-p")) {
                      scope = args[++ i];
                } else if ( arg.equals( "-startTime")) {
                      startTime = args[++ i];
                } else if ( arg.equals( "-endTime")) {
                      endTime = args[++ i];
                }
           }

           String sql = null;
            if ( "all".equals( scope)) {
                 sql = "";
           } else if ( "parameter".equals( scope)) {
                 sql = "SELECT model_id, prov_id, city_id, MIN(lowest_price), DATE_FORMAT(update_time,'%Y-%m-01') "
                           + "FROM test.price_history "
                           + "WHERE update_time > '" +startTime+ "-01' "
                           + "AND update_time < '"+endTime +"-01'"
                           + " GROUP BY model_id,city_id"; //2014-11-01 <-> 2014-12-01
           }

           System. out.println( "execute sql:" + sql);
            getData( sql);
     }

      private static void getData(String sql) {
           Connection con = Toolkit. getDbConnectionForTest();
           PreparedStatement ps = null;
           ResultSet rs = null;
//         Map<String, Object> dataMap = new HashMap<String, Object>();

            try {
                 ps = con.prepareStatement( sql);
                 rs = ps.executeQuery();
                stop:{
                      while ( rs.next()) {
                           List<Map<String, Object>> list = new ArrayList<Map<String , Object>>(1000);
                            for ( int i = 0; i < 1000; i++) {
                                Map<String, Object> map = new HashMap<String, Object>();
                                 int modelId = rs.getInt(1);
                                 int cityId = rs.getInt(2);
                                 int provId = rs.getInt(3);
                                 float lowestPrice = rs.getFloat(4);

                                 map.put( "modelId", modelId);
                                 map.put( "provId", cityId);
                                 map.put( "cityId", provId);
                                 map.put( "lowestPrice", lowestPrice);
                                 map.put( "updateTime", rs.getString(5));

                                 list.add( map);
                                 if (! rs.next()) {
                                      break stop; //此时的break直接跳出stop带标记的,可以指定怎么跳出
                                }
                           }
                            inserts( con, list);
                     }
                }
           } catch (SQLException e) {
                 e.printStackTrace();
           } finally {
                Toolkit. close( con, rs, ps);
                System. out.println( "insert end...");
           }
     }

      private static void inserts(Connection con, List<Map<String, Object>> list ) {
           StringBuilder sqlParam = new StringBuilder();
            for (Map<String, Object> map : list) {
                 int modelId = ( int) map.get( "modelId");
                 int provId = ( int) map.get( "provId");
                 int cityId = ( int) map.get( "cityId");
                 float lowestPrice = ( float) map.get( "lowestPrice");
                String startTime = (String) map.get( "updateTime");

                StringBuilder sb = new StringBuilder();
                 sb.append( "(");
                 sb.append( modelId+ ",");
                 sb.append( provId+ ",");
                 sb.append( cityId+ ",");
                 sb.append( lowestPrice+ ",");
                 sb.append( startTime);
                 sb.append( ")");
                 sqlParam.append( sb.append( ","));
//              System.out.println(map.get("modelId")+"-"+map.get("cityId")+"-"+map.get("lowestPrice"));
           }
            sqlParam.deleteCharAt( sqlParam.length()-1);
            sqlParam.append( ";");
            insertAll( con, sqlParam);

     }

      private static void insertAll(Connection con, StringBuilder sqlParam ) {
           String sql = "INSERT INTO test.price_month_history(model_id, prov_id, city_id, lowest_price, start_time) "
                     + "VALUES "+ sqlParam.toString();
//         System.out.println( sql);
           PreparedStatement ps = null;
            try {
                 ps = con.prepareStatement( sql);
                 ps.executeUpdate();
           } catch (SQLException e) {
                 e.printStackTrace();
           } finally {
                Toolkit. close( con, null, ps);
           }

     }
/***
    // 插入前去重
     private static void insert(Connection con, Map<String, Object> dataMap) {
            int modelId = (int ) dataMap.get("modelId");
            int provId = (int ) dataMap.get("provId");
            int cityId = (int ) dataMap.get("cityId");
           float lowestPrice = (float) dataMap.get("lowestPrice");
           String startTime = (String) dataMap.get("updateTime");
//         System.err.println(modelId + "=="+cityId +" -"+ lowestPrice);

           String sql = "INSERT INTO test.price_month_history(model_id, prov_id, city_id, lowest_price, start_time) "
                     + "VALUES (?, ?, ?, ?, ?)";
//         String checkSql = "SELECT model_id, city_id, start_time FROM test.price_month_history";

           PreparedStatement insertStmt = null;
           try {
                //去重
//              checkPs = con.prepareStatement(checkSql);
//               rs = checkPs.executeQuery();
//              while (rs.next()) {
//                    int model_id = rs.getInt(1);
//                    int city_id = rs.getInt(2);
//                   String time = rs.getString(3);
//              }
                insertStmt = con.prepareStatement( sql);

                 int index = 1;
                insertStmt.setInt(index++, modelId);
                insertStmt.setInt(index++, provId);
                insertStmt.setInt(index++, cityId);
                insertStmt.setFloat(index++, lowestPrice);
                insertStmt.setString(index++, startTime);
                insertStmt.executeUpdate();
           } catch (SQLException e) {
                e.printStackTrace();
           } finally {
                Toolkit.close(insertStmt);
           }


//         for (Map.Entry<String, Object> entry : dataMap.entrySet()) {
//               int modelId = (int ) dataMap.get("modelId");
//               int provId = (int ) dataMap.get("provId");
//               int cityId = (int ) dataMap.get("cityId");
//              float lowestPrice = (float) dataMap.get("lowestPrice");
//              System.err.println(modelId + "=="+cityId +" -"+ lowestPrice);
//         }
     }
***/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值