简单的jdbc操作数据库例子,高效率插入数据
Posted wj沧浪之水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的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
以上是关于简单的jdbc操作数据库例子,高效率插入数据的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis-Plus的saveBatch批量插入为何效率很低耗时长详解及解决方案
编写一个java程序,通过jdbc访问数据库实现对数据库的插入,删除,修改和查询操作