简单的jdbc操作数据库例子,高效率插入数据

项目用到的jar:

dom4j-1.6.1.jar
mysql-connector-java-3.1.13-bin.jar
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
xmlbeans-2.3.0.jar

package com.liuyunlong.jdbc;

/**
 * 主函数入口
 * 
 * @author liuyunlong
 *
 */
public class Main {

	public static void main(String[] args) {

		DBstoreHelper dbs = new DBstoreHelper();
		try {
			dbs.storeToDb();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

package com.liuyunlong.jdbc;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.liuyunlong.Param;

/**
 * 存储数据工具,初始化jdbc连接参数,从Excel读取数据,批量处理insert数据
 * 
 * @author liuyunlong
 *
 */
public class DBstoreHelper {

	private String insert_sql;

	private String username;

	private String password;

	private String driver;

	private String url;

	private String filePath;

	private Connection conn;

	private PreparedStatement psts;

	public DBstoreHelper() {
		initParam();
		initDB();
	}

	/**
	 * 初始化数据库链接
	 */
	private void initDB() {
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, username, password);
			psts = conn.prepareStatement(insert_sql);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 从属性文件中初始化参数
	 */
	private void initParam() {
		insert_sql = "INSERT INTO bbs_myvip_imei (imei, product, updatetime, extra) VALUES (?,?,?,?)"; // 写死了sql语句
		InputStream stream = getClass().getClassLoader().getResourceAsStream("param.properties");
		Properties p = new Properties();
		try {
			p.load(stream);
			username = p.getProperty("jdbc.username");
			password = p.getProperty("jdbc.password");
			driver = p.getProperty("jdbc.driverClassName");
			url = p.getProperty("jdbc.url");
			url += "?useServerPrepStmts=false&rewriteBatchedStatements=true";
			filePath = p.getProperty("file.path");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void storeToDb() throws Exception {
		List<Param> imeis = initDate();
		doStroe(imeis);
	}

	private void doStroe(List<Param> imeis) throws Exception {
		conn.setAutoCommit(false); // 设置手动提交
		System.out.println("数据导入开始,请耐心等待......");
		long start = System.currentTimeMillis();
		int count = 0;
		int tens = 0;
		if (null != imeis && imeis.size() > 0) {
			for (int i = 0; i < imeis.size(); i++) {
				psts.setString(1, imeis.get(i).getImei());
				psts.setString(2, imeis.get(i).getProduct());
				psts.setLong(3, System.currentTimeMillis() / 1000);
				psts.setString(4, imeis.get(i).getExtra() == null ? "" : imeis.get(i).getExtra());
				psts.addBatch(); // 加入批量处理
				count++;
				if (count % 1000 == 0) {
					++tens;
					System.out.println("当前数剧量:" + tens * 1000);
				}
			}
		}
		psts.executeBatch(); // 执行批量处理
		conn.commit(); // 提交
		long end = System.currentTimeMillis();
		System.out.println("数据导入完毕,总数为:" + count + "   所用时间为: " + (end - start) + " ms");
		conn.close();

	}

	/**
	 * 初始化数据,从本地的Excel文件中读取
	 * 
	 * @param srcFile
	 * @return
	 */
	private List<Param> initDate() {
		System.out.println("开始读取数据,请耐心等待......");
		String fileDir = filePath;
		int beginIndex = fileDir.lastIndexOf(".");
		int endIndex = fileDir.length();
		String suffix = fileDir.substring(beginIndex, endIndex);
		List<Param> paramList = new ArrayList<Param>();
		InputStream inputStream;
		try {
			inputStream = new FileInputStream(fileDir);
			if (".xls".equals(suffix)) {
				// paramList = readXls(inputStream);
			} else {
				paramList = readXlsx(inputStream);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("读取数据结束,数据量为:" + paramList.size());
		return paramList;

	}

	/**
	 * 读取Excel文件,后缀名为xlsx
	 * 
	 * @param inputStream
	 * @return
	 */
	private List<Param> readXlsx(InputStream inputStream) {

		XSSFWorkbook xssfWorkbook;
		List<Param> paramList = new ArrayList<Param>();
		try {
			xssfWorkbook = new XSSFWorkbook(inputStream);
			// 循环工作表Sheet
			int sheetNumbers = xssfWorkbook.getNumberOfSheets();
			for (int numSheet = 0; numSheet < sheetNumbers; numSheet++) {
				XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
				if (xssfSheet == null) {
					continue;
				}

				// 循环当前Sheet的行Row
				int rowNumbers = xssfSheet.getLastRowNum();
				for (int rowNum = 0; rowNum <= rowNumbers; rowNum++) {
					XSSFRow xssfRow = xssfSheet.getRow(rowNum);
					if (xssfRow == null) {
						continue;
					}

					// 循环当前Row的列Cell
					Param param = new Param();
					int cellNumbers = xssfRow.getLastCellNum();
					if (2 == cellNumbers) {// 2列分别获取两列中的值作为key和value
						for (int cellNum = 0; cellNum <= cellNumbers; cellNum++) {
							XSSFCell xssfCell = xssfRow.getCell(cellNum);
							if (xssfCell == null) {
								continue;
							}
							if (cellNum == 0) {
								DecimalFormat df = new DecimalFormat("0");
								String whatYourWant = df.format(xssfCell.getNumericCellValue());
								param.setImei(whatYourWant);
							} else if (cellNum == 1) {
								param.setProduct(xssfCell.toString());
							}
						}
					} else if (1 == cellNumbers) {
						/*
						 * // 1列,必须用":"或":"分隔开,否则不解析 XSSFCell xssfCell =
						 * xssfRow.getCell(0); String xssStr =
						 * xssfCell.toString(); if (null != xssfCell &&
						 * (xssStr.indexOf(":") > -1 || xssStr.indexOf(":") >
						 * -1)) { String[] paramFix = null; if
						 * (xssStr.contains(":")) { paramFix =
						 * xssStr.split(":"); } else if (xssStr.contains(":")) {
						 * paramFix = xssStr.split(":"); } if (null != paramFix
						 * && paramFix.length > 0) {
						 * param.setParamKey(paramFix[0]);
						 * param.setParamValue(paramFix[1]); } } else {
						 * continue; }
						 */} else {// 非1或2列为非法文档,不解析
						continue;
					}
					paramList.add(param);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return paramList;
	}
}
package com.liuyunlong;

public class Param {

	private String imei;

	private String product;

	private Integer updatetime;

	private String extra;

	public String getImei() {
		return imei;
	}

	public void setImei(String imei) {
		this.imei = imei;
	}

	public String getProduct() {
		return product;
	}

	public void setProduct(String product) {
		this.product = product;
	}

	public Integer getUpdatetime() {
		return updatetime;
	}

	public void setUpdatetime(Integer updatetime) {
		this.updatetime = updatetime;
	}

	public String getExtra() {
		return extra;
	}

	public void setExtra(String extra) {
		this.extra = extra;
	}

	@Override
	public String toString() {
		return "Param [imei=" + imei + ", product=" + product + ", updatetime=" + updatetime + ", extra=" + extra + "]";
	}
}

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://ip:3306/dbname
jdbc.username = root
jdbc.password = 1q2w3e4r5t!

file.path = D:\\excel\\8676-I03.xlsx

测试结果:

开始读取数据,请耐心等待......
读取数据结束,数据量为:200000
数据导入开始,请耐心等待......
当前数剧量:1000
当前数剧量:2000
当前数剧量:3000
当前数剧量:4000
当前数剧量:5000
当前数剧量:6000
当前数剧量:7000
当前数剧量:8000
当前数剧量:9000
当前数剧量:10000
当前数剧量:11000
当前数剧量:12000
当前数剧量:13000
当前数剧量:14000
当前数剧量:15000
当前数剧量:16000
当前数剧量:17000
当前数剧量:18000
当前数剧量:19000
当前数剧量:20000
当前数剧量:21000
当前数剧量:22000
当前数剧量:23000
当前数剧量:24000
当前数剧量:25000
当前数剧量:26000
当前数剧量:27000
当前数剧量:28000
当前数剧量:29000
当前数剧量:30000
当前数剧量:31000
当前数剧量:32000
当前数剧量:33000
当前数剧量:34000
当前数剧量:35000
当前数剧量:36000
当前数剧量:37000
当前数剧量:38000
当前数剧量:39000
当前数剧量:40000
当前数剧量:41000
当前数剧量:42000
当前数剧量:43000
当前数剧量:44000
当前数剧量:45000
当前数剧量:46000
当前数剧量:47000
当前数剧量:48000
当前数剧量:49000
当前数剧量:50000
当前数剧量:51000
当前数剧量:52000
当前数剧量:53000
当前数剧量:54000
当前数剧量:55000
当前数剧量:56000
当前数剧量:57000
当前数剧量:58000
当前数剧量:59000
当前数剧量:60000
当前数剧量:61000
当前数剧量:62000
当前数剧量:63000
当前数剧量:64000
当前数剧量:65000
当前数剧量:66000
当前数剧量:67000
当前数剧量:68000
当前数剧量:69000
当前数剧量:70000
当前数剧量:71000
当前数剧量:72000
当前数剧量:73000
当前数剧量:74000
当前数剧量:75000
当前数剧量:76000
当前数剧量:77000
当前数剧量:78000
当前数剧量:79000
当前数剧量:80000
当前数剧量:81000
当前数剧量:82000
当前数剧量:83000
当前数剧量:84000
当前数剧量:85000
当前数剧量:86000
当前数剧量:87000
当前数剧量:88000
当前数剧量:89000
当前数剧量:90000
当前数剧量:91000
当前数剧量:92000
当前数剧量:93000
当前数剧量:94000
当前数剧量:95000
当前数剧量:96000
当前数剧量:97000
当前数剧量:98000
当前数剧量:99000
当前数剧量:100000
当前数剧量:101000
当前数剧量:102000
当前数剧量:103000
当前数剧量:104000
当前数剧量:105000
当前数剧量:106000
当前数剧量:107000
当前数剧量:108000
当前数剧量:109000
当前数剧量:110000
当前数剧量:111000
当前数剧量:112000
当前数剧量:113000
当前数剧量:114000
当前数剧量:115000
当前数剧量:116000
当前数剧量:117000
当前数剧量:118000
当前数剧量:119000
当前数剧量:120000
当前数剧量:121000
当前数剧量:122000
当前数剧量:123000
当前数剧量:124000
当前数剧量:125000
当前数剧量:126000
当前数剧量:127000
当前数剧量:128000
当前数剧量:129000
当前数剧量:130000
当前数剧量:131000
当前数剧量:132000
当前数剧量:133000
当前数剧量:134000
当前数剧量:135000
当前数剧量:136000
当前数剧量:137000
当前数剧量:138000
当前数剧量:139000
当前数剧量:140000
当前数剧量:141000
当前数剧量:142000
当前数剧量:143000
当前数剧量:144000
当前数剧量:145000
当前数剧量:146000
当前数剧量:147000
当前数剧量:148000
当前数剧量:149000
当前数剧量:150000
当前数剧量:151000
当前数剧量:152000
当前数剧量:153000
当前数剧量:154000
当前数剧量:155000
当前数剧量:156000
当前数剧量:157000
当前数剧量:158000
当前数剧量:159000
当前数剧量:160000
当前数剧量:161000
当前数剧量:162000
当前数剧量:163000
当前数剧量:164000
当前数剧量:165000
当前数剧量:166000
当前数剧量:167000
当前数剧量:168000
当前数剧量:169000
当前数剧量:170000
当前数剧量:171000
当前数剧量:172000
当前数剧量:173000
当前数剧量:174000
当前数剧量:175000
当前数剧量:176000
当前数剧量:177000
当前数剧量:178000
当前数剧量:179000
当前数剧量:180000
当前数剧量:181000
当前数剧量:182000
当前数剧量:183000
当前数剧量:184000
当前数剧量:185000
当前数剧量:186000
当前数剧量:187000
当前数剧量:188000
当前数剧量:189000
当前数剧量:190000
当前数剧量:191000
当前数剧量:192000
当前数剧量:193000
当前数剧量:194000
当前数剧量:195000
当前数剧量:196000
当前数剧量:197000
当前数剧量:198000
当前数剧量:199000
当前数剧量:200000
数据导入完毕,总数为:200000   所用时间为: 9077 ms


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值