sql文件导入大字段,使用java 代码导入

 sql文件导入大字段,大字段超过4000则报错文本超过长度,

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.OracleDriver;

public class ClobTest {
	 String url = "jdbc:oracle:thin:@192.168.1.102:1521:orcl";
	 String user = "YNZJ";
	 String pwd = "YNZJ";
//	String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
//	String user = "hczz";
//	String pwd = "hczz";

	private void clobImport(List<String> list) throws SQLException {
		DriverManager.registerDriver(new OracleDriver());
		Connection conn = DriverManager.getConnection(url, user, pwd);// 得到连接对象
		PreparedStatement stmt = null;
		for (String sql : list) {
			String content = "";
			try {
				sql = sql.trim();
				int num = sql.lastIndexOf("', '");
				content = sql.substring(num + 4, sql.length() - 3);
				sql = sql.substring(0, num) + "', ?)";
				sql = sql.replace("\"YNZJ\".\"ENET_WORKBOOK\"", "ENET_WORKBOOK_bak");
				stmt = conn.prepareStatement(sql);// 加载SQL语句
				stmt.setCharacterStream(1, new StringReader(content), content.length());
				stmt.executeUpdate();
			} catch (Exception e) {
				System.out.println(e.getMessage());
				System.out.println(content);
				System.out.println(sql);
			}
		}
		stmt.close();
		conn.close();
	}

	private List duqu(String path) throws Exception {
		
		String code = resolveCode(path);
		File file = new File(path);
		InputStream is = new FileInputStream(file);
		InputStreamReader isr = new InputStreamReader(is, code);
		BufferedReader bufferedReader = new BufferedReader(isr);
		List<String> strings = new ArrayList();

		String str = null;
		String sql_d = "";
		int num = 0;
		int ks = 0;
		int dz = 200;
		int jz = ks + dz;
		while ((str = bufferedReader.readLine()) != null) {
			sql_d = sql_d + str;
			if (str.endsWith("');") && sql_d != "") {
				if (num >= ks) {
					strings.add(sql_d);
				}
				sql_d = "";
				num++;
			}
			if (num == jz) {
				break;
			}
		}
		System.out.println(strings.size());
		return strings;

	}

	private String resolveCode(String path) throws Exception {
		InputStream inputStream = new FileInputStream(path);
		byte[] head = new byte[3];
		inputStream.read(head);
		String code = "gb2312"; // 或GBK
		if (head[0] == -1 && head[1] == -2)
			code = "UTF-16";
		else if (head[0] == -2 && head[1] == -1)
			code = "Unicode";
		else if (head[0] == -17 && head[1] == -69 && head[2] == -65)
			code = "UTF-8";

		inputStream.close();
		return code;
	}

	public static void main(String[] args) throws Exception {
		ClobTest a = new ClobTest();
		String path = "D:\\WORD_BOOK超长字段错误数据(1).txt";
		a.clobImport(a.duqu(path));
	}
}

 

转载于:https://my.oschina.net/u/3715963/blog/3000210

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值