package com.soft.dzkj.dao;
import java.sql.Connection;
import java.sql.DriverManager;
public class BaseDao {
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://192.168.0.200:3306/mkt_tw?useUnicode=true&characterEncoding=UTF-8";
private static String userName = "root";
private static String passWord = "root";
private static Connection con = null;
/**
* 创建连接
*/
public static Connection createConnection() {
try {
Class.forName(driver);
con = DriverManager.getConnection(url, userName, passWord);
} catch (Exception ce) {
ce.printStackTrace();
}
return con;
}
/**
* 关闭连接
*/
public static void closeConnection(Connection con) {
try {
con.close();
} catch (Exception ce) {
ce.printStackTrace();
}
}
}
package com.soft.dzkj.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.soft.dzkj.bean.StkDayHkex;
public class HkDayDao {
private final static int MAX = 500;
private Connection con=null;
private PreparedStatement pstm = null;
/**
* 保存港股日K
* @param hkdayList
* @throws Exception
*/
public void saveHkDayInfo(List<StkDayHkex> hkdayList){
try{
String sql=" insert into stk_day_hkex(asset_id,date,stk_code,open,high,low,close,prev_close,volume,turnover,turn_rate,adj_factor,"
+ " k_val,k_val_adj,d_val,d_val_adj,j_val,j_val_adj,ema1,ema2,dea,ema1_bkw,ema2_bkw,dea_bkw,"
+ " up_seq1,down_seq1,up_seq2,down_seq2,up_seq3,down_seq3,"
+ " up_seq1_bkw,down_seq1_bkw,up_seq2_bkw,down_seq2_bkw,up_seq3_bkw,down_seq3_bkw) "
+ " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
con=BaseDao.createConnection();
con.setAutoCommit(false);
pstm = con.prepareStatement(sql);
int size=hkdayList.size();
for(int i=0;i<size;i++){
StkDayHkex day=hkdayList.get(i);
pstm.setString(1,day.getAssetId());
pstm.setString(2,day.getDateStr());
pstm.setString(3,day.getStkCode());
pstm.setDouble(4,day.getOpen());
pstm.setDouble(5,day.getHigh());
pstm.setDouble(6,day.getLow());
pstm.setDouble(7,day.getClose());
pstm.setDouble(8, day.getPrevClose());
pstm.setDouble(9, day.getVolume());
pstm.setDouble(10, day.getTurnover());
pstm.setDouble(11, 0);
pstm.setDouble(12, 1);
pstm.setDouble(13, 0);
pstm.setDouble(14, 0);
pstm.setDouble(15, 0);
pstm.setDouble(16, 0);
pstm.setDouble(17, 0);
pstm.setDouble(18, 0);
pstm.setDouble(19, 0);
pstm.setDouble(20, 0);
pstm.setDouble(21, 0);
pstm.setDouble(22, 0);
pstm.setDouble(23, 0);
pstm.setDouble(24, 0);
pstm.setDouble(25, 0);
pstm.setDouble(26, 0);
pstm.setDouble(27, 0);
pstm.setDouble(28, 0);
pstm.setDouble(29, 0);
pstm.setDouble(30, 0);
pstm.setDouble(31, 0);
pstm.setDouble(32, 0);
pstm.setDouble(33, 0);
pstm.setDouble(34, 0);
pstm.setDouble(35, 0);
pstm.setDouble(36, 0);
pstm.addBatch();
if(i%MAX==0){
pstm.executeBatch();
con.commit();
pstm.clearBatch();
}
}
pstm.executeBatch();
con.commit();
con.setAutoCommit(true);
pstm.close();
con.close();
}catch(Exception ce){
ce.printStackTrace();
}finally{
BaseDao.closeConnection(con);
}
}
/**
* 查询已存在的数据
* @param queryDate
* @return
*/
public Set<String> queryExit(String queryDate){
Set<String> assetIds=new HashSet<String>();
String sql = "SELECT distinct asset_id FROM stk_day_hkex where date<=? ";
try{
con=BaseDao.createConnection();
pstm = con.prepareStatement(sql);
pstm.setString(1, queryDate);
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
assetIds.add(rs.getString("asset_id"));
}
}catch(Exception ce){
ce.printStackTrace();
}
return assetIds;
}
}
package com.soft.dzkj.server;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.soft.dzkj.bean.AssetInfo;
import com.soft.dzkj.bean.StkDayHkex;
import com.soft.dzkj.dao.AssetInfoDao;
import com.soft.dzkj.dao.HkDayDao;
import com.soft.dzkj.util.HttpTool;
public class DayServer {
public static void main(String [] args){
System.out.println("开始");
AssetInfoDao assetDao=new AssetInfoDao();
HkDayDao dayDao=new HkDayDao();
String serverIp="http://weixin.guosen.com.cn:9102";
java.text.SimpleDateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd");
String minDateStr="2017-05-09";
String queryDate="20170509";
DayServer t=new DayServer();
t.queryHkDay(serverIp, minDateStr,queryDate,df, assetDao,dayDao);
System.out.println("结束");
}
/**
* 查询日k
* @param serverIp
* @param queryDate
* @param dateStr
* @param df
* @param assetDao
*/
private void queryHkDay(String serverIp,String minDateStr,String queryDate,SimpleDateFormat df,AssetInfoDao assetDao,HkDayDao dayDao){
try{
Date minDate=df.parse(minDateStr);
//补历史数据
List<AssetInfo> assetInfoList=assetDao.queryAssetInfo();
Set<String> assetIds=dayDao.queryExit(minDateStr);
for(AssetInfo entry:assetInfoList){
String assetId=entry.getAssetId();
String stkCode=entry.getStkCode();
String code="";
boolean flag=false;
if(assetIds.size()==0){
flag=true;
}else{
if(!assetIds.contains(assetId)){
flag=true;
}
}
if(flag){
List<StkDayHkex> dayHkList=new ArrayList<StkDayHkex>();
code=stkCode+".3";
JSONObject jsonObj=new JSONObject();
jsonObj.put("SerID", 191);
jsonObj.put("MF", 2);
jsonObj.put("SF", 0);
String str="code="+code+"&date="+queryDate+"&time=0&type=513&direct=1&recover=0&count=500&return=4";
jsonObj.put("Req", str);
int len=jsonObj.toString().length();
String head="1,"+len+",0,100,114,0,0,0,0,\r\n\r\n";
String content=head+jsonObj.toString();
String resultStr=HttpTool.httpToJson(serverIp, "POST", content, "UTF-8");
System.out.println(code+"返回:"+resultStr);
int start=resultStr.indexOf("{");
String con=resultStr.substring(start);
if(con.contains("?")){
System.out.println(assetId+"查询出现乱码了");
break;
}else{
JSONObject obj=JSONObject.parseObject(con);
if(obj.containsKey("Ret")){
JSONArray array=obj.getJSONArray("Ret");
int size=array.size();
if(size>0){
convertHkDay(size, array, assetId, stkCode, df, minDate, dayHkList);
}
if(dayHkList.size()>0){
System.out.println("save data:"+assetId);
dayDao.saveHkDayInfo(dayHkList);
}
Thread.sleep(2000);
dayHkList.clear();
}else{
System.out.println(assetId+"无返回数据");
Thread.sleep(500);
}
}
}
}
}catch(Exception ce){
System.out.println("query sh day error");
ce.printStackTrace();
}
}
/**
* 设置日K
* @param size
* @param array
* @param assetId
* @param stkCode
* @param df
* @param minDate
* @param dayShList
* @throws Exception
*/
private void convertHkDay(int size,JSONArray array,String assetId,String stkCode,SimpleDateFormat df,Date minDate,List<StkDayHkex> dayShList)throws Exception{
for(int i=0;i<size;i++){
if(i==1){
JSONArray jsarrays=(JSONArray)array.get(i);
for(int j=0;j<jsarrays.size();j++){
if(j>0){
JSONArray details=(JSONArray)jsarrays.get(j);
StkDayHkex daySh=new StkDayHkex();
//资产ID
daySh.setAssetId(assetId);
//股票代码
daySh.setStkCode(stkCode);
String hqda=details.get(0).toString();
String date=hqda.substring(0, 4)+"-"+hqda.substring(4,6)+"-"+hqda.substring(6);
//日期
daySh.setDateStr(date);
Date queryDate=df.parse(date);
String prevClose=details.get(2).toString();
//前收盘价
daySh.setPrevClose(Double.valueOf(prevClose));
String open=details.get(3).toString();
//开盘价
daySh.setOpen(Double.valueOf(open));
String high=details.get(4).toString();
//最高价
daySh.setHigh(Double.valueOf(high));
String low=details.get(5).toString();
//最低价
daySh.setLow(Double.valueOf(low));
String close=details.get(6).toString();
//收盘价
daySh.setClose(Double.valueOf(close));
String volume=details.get(7).toString();
//成交量
daySh.setVolume(Double.valueOf(volume)/100);
String turnover=details.get(8).toString();
//成交额
daySh.setTurnover(Double.valueOf(turnover));
/*//单日补数
if(daySh.getDate().compareTo(minDate)==0){
dayShList.add(daySh);
}*/
if(queryDate.compareTo(minDate)<=0){
dayShList.add(daySh);
}
}
}
}
}
}
}
相关推荐
在Java编程领域,JDBC(Java Database ...总之,通过JDBC进行批量插入数据是提高数据库操作效率的重要手段。合理使用批量处理、预编译SQL语句以及数据库特有的优化功能,可以在处理大数据时获得显著的性能提升。
在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...
综上所述,JDBC的批量操作包括批量插入、批量更新、批量删除等,它们都依赖于`PreparedStatement`的批量处理能力。通过合理的使用这些批量操作,可以显著提高Java应用程序在处理大量数据时的性能和效率。
使用JDBC,我们可以编写Java代码来执行SQL语句,包括插入数据。对于Blob字段的处理,JDBC提供了一种流式处理的方式,可以有效地处理大对象。 批量插入Blob数据的基本步骤如下: 1. **连接数据库**:使用`...
批量插入数据是一种提高数据库操作性能的重要技术,尤其在处理大量数据时。本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量...
本文将通过对一个具体的Java程序示例(使用JDBC进行数据批量插入与逐条插入)的分析,探讨批量操作的优势及其在不同数据量下的性能表现。 #### 二、JDBC批量操作与逐条插入概述 在Java开发中,JDBC (Java Database...
在Java的数据库编程中,JDBC(Java Database Connectivity)提供了多种方法来实现数据的批量插入,从而提高数据库操作的效率。本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好...
本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...
在数据库操作中,批量插入大量数据是常见的性能优化策略,特别是在大数据处理或系统初始化时。批量插入能够显著减少网络通信次数,提升效率,降低数据库事务的开销。本例展示了如何在4秒内高效地插入10万条数据,...
本文将深入探讨如何利用`JdbcDaoSupport`进行批量插入数据的操作,以及其背后的原理和源码分析。 首先,`JdbcDaoSupport`是`AbstractJdbcDaoSupport`的子类,它提供了对JDBC访问的便捷封装,允许开发者无需直接管理...
本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...
5. **批量插入数据到数据库** 在数据处理过程中,往往还需要将数据批量插入到数据库。EasyExcel提供了一个`executeBatchInsert`方法,可以配合JDBC或其他ORM框架如MyBatis,将数据批量插入到数据库。首先,我们需要...
这种方式适用于简单的SQL语句,如批量插入或更新。通过`Statement`对象的`addBatch()`方法添加待执行的SQL语句,然后调用`executeBatch()`来一次性执行所有语句。例如: ```java Statement stmt = conn....
在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...
在Oracle数据库中,批量插入数据是一项关键技能,尤其在处理大量数据时,它能显著提高数据操作效率。本文将深入探讨Oracle数据库中的批量插入技术,包括其原理、实现方法以及一个具体的C#代码示例。 ### Oracle批量...
它的核心组件包括QueryRunner和DBUtils,其中QueryRunner用于执行SQL操作,DBUtils则提供了连接池管理和基本的JDBC操作辅助功能。 在Oracle数据库的背景下,我们需要了解Oracle的一些特性,如PL/SQL、游标、序列、...
在SQL Server中,批量插入数据是一项重要的性能优化技术,尤其当需要处理大量数据时。本文将探讨如何在MSSQL中高效地批量插入数据,并针对给出的代码示例进行分析和优化。 首先,我们来看一个常见的批量插入方法,...
在成功连接后,你可以使用`Statement`对象执行HQL(Hive Query Language)命令,例如创建表、插入数据、查询等。例如: ```java // 插入数据 String insertQuery = "INSERT INTO test_table VALUES (1, 'John'), (2...
本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...
例如,在提供的代码片段中,`test_mysql()` 方法演示了如何使用`PreparedStatement`对象逐条插入数据: ```java for(int x = 0; x ; x++){ prest.setInt(1, x); prest.setString(2, ""); prest.execute(); } ```...