今天写了java原始代码-----把别人家数据库某个时间段的时间给同步到本地数据库

package com.bean.freezer;
import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bean.gnet.UUIDGenerator;
import com.common.SouthOrder;
import com.dao.recharge.RechargeDao;
import com.utils.HttpClientUtils;
import base.bean.Fbean;
import common.Logger;

/**
 * @describtion: 插入设备日用量数据工具类
 * @author robin 2020年6月23日 上午11:11:26
 * 
 */
public class FreezerGenerator {

	public static void main(String[] args) {

		// 数据手动连接6步曲
		System.out.print("数据库手动连接");
		Connection conn = getConnection();
		Logger logger = Logger.getLogger(FreezerGenerator.class);
		List<Date> dateTime = getDateTime();
		// 1.调取用户登录接口
		String loginUrl = "https://yun.sinocold.net:5001/api/ExternalApi/login?account=xx&pwd=yy";
		String projectUrl = "https://yun.sinocold.net:5001/api/ExternalApi/GetPr?";
		String loginInfo = HttpClientUtils.doGet(loginUrl);
		JSONObject loginObject = JSONObject.parseObject(loginInfo);
		if (!loginObject.getString("Code").equals("200") && loginObject.getString("Message").equals("成功")) {
			System.out.println("接口调用失败!");
		} else {
			logger.info("登录成功,开始处理业务逻辑!");
			long startTime = System.currentTimeMillis();
			if (loginObject != null) {
				JSONObject data = loginObject.getJSONObject("Data");
				String token = data.getString("token");
				JSONArray projectData = data.getJSONArray("ProjectData");
				for (int j = 0; j < projectData.size(); j++) {
					JSONObject js = projectData.getJSONObject(j);
					String companyId = js.getString("CompanyId");
//					String companyName = js.getString("CompanyName");
					String projectId = js.getString("ProjectId");
					String realMonth=null;
					// 开关作用,定义在循环外层
					boolean flag = true;
					// 2.调用获取项目能耗接口
					for (Date date : dateTime) { // System.out.println(new
						String day = new SimpleDateFormat("yyyy-MM-dd").format(date);
						String projectEnergyUrl = projectUrl + "companyId=" + companyId + "&projectId=" + projectId
								+ "&startDate=" + day + "&subentryId=1";// +"&Authorization=Bearer "+token
						String coolDevice = HttpClientUtils.doGetByToken(projectEnergyUrl, token);
						String month = day.substring(0, 7);// 2020-06 2020-06-22 从昨天开始
						String everyDay = day.substring(8, 10);// 22 2020-06-22 从昨天开始
						String dday = "D" + everyDay;
						System.out.println("查询日期:" + day + "--------->" + coolDevice + "\t");
						JSONObject deviceObject = JSONObject.parseObject(coolDevice);
			          if (deviceObject.getString("Code").equals("200")&& deviceObject.getString("Message").equals("成功")) 
			             {
							JSONObject dataInfo = deviceObject.getJSONObject("Data");
							JSONObject innerData = dataInfo.getJSONObject("Data");
							JSONArray lastDeviceInfos = innerData.getJSONArray("独立租户");
							//第二次外层循环flag=false   ,每个循环执行 40次
		                            if(!flag) {
		                            	for (int i = 0; i < lastDeviceInfos.size(); i++) {
											JSONObject singleDevice = lastDeviceInfos.getJSONObject(i);
											String id = singleDevice.getString("Id");
											String value = singleDevice.getString("value");
												// 方法2:JVM直接跟数据库通讯
												try {
													String sql2="update Freezer_DayNumber set "+dday+"=? where UUID=? and MON_MON=?";
			 										PreparedStatement statement2 = conn.prepareStatement(sql2);
				 									statement2.setString(1,value);
				 									statement2.setString(2,id);
				 									statement2.setString(3,month);
				 									statement2.executeUpdate();
			 										logger.info("sql语句2-------------->"+sql2);
												} catch (SQLException e) {
													logger.info("数据库连接异常!");
													e.printStackTrace();
												}
		
								         }//for循环结尾括号
		                            	
		                            	
		                            	
		                            	//如果月份相同,则为false
		                            }else {
		                            	// lastDeviceInfos 循环遍历冷柜设备信息 内层for循环执行 40次(因为40个冷柜设备),外层日期循环执行一次
		    							for (int i = 0; i < lastDeviceInfos.size(); i++) {
		    										JSONObject singleDevice = lastDeviceInfos.getJSONObject(i);
		    										String id = singleDevice.getString("Id");
		    										String value = singleDevice.getString("value");
		    		//								System.out.println(month+"/"+id+"/"+value+"\t");
		    		//								String name = singleDevice.getString("name");//可以不插入表
		    										// 数据库操作 coolDevice信息,最终存入数据库表
		    										String uuid = UUIDGenerator.generate();
		    		//								fb.setA1(id);
		    		//								fb.setA2(value);
		    		//								fb.setA3(dday);
		    		//								fb.setA4(month);
		    		//								try {
		    		//									//插入表Freezer_DayNumber信息
		    		//									rechargeDao.addFreezerDayNumber(fb);
		    		//								} catch (Exception e) {
		    		//									e.printStackTrace();
		    		//								}
		    											// 方法2:JVM直接跟数据库通讯
		    											try {
		    												// 月份变化的时候执行插入操作
		    												String sql = "insert into Freezer_DayNumber(SY_ID,UUID,MON_MON," + dday
		    														+ ") values (?,?,?,?)";
		    												PreparedStatement statement = conn.prepareStatement(sql);
		    												statement.setString(1, uuid);
		    												statement.setString(2, id);
		    												statement.setString(3, month);
		    												statement.setString(4, value);
		    												statement.executeUpdate();
		    												logger.info("sql语句1-------------->" + sql);
		    			
		    			//										//月份和上一次循环一样的话就执行更新操作
		    			//										String sql2="update Freezer_DayNumber set "+dday+"=? where UUID=?";
		    			//										PreparedStatement statement2 = conn.prepareStatement(sql2);
		    			//										statement2.setString(1,value);
		    			//										statement2.setString(2,id);
		    			//										statement2.executeUpdate();
		    			//										logger.info("sql语句2-------------->"+sql2);
		    			//									}else {
		    			//										//月分变化的时候执行插入操作
		    			//										String sql3="insert into Freezer_DayNumber(SY_ID,UUID,MON_MON,"+dday+") values (?,?,?,?)";
		    			//										PreparedStatement statement3 = conn.prepareStatement(sql3);
		    			//										statement3.setString(1,uuid);
		    			//										statement3.setString(2,id);
		    			//										statement3.setString(3,month);
		    			//										statement3.setString(4,value);
		    			//										statement3.executeUpdate();
		    			//										logger.info("sql语句3-------------->"+sql3);
		    			//									}
		    												/*
		    												 * 数据库查询语句没问题 String sql="select * from rooms_man"; ResultSet resultSet =
		    												 * statement.executeQuery(sql); while (resultSet.next()) { String rm_id =
		    												 * resultSet.getString("rm_id"); logger.info(rm_id); }
		    												 */
		    											} catch (SQLException e) {
		    												logger.info("数据库连接异常!");
		    												e.printStackTrace();
		    											}
		
		    							    }//for循环结尾括号
									}//else结尾    40次循环遍历过程  结束月
//                        	 realMonth = day.substring(0, 7);
                        	//realMonth是结束月、month是开始月
							    if (everyDay.equals("01")) {
									flag = true;
								}else {
									flag =false;
								}
						}//if结尾
							try {
								System.out.println("开始睡眠了,等待10秒");
								// 接口调用不能太频繁
								Thread.sleep(10000);
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
					} //以上是双层for循环结尾

				}
				long endTime = System.currentTimeMillis();
				logger.info("经历了:" + (endTime - startTime) / 1000 / 60 + " 分钟");
			}
		}
	}

	private static Connection getConnection() {
		String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
		String url = "jdbc:sqlserver://localhost:1433;DatabaseName=JDY";
		String userName = "sa";
		String password = "11";
		try {
			// 1.注册驱动
			Class.forName(driverName);
			// 2.创建连接对象
			Connection connection = DriverManager.getConnection(url, userName, password);
//					String sql = "select * from rooms_man";
			// 3-1.创建数据库预处理对象
//					PreparedStatement psStatement = connection.prepareStatement(sql);
//					psStatement.setXxx(int index,Object val);
//					psStatement.executeQuery();
			// 3-2.创建数据库语句对象
//					Statement statement = connection.createStatement();
			// 4.数据库查询
//					  statement.executeUpdate(sql);
			// 5.遍历结果集

			// 6.关闭异常
			return connection;

		} catch (Exception e) {
			System.out.println("数据库连接失败!");
			e.printStackTrace();
		}
		return null;

	}

	private static List<Date> getDateTime() {
		// 存日期的数组
		List<Date> dateList = new ArrayList<Date>();
		Calendar cal = Calendar.getInstance();
		Date subTime = null;
		Date parseBeginTime = null;
		String beginTime = "2020-03-28";
		try {
			parseBeginTime = new SimpleDateFormat("yyyy-MM-dd").parse(beginTime);
		} catch (ParseException e1) {
			e1.printStackTrace();
		}
		do {
			try {
				// 获取当前日期的对应天数
				int day = cal.get(Calendar.DAY_OF_MONTH);
				// 天数减一
				cal.set(Calendar.DAY_OF_MONTH, day - 1);
				// 获取昨天日期
				subTime = cal.getTime();
				dateList.add(subTime);
			} catch (Exception e) {
				e.printStackTrace();
			}

		} while (!new SimpleDateFormat("yyyy-MM-dd").format(subTime)
				.equals(new SimpleDateFormat("yyyy-MM-dd").format(parseBeginTime)));

		return dateList;
	}

}

历经15分钟,迁移数据OK
在这里插入图片描述
表中数据由无变有
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值