JAVA抓取中国外汇交易中心各币别对RMB汇率

1 篇文章 0 订阅
1 篇文章 0 订阅

因为中国外汇交易中心使用的数据格式为json,JAVA提供了专门解析json的lib,我们首先要引入该lib(解析json的依赖包有几个,csdn有提供所有lib的压缩包,我用的是json-lib-2.4-jdk15.rar,大家可以在csdn里搜索一下,解压出来即可)。以下是先获得中国外汇交易中心的json字符内容,然后解析json得到的汇率写入oracle 数据库Table:azk_file,所以还需要jdbc驱动包(这个驱动包CSDN也很容易找到)。

如果你是ERP开发者,且刚好是为TOP GP开发 ,那么你可以直接copy,然后打包成jar,在程序里调用这个jar即可。你懂的。

 

先看MAIN部分(传入参数args[0]为要取得汇率的日期):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.ParseException;


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class GetAooi070Data {

 public static void main(String[] args) throws ParseException {
  String date = args[0];
  String url = "http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/ccpr.json?t=" + date; // url链接
  String json = loadJson(url); // 获得json字符串
  JSONObject object = JSONObject.fromObject(json); // 获得jason对象
  JSONArray array = object.getJSONArray("records");// 丢掉头,只取records部分数据
   new inputTiptop("数据库账号", "密码", "数据库IP地址", "数据库Schema", date).insertData(array);
 }

 public static String loadJson(String url) {
  StringBuilder json = new StringBuilder();
  try {
   URL urlObject = new URL(url);
   URLConnection uc = urlObject.openConnection();
   BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream(), "utf-8"));
   String inputLine = null;
   while ((inputLine = in.readLine()) != null) {
    json.append(inputLine);
   }
   in.close();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return json.toString();
 }

}

 

再看CLASS部分(这里取了几个币别,其中日元对RMB汇率要注意换算,官方的是100日元对1人民币的汇率,结果要除以100的):

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import net.sf.json.JSONArray;

public class inputTiptop {
 // 定义数据库变量
 private String url;
 private String ipaddress;
 private String passname;
 private String password;
 private String date;
 private String database;
 private String driver;
 private Connection con;

 public inputTiptop(String p_name, String p_word, String p_ip, String p_db, String p_date) // 构造指定帐号密码数据库链接
 {
  passname = p_name;
  password = p_word;
  ipaddress = p_ip;
  database = p_db;
  driver = "oracle.jdbc.driver.OracleDriver";
  date = p_date;
  try {
   Class.forName(driver);
  } catch (ClassNotFoundException e) {
   System.out.println(e);
   e.printStackTrace();
  }
  url = "jdbc:oracle:thin:@" + ipaddress + ":1521" + ":" + database;
 }

 public void insertData(JSONArray array) {
  String sql = "Insert into azk_file (azk01,azk02,azk03,azk04,azk041,azk05,azk051,azk052, "
    + " azkuser,azkgrup,azkmodu,azkdate,azkoriu,azkorig,azktime) "
    + " Values (?, to_date(?, 'yyyy-mm-dd'), '', '', ? , '', '', '', '', '', '', '', '', '', '') ";
  try {
   con = DriverManager.getConnection(url, passname, password);
   con.setAutoCommit(false);
   PreparedStatement ps = con.prepareStatement(sql);// SQL预处理
          
   int flag = 0;
   for (int i = 0; i < (array.size()); i++) {

    if (array.getJSONObject(i).getString("vrtEName").equals("USD/CNY")) {
     ps.setString(1, "USD");
     ps.setString(2, date);
     ps.setFloat(3, Float.parseFloat(array.getJSONObject(i).getString("price")));
     ps.addBatch();
     flag = 1 + flag;
    } else if (array.getJSONObject(i).getString("vrtEName").equals("EUR/CNY")) {
     ps.setString(1, "EUR");
     ps.setString(2, date);
     ps.setFloat(3, Float.parseFloat(array.getJSONObject(i).getString("price")));
     ps.addBatch();
     flag = 1 + flag;
    } else if (array.getJSONObject(i).getString("vrtEName").equals("100JPY/CNY")) {
     ps.setString(1, "JPY");
     ps.setString(2, date);
     ps.setFloat(3, Float.parseFloat(array.getJSONObject(i).getString("price")) / 100);
     ps.addBatch();
     flag = 1 + flag;
    }else {
     continue;
    };
   }
           
   if (flag == 3){
    int rst[] = ps.executeBatch();// 执行批处理,判断正确错误
    if (rst.length > 0) {
     con.commit();
     System.out.println(date.toString() + " insert " + passname + " success!");
    } else {
     con.rollback();
     System.out.println(date.toString() + " insert " + passname + " fail!");
    }    
   }
   ps.close();
   con.close();
  } catch (SQLException e) {
   System.out.println(e);
   e.printStackTrace();
  }
 }
}

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值