`
taiwei.peng
  • 浏览: 235302 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jdbc 操作 批量插入数据

    博客分类:
  • java
阅读更多

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);

  }

}

 }

  }

}

}

 

}

 

分享到:
评论

相关推荐

    jdbc-批量插入数据

    在Java编程领域,JDBC(Java Database ...总之,通过JDBC进行批量插入数据是提高数据库操作效率的重要手段。合理使用批量处理、预编译SQL语句以及数据库特有的优化功能,可以在处理大数据时获得显著的性能提升。

    Mybatis与JDBC批量插入MySQL数据库性能测试

    在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...

    JDBC批量插入 更新 删除等操作

    综上所述,JDBC的批量操作包括批量插入、批量更新、批量删除等,它们都依赖于`PreparedStatement`的批量处理能力。通过合理的使用这些批量操作,可以显著提高Java应用程序在处理大量数据时的性能和效率。

    jdbc批量插入大字段

    使用JDBC,我们可以编写Java代码来执行SQL语句,包括插入数据。对于Blob字段的处理,JDBC提供了一种流式处理的方式,可以有效地处理大对象。 批量插入Blob数据的基本步骤如下: 1. **连接数据库**:使用`...

    java实现jdbc批量插入数据

    批量插入数据是一种提高数据库操作性能的重要技术,尤其在处理大量数据时。本篇文章将详细介绍如何使用Java实现JDBC批量插入数据,并比较三种常见的JDBC批量插入编程方法。 **方法一:使用PreparedStatement加批量...

    jdbc批量操作数据分析与实例

    本文将通过对一个具体的Java程序示例(使用JDBC进行数据批量插入与逐条插入)的分析,探讨批量操作的优势及其在不同数据量下的性能表现。 #### 二、JDBC批量操作与逐条插入概述 在Java开发中,JDBC (Java Database...

    Java实现mybatis批量插入数据到Oracle

    本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...

    批量插入大量数据

    在数据库操作中,批量插入大量数据是常见的性能优化策略,特别是在大数据处理或系统初始化时。批量插入能够显著减少网络通信次数,提升效率,降低数据库事务的开销。本例展示了如何在4秒内高效地插入10万条数据,...

    Spring JdbcDaoSupport 批量插入数据

    本文将深入探讨如何利用`JdbcDaoSupport`进行批量插入数据的操作,以及其背后的原理和源码分析。 首先,`JdbcDaoSupport`是`AbstractJdbcDaoSupport`的子类,它提供了对JDBC访问的便捷封装,允许开发者无需直接管理...

    三种JDBC批量插入编程方法的比较

    在Java的数据库编程中,JDBC(Java Database Connectivity)提供了多种方法来实现数据的批量插入,从而提高数据库操作的效率。本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好...

    spring jdbc Templatetest 访问mysql数据库,批量插入数据

    本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...

    EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库

    5. **批量插入数据到数据库** 在数据处理过程中,往往还需要将数据批量插入到数据库。EasyExcel提供了一个`executeBatchInsert`方法,可以配合JDBC或其他ORM框架如MyBatis,将数据批量插入到数据库。首先,我们需要...

    JDBC的批量处理数据

    这种方式适用于简单的SQL语句,如批量插入或更新。通过`Statement`对象的`addBatch()`方法添加待执行的SQL语句,然后调用`executeBatch()`来一次性执行所有语句。例如: ```java Statement stmt = conn....

    Mybatis 3+Mysql 实现批量插入

    在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...

    oracle数据库中批量插入问题

    在Oracle数据库中,批量插入数据是一项关键技能,尤其在处理大量数据时,它能显著提高数据操作效率。本文将深入探讨Oracle数据库中的批量插入技术,包括其原理、实现方法以及一个具体的C#代码示例。 ### Oracle批量...

    dbutils + oracle 增删改查批量插入示例

    它的核心组件包括QueryRunner和DBUtils,其中QueryRunner用于执行SQL操作,DBUtils则提供了连接池管理和基本的JDBC操作辅助功能。 在Oracle数据库的背景下,我们需要了解Oracle的一些特性,如PL/SQL、游标、序列、...

    MSSQL批量插入数据优化详细

    在SQL Server中,批量插入数据是一项重要的性能优化技术,尤其当需要处理大量数据时。本文将探讨如何在MSSQL中高效地批量插入数据,并针对给出的代码示例进行分析和优化。 首先,我们来看一个常见的批量插入方法,...

    java代码oracle数据库批量插入

    这段Java代码通过JDBC实现了向Oracle数据库批量插入数据的功能。关键步骤包括:建立数据库连接、准备SQL语句、批量添加SQL语句到批处理队列、执行批处理以及事务提交。这种方式相比于逐条插入数据,可以显著提升插入...

    使用javaJDBC连接hive数据,实现简单的操作!

    在成功连接后,你可以使用`Statement`对象执行HQL(Hive Query Language)命令,例如创建表、插入数据、查询等。例如: ```java // 插入数据 String insertQuery = "INSERT INTO test_table VALUES (1, 'John'), (2...

    SpringBoot整合Mybatis连接SQL Server 跨库批量插入

    本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...

Global site tag (gtag.js) - Google Analytics