java获取webservice入库

19 篇文章 0 订阅

项目结构:

 依次为:获取webservices返回json的数据类,数据库操作类,读取配置文件类,测试等

获取webservices返回json的数据类:

package com.wy.HttpRequestUtil;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.codehaus.xfire.client.Client;

public class HttpRequestUtil {
	
	public static String getJsonContent(String urlStr) {
		try { // obtain HttpURLConnection Object
			URL url = new URL(urlStr);
			HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
			httpCon.setConnectTimeout(3000);
			httpCon.setDoInput(true);
			httpCon.setRequestMethod("GET"); // 获取相应码
			int respCode = httpCon.getResponseCode();
			if (respCode == 200) {
				return ConvertStream2Json(httpCon.getInputStream());
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}

	private static String ConvertStream2Json(InputStream inputStream) {
		String jsonStr = ""; // ByteArrayOutputStream相当于内存输出流
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		// 将输入流转移到内存输出流中
		try {
			while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
				out.write(buffer, 0, len);
			}
			// 将内存流转换为字符串
			jsonStr = new String(out.toByteArray());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return jsonStr;
	}
}

数据库类:

package com.wy.mydb;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.wy.properties.MyProperties;

public class MyDbHelper {
	private  Connection conn = null;
	private  PreparedStatement ps = null;
	private  ResultSet rs = null;
	
	//加载驱动
	static {
		try {
			//方式一  固定写死  不方便更改数据库操作
//			Class.forName("com.mysql.jdbc.Driver"); //Oracle驱动为: oracle.jdbc.driver.OracleDriver
			//方式二  读取配置文件操作  如果需要更换数据库只需要修改配置文件即可   推荐
			try {
				Class.forName(MyProperties.getInstance().getProperty("driverName"));
			} catch (IOException e) {
				e.printStackTrace();
			}
		
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} 
	}
	
	
	//驱动管理连接指定数据库  获取连接对象
	public Connection getConnection() {
		
		try {
			//方式一   固定写死  不方便更改数据库操作
		    //驱动管理指定数据库并连接			参数说明  端口信息  数据库账户  密码
//			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "a");
			//方式二  读取配置文件操作  如果需要更换数据库只需要修改配置文件即可   推荐
			try {
				conn = DriverManager.getConnection(MyProperties.getInstance().getProperty("url"),MyProperties.getInstance());
			} catch (IOException e) {
				e.printStackTrace();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	//关闭所有对象			  连接				预处理					结果集
	public void closeAll(Connection conn,PreparedStatement ps,ResultSet rs) {
		if(conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(ps!=null) {
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	

	/**单条语句的增删改   说明:在执行成功后函数返回的结果为非零整数
	 * @param sql  需要执行的sql语句
	 * @param params 执行sql语句的参数
	 * @return
	 */
	public int doUpdate(String sql,ArrayList<Object> params) {
		int result = 0;
		//获取连接
		conn = getConnection();
		//预处理
		try {
			ps = conn.prepareStatement(sql);
			//设置参数得到结果集
			this.setParams(ps,params);
			//预处理执行得到结果反馈
			result = ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			//关闭所有对象
			this.closeAll(conn, ps, rs);
		}
		return result;
	}
	
	
	/**
	 * 多条语句的增删改     说明:这些语句要么同时成功,要么都失败
	 * @param sqls   多条sql语句
	 * @param params 执行参数
	 * @return
	 */
	public int doUpdate(List<String> sqls,ArrayList<ArrayList<Object>> params) {
		int result = 0;
		//获取连接
		conn = getConnection();
		try {
			//多条语句的执行涉及到事务    设置事务提交方式为手动
			conn.setAutoCommit(false);
			//判断sql语句集合
			if(sqls!=null&&sqls.size()>0) {
				//循环每一条语句执行
				for(int i=0;i<sqls.size();i++) {
					ps = conn.prepareStatement(  sqls.get(i) );
					//设置参数
					//ps.setObject(i+1, params.get(i));
					this.setParams(ps,params.get(i));
					//执行并反馈
					result = ps.executeUpdate();
				}
			}
			//手动提交数据
			conn.commit();
		} catch (SQLException e) {
			//出现错误则回滚数据
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			//回复事务自动提交
			try {
				conn.setAutoCommit(true);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			//关闭所有对象
			this.closeAll(conn, ps, rs);
		}	
		return result;
	}
	
	
	
	/**
	 * 设置预处理的参数
	 * @param ps	  预处理
	 * @param params 参数集合
	 * @throws SQLException 
	 */
	public void setParams(PreparedStatement ps,ArrayList<Object> params) throws SQLException {
		if(params!=null&&params.size()>0) {
			for(int i=0;i<params.size();i++) {
				ps.setObject(i+1, params.get(i));
			}
		}
	}
	
	
	/**
	 * 查询sql语句单条结果
	 * @param sql   查询的sql语句
	 * @param params执行sql所需参数
	 * @return
	 */
	public Map<String,Object> findSingleObject(String sql,ArrayList<Object> params){
		Map<String,Object> map = new HashMap<String,Object>();
		//获取连接
		conn = getConnection();
		//预处理
		try {
			ps = conn.prepareStatement(sql);
			//设置参数
			this.setParams(ps, params);
			//执行查询得到结果集
			rs = ps.executeQuery();
			//获取数据库该表所有字段名
			List<String> names = getAllColumnName(rs);
			if(rs.next()) {
				//循环names
				for(String name:names) {
					map.put(name,  rs.getObject(name) );
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			//关闭对象
			this.closeAll(conn, ps, rs);
		}
		return map;
	}

	
	/**
	 * 查询sql语句多条结果
	 * @param sql
	 * @param params
	 * @return
	 */
	public List<Map<String,Object>> findMulitObject(String sql,ArrayList<Object> params){
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		//连接
		conn = this.getConnection();
		//预处理
		try {
			ps = conn.prepareStatement(sql);
			//设置参数
			this.setParams(ps, params);
			//执行查询得到结果集
			rs = ps.executeQuery();
			//获取所有列名
			List<String> names = this.getAllColumnName(rs);
			while(rs.next()) { //注意这里不能用if 因为使用if的话只能执行一次 最后得到的结果就成了查一条数据
				Map<String, Object> map = new HashMap<String,Object>();
				//循环迭代
				for(String name:names) {
					map.put(name, rs.getObject(name));
				}
				list.add( map );
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
	}
	
	
	
	/**
	 * 根据结果集获取数据库中的所有列表名
	 * @param rs
	 * @return
	 */
	private List<String> getAllColumnName(ResultSet rs) {
		List<String> names = new ArrayList<String>();
		try {
			ResultSetMetaData rsmd = rs.getMetaData();
			for(int i=0;i<rsmd.getColumnCount();i++) {
				names.add(   rsmd.getColumnName(i+1)  );
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return names;
	}
	
}

读取配置文件类:

package com.wy.properties;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 整个类只需要创建一个对象
 * 设计成单例模式
 */



public class MyProperties extends Properties{

	private static MyProperties myProperties;
	
	private MyProperties() throws IOException{
		InputStream in = MyProperties.class.getClassLoader().getResourceAsStream("db.properties");
		try {
			this.load(in);
		} catch (IOException e) {		
			e.printStackTrace();
			throw e;
		}
	}
	
	public static MyProperties getInstance() throws IOException{
		if(null==myProperties){
			myProperties = new MyProperties();
		}
		return myProperties;
	}
}

测试:

package com.wy.test;

import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.sf.json.*;

import org.codehaus.xfire.client.Client;

import com.wy.mydb.MyDbHelper;
import com.wy.HttpRequestUtil.*;

public class MyTest {

	public static void main(String[] args) throws MalformedURLException, Exception {

		String s = HttpRequestUtil.getJsonContent("");
		System.out.println(s);
		JSONObject object = JSONObject.fromObject(s);
		JSONArray ja = JSONArray.fromObject((JSONObject.fromObject(s)).getString("dat"));
		//System.out.println(ja);
		String str2 = object.getString("head");
		int cnt = object.getJSONObject("head").getInt("total");

		int num=ja.length();
		String sql="";
	    for(int i=0;i<num;i++){
	    	/*System.out.println(JSONObject.fromObject(ja.get(i)).getString("datetime")); *///int
	    	sql +=" select '"+JSONObject.fromObject(ja.get(i)).getString("id") 
	    			+"','"+JSONObject.fromObject(ja.get(i)).getString("dt")+"'";
	    	if (i<num-1)
	    	{
	    		sql +=" union all ";
	    	}
	    }
	    //System.out.println(sql);
	    MyDbHelper db = new MyDbHelper();
		String addSql = "insert ignore into ta(id,dt)"
				+ sql;
		db.doUpdate(addSql, null);
	    

		// DBTEST
		/*MyDbHelper db = new MyDbHelper();
		String addSql = */
		// 单条数据查询 System.out.println( "单条数据查询" );
		/*String sql = "select * from student where sid = 2";
		Map<String, Object> map = db.findSingleObject(sql, null);
		// 遍历map。。。。 通过值遍历 但是不能获取键
		for (Object o : map.values()) {
			System.out.println(o);
		}*/

		// 多条数据查询
		/*System.out.println("多条数据查询");
		String mulitSql = "select * from student ";
		List<Map<String, Object>> list = db.findMulitObject(mulitSql, null);
		for (int i = 0; i < list.size(); i++) {
			Map<String, Object> map2 = list.get(i);
//			for (Object o : map2.values()) {
//				//System.out.println(o.);
//				System.out.println(o);
//			}
			
			 for (Map.Entry<String, Object> entry : map2.entrySet()) {
			      System.out.println(entry.getKey() + ":" + entry.getValue());
			    }
		}
*/
		// 测试修改
		/*
		String updateSql = "update student set sname= ?  where sid = 1";
		List<Object> params = new ArrayList<Object>();
		params.add("晚上好!");
		db.doUpdate(updateSql, params);*/

		// 单条增加测试
/*		String addSql = "insert into student(sname,remark,dt) values(?,?,?)";
		ArrayList<Object> addParams = new ArrayList<Object>();
		addParams.add("国庆节快乐!");
		addParams.add("这里是注释!");
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DATE, -180); 
		Date date = calendar.getTime();
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		//addParams.add(df.format(date));
		addParams.add("2018-01-01");
		db.doUpdate(addSql, addParams);*/

		/*// 多条增加测试
		List<String> sqls = new ArrayList<String>();
		String addSql = "insert into student(sname,remark,dt) values(?,?,?)";
		sqls.add(addSql);
		String addSql2 = "insert into student(sname,remark) values(?,?)";
		sqls.add(addSql2);
		// 参数
		ArrayList<ArrayList<Object>> ap= new ArrayList<ArrayList<Object>>();
		ArrayList<Object> addParams1 = new ArrayList<Object>();
		addParams1.add("国庆节快乐!");
		addParams1.add("这里是注释!");
		Calendar calendar = Calendar.getInstance();
		calendar.add(Calendar.DATE, -180); 
		Date date = calendar.getTime();
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		//addParams.add(df.format(date));
		addParams1.add("2018-01-01");
		ap.add(addParams1);
		ArrayList<Object> addParams2 = new ArrayList<Object>();
		addParams2.add("国庆节快乐!");
		addParams2.add("这里是注释!");
		ap.add(addParams2);
		db.doUpdate(sqls, ap);*/
		
		// 删除测试
		//String delSql = "delete from student where sid = 4";
		//db.doUpdate(delSql, null);

	}

}

参考源:

https://blog.csdn.net/Fmuma/article/details/78176731?utm_source=blogxgwz2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值