在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);
// }
}
***/
}