项目结构:
依次为:获取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&¶ms.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