• 通过http实现调接口,实现将远程的数据库数据插入到本地的数据当中的操作。


    今天同事给我一个接口,让我实现将远程的数据的信息通过http的形式获取到插入到本地的数据库当中。

    (1)简单的方法是通过ajax传递参数,然后在后台请求数据。

    (2)通过http请求获取到数据,然后插入到插入到本地的数据库当中。

    实现思路(第一种也可以但是如果使用第一种的话,就需要和页面进行交互,最后选择了第二中方式)

    (1)通过写http获取值。

    (2)解析json格式的数据

    (3)然后连接数据库实现数据的插入操作。

    业务代码如下:

    
    

    package com.message.transfer;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;

    
    

    import com.message.transfer.po.Order;
    import com.message.transfer.util.Jdbcdemo;

    
    

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

    public class TranferMain {
    /**
    * 调用对方接口方法
    * @param path 对方或第三方提供的路径
    * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析
    */
    public static void interfaceUtil(String path,String data) {
    try {
    URL url = new URL(path);
    //打开和url之间的连接
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    PrintWriter out = null;
    //请求方式
    conn.setRequestMethod("POST");
    String encoding = "UTF-8";
    conn.setRequestProperty("Content-Type", "application/json; charset=" + encoding);
    //设置通用的请求属性
    conn.setRequestProperty("accept", "*/*");
    conn.setRequestProperty("connection", "Keep-Alive");
    conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
    //设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
    //最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
    //post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
    conn.setDoOutput(true);
    conn.setDoInput(true);
    //获取URLConnection对象对应的输出流
    out = new PrintWriter(conn.getOutputStream());
    out.write(data);
    //发送请求参数即数据
    // out.print(data);
    //缓冲数据
    out.flush();
    //获取URLConnection对象对应的输入流
    InputStream is = conn.getInputStream();
    //构造一个字符流缓存
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    //这里设置缓冲流,如果用String的话性能降低。
    StringBuffer bf = new StringBuffer();
    String line = null;
    while ((line = br.readLine()) != null) {
    /*这里获取到的是一个String的字符串,然后解析json,然后建一个实体类。然后set进去
    * 然后使用JDBC插入到数据库当中。
    * */
    bf.append(line);
    }
    //得到的全部的json数据。
    String str = bf.toString();
    //将字符串数据转换为json对象
    JSONObject jsonObject = JSONObject.fromObject(str);
    String dataStr= jsonObject.get("data").toString();
    JSONObject datajsonObject = JSONObject.fromObject(dataStr);
    String strList = datajsonObject.get("billList").toString();
    //这里将字符串转化为json的对象数组。
    JSONArray jsonArray=JSONArray.fromObject(strList);
    for(int i=0;i<jsonArray.size();i++){
    // 遍历对象数组,然后将数组中属性为billDtlList的对象拿出来。
    JSONObject job = jsonArray.getJSONObject(i);
    String billDtlStr = job.get("billDtlList").toString();
    //billDtlList是一个对象数组,将字符串转化为对象数组,
    JSONArray jsonArrayBillDtlStr=JSONArray.fromObject(billDtlStr);
    for(int j=0;j<jsonArrayBillDtlStr.size();j++){
    JSONObject dtljob = jsonArrayBillDtlStr.getJSONObject(j);
    //将实体类的值放到对象的对应的属性当中去。
    Order stu=(Order)JSONObject.toBean(dtljob, Order.class);
    //将对象插入数据库。
    Jdbcdemo.insert(stu);
    }
    }
    //关闭流
    is.close();
    //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
    //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
    conn.disconnect();
    System.out.println("完整结束");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    public static void main(String[] args) {
    String sendData = "{"code":"101475","billCode":"","startTime":"2018-8-1 24:00:00","endTime":"2018-8-2 24:00:00"}";
    interfaceUtil("URL地址", sendData);

    }
    }

     实体类Oder自己可以使用工具自动生成;

    下面是关于连接数据库,实现数据的插入操作的相关代码:

    package com.message.transfer.util;
    
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    import com.message.transfer.po.Order;
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.PreparedStatement;
    
    public class Jdbcdemo {
    
        private static Connection getConn() {
            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://172.31.40.228:3306/test";
            String username = "root";
            String password = "password";
            Connection conn = null;
            try {
                Class.forName(driver); // classLoader,加载对应驱动
                conn = (Connection) DriverManager.getConnection(url, username,
                        password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
        
        public static void insert(Order stu) {
            Connection conn = getConn();
            PreparedStatement ps = null;
            String sql = "INSERT INTO orderInfo (id, billId, dishId, comboId, dishCode, dishName, dishUnit, dishPrice,"
                    + "normPrice, dishNum, dishAmount, realAmount, dishAttribute, operAttribute, reasId, reasName,"
                    + "orderPerson, userAccount, userName, operTime, isServing, servTime, exActAmount, singAmount) "
                    + "values('"+ stu.getId() + "','" + stu.getBillId() + "','" + stu.getDishId()
                    + "','" + stu.getComboId()+ "','" + stu.getDishCode()+ "','" + stu.getDishName()+ "','" + stu.getDishUnit()
                    + "','" + stu.getDishPrice()+ "','" + stu.getNormPrice()+ "','" + stu.getDishNum()+ "','" + stu.getDishAmount()
                    + "','" + stu.getRealAmount()+ "','" + stu.getDishAttribute()+ "','" + stu.getOperAttribute()
                    + "','" + stu.getReasId()+ "','" + stu.getReasName()+ "','" + stu.getOrderPerson()+ "','" + stu.getUserAccount()
                    + "','" + stu.getUserName()+ "','" + stu.getOperTime()+ "','" + stu.getIsServing()+ "','" + stu.getServTime()
                    + "','" + stu.getExActAmount()+ "','" + stu.getSingAmount()+ "')";
            
            try {
                ps = (PreparedStatement) conn.prepareStatement(sql);// 把写好的sql语句传递到数据库,让数据库知道我们要干什么
                int a = ps.executeUpdate();// 这个方法用于改变数据库数据,a代表改变数据库的条数
                if (a > 0) {
                    System.out.println("添加成功");
                } else {
                    System.out.println("添加失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }


    至此实现了http的方式实现数据的远程获取,并且将数据插入到数据库的表当中,并且数据当中的数据不断进行插入操作。
  • 相关阅读:
    编程模式
    iOS----FMDB---看这个可以解决大部分你遇到的问题
    iOS UITableView的使用
    ios文件系统文件目录操作
    Core Data-备用
    数组去重复
    用法总结:NSArray,NSSet,NSDictionary-备用
    iOS 摇一摇的实现
    更改xcode上iphone模拟器颜色的方法--备用
    模式识别之基础---mqdf分类器==MQDF改进的二次分类器
  • 原文地址:https://www.cnblogs.com/gxgd/p/9415827.html
Copyright © 2020-2023  润新知