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

读写CSV文件的代码

阅读更多

不同的中间件对应不同的JDK,weblogic8,需要使用JDK1.4,使用高版本出现过类找不到的情况。

 

1、读入数据导入数据库

参考http://zjb10000.iteye.com/blog/619699

package input;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import util.DbPool;

import com.csvreader.CsvReader;

public class BatchProcess {

	public static void transferData(int m, int n,String csvFilePath) throws ClassNotFoundException, SQLException, IOException {
		
		DbPool dbPool = new DbPool();
		dbPool.createPool();
		
		CsvReader reader = new CsvReader(csvFilePath);

		long start = System.currentTimeMillis();

		String insertSql = "INSERT INTO LIJING727_TEMPDATA(DATA0,DATA1,"
				+ "DATA2,DATA3,DATA4,DATA5,DATA6,DATA7,DATA8,DATA9) VALUES "
				+ "(?,?,?,?,?,?,?,?,?,?)";

		
		for (int i = 0; i < m; i++) {

			Connection insertConn = dbPool.getConnection();

			try {

				PreparedStatement insertPstmt = insertConn.prepareStatement(insertSql);
				
				for (int j = 0; j < n; j++) {
					
					reader.readRecord();
					insertPstmt.setInt(1, Integer.parseInt(reader.get(0)));
					insertPstmt.setString(2, reader.get(1));
					insertPstmt.setString(3, reader.get(2));
					insertPstmt.setString(4, reader.get(3));
					insertPstmt.setString(5, reader.get(4));
					insertPstmt.setString(6, reader.get(5));
					insertPstmt.setString(7, reader.get(6));
					insertPstmt.setString(8, reader.get(7));
					insertPstmt.setString(9, reader.get(8));
					insertPstmt.setString(10, reader.get(9));

					insertPstmt.addBatch();
					
				}

				insertPstmt.executeBatch();
				insertPstmt.close();
				dbPool.returnConnection(insertConn);


			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				throw e;
			} catch (IOException e) {
				e.printStackTrace();
				throw e;
			}

		}
		
		reader.close();

		long end = System.currentTimeMillis();

		System.out
				.println("批量导入" + m + "*" + n + " 用时" + (end - start) / 1000f);

	}
}

 

 

2、从数据库读出,写入数据库

package util;

import java.io.IOException;

import com.csvreader.CsvWriter;

public class CsvFileWriter {

	private CsvWriter cWriter;
	
	public CsvFileWriter(String filePath){
		
		cWriter = new CsvWriter(filePath);
		
	}
	
	public synchronized void writeToFile(String[] contents){
		
		try {
			
			cWriter.writeRecord(contents);
			
			cWriter.flush();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public synchronized void close(){
		
		cWriter.close();
		
	}
}

 

 

package output;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import oracle.jdbc.driver.OraclePreparedStatement;

import util.CsvFileWriter;
import util.DbPool;

public class MultiThreadProcess {

	// 文件最后没有关闭,使用定时器关闭
	public static void batchOutput(int threadNum, int timeNum, int batchNum,
			String filePath) throws ClassNotFoundException, SQLException,
			InterruptedException {

		ExecutorService exec = Executors.newCachedThreadPool();

		DbPool dbPool = new DbPool();
		dbPool.createPool();

		CsvFileWriter cWriter = new CsvFileWriter(filePath);

		long start = System.currentTimeMillis();

		for (int i = 0; i < threadNum; i++) {

			exec.execute(new BatchOutputTask(dbPool, cWriter, i, timeNum,
					batchNum, start));

		}

		exec.shutdown();
		
		Timer timer = new Timer();
		timer.schedule(new CloseStream(cWriter), 120000);

	}

}

class CloseStream extends TimerTask {

	CsvFileWriter cWriter;

	CloseStream(CsvFileWriter cWriter) {
		this.cWriter = cWriter;
	}

	@Override
	public void run() {

		cWriter.close();
		System.out.println("file closed!");
		
	}

}

class BatchOutputTask implements Runnable {

	DbPool dbPool;
	CsvFileWriter cWriter;
	int threadNo = 0;
	int timeNum = 0;
	int batchNum = 0;
	long start = 0;

	BatchOutputTask(DbPool dbPool, CsvFileWriter cWriter, int threadNum,
			int timeNum, int batchnum, long start) {

		this.dbPool = dbPool;
		this.cWriter = cWriter;
		this.threadNo = threadNum;
		this.timeNum = timeNum;
		this.batchNum = batchnum;
		this.start = start;

	}

	@Override
	public void run() {

		String selectSql = "SELECT b.DATA0,b.DATA1,b.DATA2,b.DATA3,b.DATA4,"
				+ "b.DATA5,b.DATA6,b.DATA7,b.DATA8,b.DATA9"
				+ " FROM (SELECT rownum r,"
				+ "a.DATA0,a.DATA1,a.DATA2,a.DATA3,a.DATA4,a.DATA5,a.DATA6,"
				+ "a.DATA7,a.DATA8,a.DATA9"
				+ " FROM LIJING727_ORIGDATA a WHERE rownum <= ?) b"
				+ " WHERE r >= ?";

		try {

			Connection selectConn = dbPool.getConnection();

			OraclePreparedStatement selectPstmt = (OraclePreparedStatement) selectConn
					.prepareStatement(selectSql);

			for (int i = 0; i < timeNum; i++) {

				selectPstmt.setInt(1, threadNo * timeNum * batchNum + (i + 1)
						* batchNum);
				selectPstmt.setInt(2, threadNo * timeNum * batchNum + i
						* batchNum + 1);

				ResultSet rs = selectPstmt.executeQuery();

				while (rs.next()) {

					String[] contents = { String.valueOf(rs.getInt(1)),
							rs.getString(2), rs.getString(3), rs.getString(4),
							rs.getString(5), rs.getString(6), rs.getString(7),
							rs.getString(8), rs.getString(9), rs.getString(10) };

					cWriter.writeToFile(contents);

				}

				rs.close();

			}

			selectPstmt.close();
			dbPool.returnConnection(selectConn);

			long end = System.currentTimeMillis();

			System.out.println("批量导出数据用时" + (end - start) / 1000f);

		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

}

 

分享到:
评论

相关推荐

    VC++6.0编译通过的读写CSV文件的代码及实例

    VC++6.0编译通过的读写CSV文件的代码及实例 在VC++6.0中编译通过,实测可用 通用性很不错 包含CSV读取的实例

    C#读取CSV和EXCLE的代码

    最好用的读取csv文件代码,可以读取csv和EXCLE的文件

    vc-csv.rar_CSV 读写_VC读写CSV_config.cpp_vc 读写csv_vc 读取csv文件

    Vc++读写csv文件的类,这个资源是读写CSV文件的非常实用的类。方法写得非常好,代码也写得非常简洁,很合适在实际项目中使用。经本人测试,只要把上面的代码CSVOperator.h、CSVOperator.cpp和StringParser.h拷贝到...

    NPOI读写Excel和第三方dll读写CSV文件

    里面有NPOI读写Excel的代码,方法都是封装好的,直接调用,也还有第三方的dll读写CSV文件,还配上了所有的dll文件,免了找dll的时间,我自己写的,肯定可以,之前传了一个有人评论说报错。

    java读写excel、csv文件

    文件中包括读取excel、csv文件,同时可以将读取出的文件内容保存在另外一个excel或csv中。注意excel2003和excel2007调用的jar包也不一样,需要将代码进行修改。2007版的将HSSF改成XSSF,2003相反。csv文件用XSSF

    CSV文件格式读写代码

    CSV文件读写代码

    linux c++csv文件读写

    linux c++csv文件读写,linux c++csv文件读写的代码的实现。

    读写CSV文件函数(代码)

    实现读写CSV文件的两个函数,可直接调用,不过保存的是某种固定的格式

    使用C#读取csv文件的实例源码_0520.rar

    使用C#读取csv文件的实例源码_0520.rar

    读取创建CSV文件并自动解析文件编码方式

    读取与创建CSV文件,根据第三方jar包自动解析文件编码方式,相关jar包与使用说明

    matlab批量读取并处理.csv文件

    在fpga数据处理时往往要对ila的输出的大量csv文件进行分析,而手动一个一个文件的...因而笔者编写了一段matlab代码可以对csv文件进行批量处理。 ilapro.m文件即为批量读取和处理所用,csvloadpro.m为处理所调用的函数。

    c++读取csv文件

    本文档程序给出VS2013如何读取csv文件的详细代码,通过动态分配数组实现

    python读写csv文件实例代码

    Python读取与写入CSV文件需要导入Python自带的CSV模块,然后通过CSV模块中的函数csv.reader()与csv.writer()来进行CSV文件的读取与写入。 写入CSV文件 import csv # 需要import csv的文件包 out=open(aa.csv,'wb') ...

    C++读取CSV文件

    采用C++实现CSV文件读取,不依赖任何第三方库,可设置所读取的文件是否包含标题; 内部包含CSVReader类、使用示例代码以及一个测试数据文件

    csv文件处理代码(读写)

    csv文件的读写代码!希望对大家有所帮助!

    matlab从excel/csv文件中按照要求筛选信号,并保存成新excel文件

    该文件主要用在matlab中,用于 1.读取excel或者csv格式文件(支持同时读取多个文件) ...注:文件中的代码为exccel读写的base版,且均已加入注释,简单易懂,可在该代码上进行所需关于excel格式文件新功能的开发

    Qt解析CSV文件

    Qt应用程序读取获取CSV文件,提取对应行的数据,转存为excel文件。基于SimpleXlsxWriter类和CSVparser类,代码在Scientific.pro中。

    c++可以读写csv文件的例子类

    经本人测试,只要把上面的代码CSVOperator.h、CSVOperator.cpp和StringParser.h拷贝到项目中,就可以直接使用。在CSV_OP.cpp文件中,main方法里面有详细的读取文件的方法。

    Vc++读写csv文件的类

    摘要:VC/C++源码,文件操作,CSV Vc++读写csv文件的类,这个资源是读写CSV文件的非常实用的类。方法写得非常好,代码也写得非常简洁,很合适在实际项目中使用。经本人测试,只要把上面的代码CSVOperator.h、...

    CSV、Map文件读取和处理

    使用VS2015搭建的工程,C++读取csv获取参数名称和标定值、读取Map文件获取参数地址,可用于参数标定

Global site tag (gtag.js) - Google Analytics