java从端口获取数据库_Java之通过接口获取数据并用JDBC存储到数据库中
最近做数据同步功能,从接口获取数据然后存到数据库中以便后续对数据进行相关操作,下面就贴一下相关代码。
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存储到数据库中相关推荐
- java rsa 存数据库_java – 如何创建RSA密钥对以便将其存储在数据库中?
我正在尝试实现变异加密算法(理论上由我开发)并作为需求的一部分,我需要生成一个RSA密钥对并将其存储在数据库中,以便以后作为加密过程的一部分进行检索(仅用于加密会话密钥,以便可以使用加密的消息安全地发 ...
- jdbc如何对mysql数据库进行查询_【转载】通过JDBC对MySQL数据库的增删改查
目录 前言:什么是JDBC 维基百科的简介: Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接 ...
- java 数据库 空值_java – 是否可以将枚举属性的空值存储到数据库?
我试图使用JPA TopLink将 Java中实体的枚举属性的null值存储到Oracle数据库.代码执行时没有异常或警告,但实体未存储在数据库中. 该实体定义如下: @Entity public c ...
- java输入年月输出日历_java 输入年月,获取日历表
/* 做日历作业: 输入一个时间如: 2016-11 就显示2016年11月的日历显示 */ import java.util.*; class calendar { public static vo ...
- java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...
一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: mysql mysql-connector-java 5.1.48 ...
- oracle数据库中用sql拼接字符串和转成clob存储在数据库中
1.转成字符串,存储到数据库中 -- B.DESCRIPT73,为需要转换的字段 --||'<br />'则代表在需要转换的字段后面拼接上一个换行符,存到数据库中 select F.POL ...
- java 打开服务器excel文件_Java中上传excel文件并在服务器端读取存入数据库
传excel文件并在服务器端读取存入数据库 博客分类: struts2 Excel JSP XML 工作 Java代码 页面jsp文件 action处理:publicclassManyContacts ...
- java poi excel 导入数据库_java POI 处理excel表格数据并导入数据库示例
java操作Excel最常用的开源组件有poi与jxl.jxl是韩国人开发的,发行较早,但是更新的很慢,目前似乎还不支持excel2007. poi是apache下的一个子项目,poi应该是处理ms的 ...
- java mysql连接池配置_Java数据库连接池的几种配置方法(以MySQL数据库为例)
一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1.方法一:在WebRoot下面建文件夹META-INF,里面建 ...
最新文章
- 怎么在leangoo里绑定账号,更改邮箱?
- hdu 1520 树形dp
- iOS 控件不显示的几点原因
- java 远程登陆windows_使用Windows身份验证,JAVA连接到远程MSSQL
- OpenCV 4.1.0 + Visual Studio 2019 开发环境搭建 超级简单
- Java基础:JavaNIO 之 内存映射文件原理
- 【opencv】11.旋转、翻转图片
- XBMC源代码分析 3:核心部分(core)-综述
- linux设置自动关机命令,Linux中Shutdown命令实现定时自动关机
- BZOJ5336 DP套DP
- 波士顿学院的计算机科学,美国波士顿学院计算机科学专业本科申请
- Mac菜鸟必备小工具- Mounty 原生支持 NTFS 读写驱动应用
- 计算机科学第三讲——布尔逻辑和逻辑门
- 微信开发网页授权认证
- 亚马逊鲲鹏系统:批量注册亚马逊买家号软件
- js导出变量 vue_js文件中怎么引用vue实例?
- 微信登陆的LOL只有一个服务器,lol微信登录_lol能用微信登录吗_lol微信登录只有一个区-站长之家...
- 网站分析11——成本控制类指标
- 我和Python的Py交易》》》》》》函数
- 接口测试面试题及参考答案,就等你来看~
热门文章
- android 地图放大缩小按钮,Android 百度最新地图隐藏 放大缩小按钮、指南针、缩放比例的方法...
- java usbkey数字证书_Java创建数字证书
- vmware中ubuntu虚拟机扩容
- Sublime删除所有包含特定值的行
- 工业以太网交换机可以家用吗?
- 【渝粤教育】广东开放大学 数据结构 形成性考核 (24)
- 【渝粤题库】广东开放大学 商务翻译实务 形成性考核
- 【渝粤题库】国家开放大学2021春2509学前教育学题目
- 【超级鼠标键盘锁】项目工程下载地址
- 在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)