最近做数据同步功能,从接口获取数据然后存到数据库中以便后续对数据进行相关操作,下面就贴一下相关代码。

1 import com.alibaba.fastjson.JSON;

2 import com.alibaba.fastjson.JSONObject;

3

4 public class Digests {

5 private static final String APPKEY = "appkey";

6 private static final String SECRET = "secret";

7 private static final String OPENAPI_IP_PORT_HTTP = "ip";

8

9 /**

10 * 分页获取数据。

11 */

12 private static final String GET_DATA = "balabala";

13

14 //md5加密

15 public static final String md5(String s) {

16 char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',

17 'a', 'b', 'c', 'd', 'e', 'f' };

18 try {

19 MessageDigest mdTemp = MessageDigest.getInstance("MD5");

20 try {

21 mdTemp.update(s.getBytes("UTF-8"));

22 } catch (UnsupportedEncodingException e) {

23 mdTemp.update(s.getBytes());

24 }

25 byte[] md = mdTemp.digest();

26 int j = md.length;

27 char[] str = new char[j * 2];

28 int k = 0;

29 for (int i = 0; i < j; i) {

30 byte byte0 = md[i];

31 str[(k )] = hexDigits[(byte0 >>> 4 & 0xF)];

32 str[(k )] = hexDigits[(byte0 & 0xF)];

33 }

34 return new String(str).toUpperCase();

35 } catch (Exception e) {

36 }

37 return null;

38 }

39

40 //创建token

41 public static final String buildToken(String url, String paramJson,

42 String secret) {

43 String tempUrl = null;

44 if (url.contains("https://"))

45 tempUrl = url.substring("https://".length());

46 else {

47 tempUrl = url.substring("http://".length());

48 }

49 int index = tempUrl.indexOf("/");

50 String URI = tempUrl.substring(index);

51 String[] ss = URI.split("\\?");

52 if (ss.length > 1) {

53 return md5(ss[0] ss[1] secret);

54 }

55 return md5(ss[0] paramJson secret);

56 }

57

58 /**

59 * HTTP方式 分页获取数据。

60 */

61 public static String getData(double pageNo, Long startTime) throws Exception { //第一个参数是当前页数,第二个参数是请求数据的开始时间(为毫秒数)

62 String url = OPENAPI_IP_PORT_HTTP GET_DATA ;

63 Map map = new HashMap();

64 JSONObject jsonObject = JSONObject.parseObject(getDefaultUserUUID());

65 String opUserUuid = jsonObject.getString("data");

66 //System.out.println(opUserUuid);

67 map.put("appkey", APPKEY);// 设置APPKEY

68 map.put("time", System.currentTimeMillis());// 设置时间参数

69 map.put("pageNo", pageNo);// 设置当前页数

70 map.put("pageSize", 1000);// 设置一页多少条

71 map.put("opUserUuid", opUserUuid);// 设置操作用户UUID

72 map.put("startTime", startTime);// 设置开始时间

73 map.put("endTime", System.currentTimeMillis());// 设置结束时间

74 String params = JSON.toJSONString(map);

75 System.out.println(" ====== getData请求参数:【" params "】");

76 String data = HttpClientSSLUtils.doPost(

77 url "?token="

78 Digests.buildToken(url "?" params, null, SECRET),

79 params);

80 System.out.println(" ====== getData请求返回结果:【{" data "}】");

81

82 return data;

83 }

84 }

从接口拿到数据后,下面就将数据存到数据库中:

1 import net.sf.json.JSONArray;

2 import net.sf.json.JSONObject;

3

4 public class SyncDataFn {

5

6 public int jxJson() throws Exception {

7 //此处省略数据库连接相关语句,具体见上一篇properties配置文件连接数据库

8

9 // 创建Statement用于执行SQL语句

10 connection.setAutoCommit(false);

11 stmt = connection.createStatement();

12

13 Long maxtime;

14 String sqlMaxtime = "select max(eventTime) as maxTime from data";

15 ResultSet rs1 = stmt.executeQuery(sqlMaxtime); // 查询数据库看数据是否已经存在,表示只更新没有更新进来的数据

16 if (rs1.next()) { // 该条数据存在

17 maxtime = rs1.getLong("maxTime");

18 } else {

19 maxtime = (long) 0;

20 }

21 rs1.close();

22

23 //得到json数据

24 String json = Digests.getDoorEventsHistory(1, maxtime);

25 JSONObject jsonObject = (JSONObject) JSONObject.fromObject(json);

26 String to = (String) jsonObject.getString("data");

27 JSONObject toObject = JSONObject.fromObject(to);

28 double total = Integer.parseInt(toObject.getString("total"));

29 int page = (int) Math.ceil(total / 1000);

30 for (double k = 1; k <= page; k ) {

31

32 //得到json数据

33 String jsonTemp = Digests.getData(k, maxtime);

34 String data = JSONObject.fromObject(jsonTemp).getString("data");

35 String list = JSONObject.fromObject(data).getString("list");

36

37

38 JSONArray jsonArr = JSONArray.fromObject(list);

39

40 String dataName[] = new String[jsonArr.size()];

41 String eventType[] = new String[jsonArr.size()];

42 String eventTime[] = new String[jsonArr.size()];

43 String eventName[] = new String[jsonArr.size()];

44 String cardNo[] = new String[jsonArr.size()];

45 String personId[] = new String[jsonArr.size()];

46 String personName[] = new String[jsonArr.size()];

47 String deptName[] = new String[jsonArr.size()];

48

49 for (int i = 0; i < jsonArr.size(); i ) {

50

51 dataName[i] = jsonArr.getJSONObject(i).getString("dataName");

52 eventType[i] = jsonArr.getJSONObject(i).getString("eventType");

53 eventTime[i] = jsonArr.getJSONObject(i).getString("eventTime");

54 eventName[i] = jsonArr.getJSONObject(i).getString("eventName");

55 cardNo[i] = jsonArr.getJSONObject(i).getString("cardNo");

56 personId[i] = jsonArr.getJSONObject(i).getString("personId");

57 personName[i] = jsonArr.getJSONObject(i).getString("personName");

58 deptName[i] = jsonArr.getJSONObject(i).getString("deptName");

59 //如果得到的字段有null的,做相应处理

60 cardNo[i] = (cardNo[i] == "null") ? null "," : "'"

61 cardNo[i] "'";

62 personName[i] = (personName[i] == "null") ? null "," : "'"

63 personName[i] "',";

64 deptUuid[i] "',";

65 deptName[i] = (deptName[i] == "null") ? null "," : "'"

66 deptName[i] "',";

67

68 strSQL = "INSERT into door_events_history values(AUTOID_SEQ.NEXTVAL,"

69 "'" dataName[i] "','" eventType[i] "," eventTime[i] ",'" eventName[i] "'," cardNo[i] "," personId[i] "," personName[i] deptName[i] ")";

70

71 try {

72 String sql = "select cardNo,eventTime from data where cardNo = "

73 cardNo[i]

74 " and eventTime = "

75 eventTime[i];

76 ResultSet rs = stmt.executeQuery(sql); // 查询数据库看数据是否已经存在

77 if (rs.next()) { // 该条数据已经存在

78 } else {

79 stmt.executeUpdate(strSQL);

80 count ;

81 }

82 rs.close();

83 } catch (Exception e) {

84 e.printStackTrace();

85 } finally {

86

87 }

88 }

89

90 connection.commit();

91 } // for结束

92

93 // 先关闭Statement

94 if (stmt != null)

95 try {

96 stmt.close();

97 } catch (SQLException e) {

98 e.printStackTrace();

99 }

100 // 后关闭Connection

101 if (connection != null)

102 try {

103 connection.close();

104 } catch (SQLException e) {

105 e.printStackTrace();

106 }

107 log.info("当前时间===" new Date());

108 log.info("同步结束");

109 log.info("共更新了" count "条数据");

110 return count;

111 }

112 }

其中AUTOID_SEQ.NEXTVAL为Oracle中的自增序列

至此,数据已经同步到指定的数据库中啦,打完收工!

注意:拼接sql的时候一定要按照字段类型来看是否增加单引号,否则插入数据会报错。来源:https://www.icode9.com/content-2-358051.html

java从端口获取数据库_Java之通过接口获取数据并用JDBC存储到数据库中相关推荐

  1. java rsa 存数据库_java – 如何创建RSA密钥对以便将其存储在数据库中?

    我正在尝试实现变异加密算法(理论上由我开发)并作为需求的一部分,我需要生成一个RSA密钥对并将其存储在数据库中,以便以后作为加密过程的一部分进行检索(仅用于加密会话密钥,以便可以使用加密的消息安全地发 ...

  2. jdbc如何对mysql数据库进行查询_【转载】通过JDBC对MySQL数据库的增删改查

    目录 前言:什么是JDBC 维基百科的简介: Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接 ...

  3. java 数据库 空值_java – 是否可以将枚举属性的空值存储到数据库?

    我试图使用JPA TopLink将 Java中实体的枚举属性的null值存储到Oracle数据库.代码执行时没有异常或警告,但实体未存储在数据库中. 该实体定义如下: @Entity public c ...

  4. java输入年月输出日历_java 输入年月,获取日历表

    /* 做日历作业: 输入一个时间如: 2016-11 就显示2016年11月的日历显示 */ import java.util.*; class calendar { public static vo ...

  5. java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...

    一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: mysql mysql-connector-java 5.1.48 ...

  6. oracle数据库中用sql拼接字符串和转成clob存储在数据库中

    1.转成字符串,存储到数据库中 -- B.DESCRIPT73,为需要转换的字段 --||'<br />'则代表在需要转换的字段后面拼接上一个换行符,存到数据库中 select F.POL ...

  7. java 打开服务器excel文件_Java中上传excel文件并在服务器端读取存入数据库

    传excel文件并在服务器端读取存入数据库 博客分类: struts2 Excel JSP XML 工作 Java代码 页面jsp文件 action处理:publicclassManyContacts ...

  8. java poi excel 导入数据库_java POI 处理excel表格数据并导入数据库示例

    java操作Excel最常用的开源组件有poi与jxl.jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007. poi是apache下的一个子项目,poi应该是处理ms的 ...

  9. java mysql连接池配置_Java数据库连接池的几种配置方法(以MySQL数据库为例)

    一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1.方法一:在WebRoot下面建文件夹META-INF,里面建 ...

最新文章

  1. 怎么在leangoo里绑定账号,更改邮箱?
  2. hdu 1520 树形dp
  3. iOS 控件不显示的几点原因
  4. java 远程登陆windows_使用Windows身份验证,JAVA连接到远程MSSQL
  5. OpenCV 4.1.0 + Visual Studio 2019 开发环境搭建 超级简单
  6. Java基础:JavaNIO 之 内存映射文件原理
  7. 【opencv】11.旋转、翻转图片
  8. XBMC源代码分析 3:核心部分(core)-综述
  9. linux设置自动关机命令,Linux中Shutdown命令实现定时自动关机
  10. BZOJ5336 DP套DP
  11. 波士顿学院的计算机科学,美国波士顿学院计算机科学专业本科申请
  12. Mac菜鸟必备小工具- Mounty 原生支持 NTFS 读写驱动应用
  13. 计算机科学第三讲——布尔逻辑和逻辑门
  14. 微信开发网页授权认证
  15. 亚马逊鲲鹏系统:批量注册亚马逊买家号软件
  16. js导出变量 vue_js文件中怎么引用vue实例?
  17. 微信登陆的LOL只有一个服务器,lol微信登录_lol能用微信登录吗_lol微信登录只有一个区-站长之家...
  18. 网站分析11——成本控制类指标
  19. 我和Python的Py交易》》》》》》函数
  20. 接口测试面试题及参考答案,就等你来看~

热门文章

  1. android 地图放大缩小按钮,Android 百度最新地图隐藏 放大缩小按钮、指南针、缩放比例的方法...
  2. java usbkey数字证书_Java创建数字证书
  3. vmware中ubuntu虚拟机扩容
  4. Sublime删除所有包含特定值的行
  5. 工业以太网交换机可以家用吗?
  6. 【渝粤教育】广东开放大学 数据结构 形成性考核 (24)
  7. 【渝粤题库】广东开放大学 商务翻译实务 形成性考核
  8. 【渝粤题库】国家开放大学2021春2509学前教育学题目
  9. 【超级鼠标键盘锁】项目工程下载地址
  10. 在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)