`
wenxiang_tune
  • 浏览: 48841 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

操作excel,批量插入数据库

阅读更多

为了导入大量的测试数据进入数据库,但是必须保证导入的数据有效,包含公司名字和邮箱,导入后可以批量的发送邮件(不是垃圾邮件),是邀请邮件。同事给我的文件是excel的,正好,学学如何操作excel以及如何有效的导入数据库并让效率让人满意。

 

首先操作excel:

用到类:

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

这3个足够用了。

InputStream input = new FileInputStream(url);
Workbook book = Workbook.getWorkbook(input);
Sheet[] st = book.getSheets();//得到excel第一页的内容,我们知道excel可以分成很多个工作单元哈
int index = st[0].getRows();//得到记录行

List list = new ArrayList();
			for(int i=0;i<index; i++){
				Cell company = st[0].getCell(0, i);//获取第一列的对象
				Cell emails = st[0].getCell(1,i);//获取第二列的对象
				String cps = company.getContents(); //得到第一列的某行的文本值
				if(cps.length() >= 30){
					cps = "";
				}
				if(cps!=""){
					String els = emails.getContents(); //同样的得到第
					String[] temp = getEmails(els);
					int j = temp.length;
					String[] temps = new String[1];
					while(j >= 1){
						temps = new String[]{cps, temp[j-1]};
						//map.put(cps, temp[j-1]);
						list.add(temps);
						j--;
					}
				}
			}

 啊 上面的就这样了,由于他里面的数据不规范,可能有空的或者多个换行符之类的,导致插入数据报长度不够的错误,所以要截取一下有效数据,用java的正则表达式。

/**
	 * 根据mail返回递归后的邮件列表
	 * @param str
	 * @return
	 */
	public String[] getEmails(String str){
		Pattern p = Pattern.compile("\n|\r|\t"); //可修改
		String[] a = p.split(str);
		return a;
	}

 大概就是这个样子啊,返回的是某一个单元格的数据行的数组。比如说某一个单元格写了10条数据,那么就返回一个长度为10的数组。

下面是去除重复:

int ccc = 0;
				for(int m = 0; m < list.size()-1; m++){
					String entname = ((String[])list.get(m))[0]; //得到公司名字
					String entemail = ((String[])list.get(m))[1];//得到公司邮箱
					//String name = list1.get(m).toString();
					//System.out.println("公司邮箱:"+s+"-------公司名字:"+name);
					for (int w = list.size()-1; w > m ; w--) {
						String tempname = ((String[])list.get(w))[0];
						String tempemail = ((String[])list.get(w))[1];
						if(tempemail.equals(entemail)){
							//System.out.println("重复"+tempemail+" 公司:"+tempname);
							list.remove(w);
						}
						System.out.println("执行了"+(ccc++)+"次");
					}
				}

 看不懂没关系,嵌套循环而已,效率不算高,时间仓促。将来改进。。。呵呵

这里得到了第二列的所有的有效的邮件,保证不重复。(为了达到邮件的验证,可以在上面的哦正则表达式中加邮箱验证,这里我就没弄了,因为数据不是很重要,验证邮箱的正则网上一大把)。

好了,上面的读取excel基本操作已经搞完了,下面是插入数据

代码如下:

Connection conn = dao.getQueryDao().getCurrentHibernateSession().connection();
String sql = "?,?";//假设insert后面的value就2个值哈
try {
			java.sql.PreparedStatement pars = conn.prepareStatement(sql);
			for (Object object : list) {
				String[] str = (String[])object;
				String a = str[0];//公司
				String b = str[1];//邮箱
				pars.setString(1, a);
				pars.setString(2, b);
				pars.addBatch();
			}
			pars.executeBatch();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 上面这个应该不难理解,可能获取connection的方式有点诡异,呵呵对了,dao是spring注入的,表示一个通用dao(commonDAO)所以里面能拿到这个connection的了,这里就不多做解释。要是有疑问欢迎站内。

这里要说明的是batch这个玩意儿,如果采用一般的JDBC对数据库操作的话效率没有这个快,为什么呢,看一下addbatch然后跳出循环后executebatch就知道了,嗯,肯定是一次性操作啦,至于有什么坏处,有待我以后慢慢研究。

 

弄完这个,执行插入成功,那些个约束啊长度限制啊神码的需要自己在写的过程中调整。写完后我就决定要写一个通用的文件操作类了,下次操作文件的时候能直接拖过用,下一篇文章可能是会讲解图表技术的一些相关内容。

分享到:
评论

相关推荐

    excel批量导入数据库

    本篇文章将详细讲解如何实现“Excel批量导入数据库”,以及利用小工具提高效率。 一、Excel与数据库的交互原理 Excel数据批量导入数据库的过程涉及数据的读取、转换和存储。首先,Excel文件(通常是.XLSX或.XLS格式...

    用EXCEL批量导入数据库.rar

    数据库操作通常包括CRUD(创建、读取、更新和删除)操作,而批量导入属于创建操作。导入数据时,我们需要知道数据库的表结构,包括字段名、字段类型和主键约束等。 批量导入数据通常有两种方式:直接SQL命令和使用...

    C#.NET中如何批量插入大量数据到数据库中

    在后端,我们处理`btn2_Click`事件来读取Excel文件并填充`GridView`,`btninsert_Click`事件则负责将`GridView`中的数据批量插入数据库。 ```csharp // 后台代码片段 protected void btn2_Click(object sender, ...

    spring3.0 MVC Poi操作excel批量导入数据库和导出数据

    而是将所有数据收集到一个列表中,然后使用JDBC的批处理功能,批量插入数据库。这显著减少了数据库交互次数,提高了整体效率。 5. **异常处理**: 在整个过程中,需要捕获和处理可能出现的异常,如文件不存在、数据...

    微信小程序云开发 Excel批量导入数据库

    本项目聚焦于通过云函数实现Excel文件的批量导入到数据库的功能,利用了开源模块`node-xlsx`。 `node-xlsx`是一个Node.js环境下的库,专门用于处理Excel文件。它能够读取Excel文件,并将其解析为JSON格式的数据,...

    Excel批量导入数据库

    在描述中提到了"封装程string数组",这意味着读取到的数据会被组织成适合数据库操作的格式。例如,如果我们每行数据代表一条数据库记录,那么每行的数据会被转换为一个字符串数组,每个数组元素对应记录的一个字段。...

    VB把EXCEL导入到数据库的方法

    在VB(Visual Basic)开发环境中,将Excel数据导入到数据库是一项常见的任务,尤其在数据处理和分析场景下。本文将详细介绍如何使用VB实现这一过程,同时连接和操作数据库。 首先,你需要确保安装了Microsoft ...

    C#通过NPOI库操作Excel,并将Excel数据导入Mysql数据库(自动建表)

    内容概要:本资源介绍了如何从利用Npoi库操作Excel,如相关读取单元格、行,介绍了如何对单元格数据格式进行操作,并分享了如何将Datatable数据导入Mysql数据库,方便项目管理。 阅读建议:此资源以如何读取Excel...

    excel批量导入oracle数据库

    在实际操作中,`excel批量导入oracle数据库.txt`可能包含了具体的代码示例或详细步骤,供用户参考。确保遵循文件中的指导,同时结合上述理论知识,可以顺利完成Excel到Oracle的批量导入工作。 总之,批量导入Excel...

    excel实现对数据库的批量输入

    本篇文章将深入探讨如何使用Excel实现对数据库的批量输入,以满足类似运动会管理系统的需求。 首先,我们需要理解Excel的基本操作,如公式、VBA(Visual Basic for Applications)宏编程等,这些都是实现数据批量...

    Asp.net Excel批量导入数据到SqlServer数据库

    Asp.net Excel批量导入数据到SqlServer数据库 本文将详细介绍如何使用 Asp.net 实现从 Excel 文件批量导入数据到 SqlServer 数据库中。该操作可以大大提高数据导入效率,缩短数据处理时间。 标题解释 Asp.net ...

    C# Excel导入数据库

    在本文中,我们将介绍一种将 Excel 文件的数据转换为 `DataTable`,然后将这些数据批量插入到 SQL Server 数据库的方法。这种方式不仅能够提高数据处理的效率,还能够让开发者灵活地控制哪些列的数据应该被导入到...

    将excal批量数据插入到postgresql数据库(目前实现字符串拼接的方式)

    同时,你需要安装Python环境,因为我们将使用Python作为主要的数据处理和数据库操作语言,特别是使用`pandas`库来处理Excel数据和`psycopg2`库来连接PostgreSQL。 1. **准备Excel数据** - 使用Excel打开你的数据...

    Java 实现从Excel批量导入数据到MySQL

    本文将详细介绍如何利用Java实现从Excel批量导入数据到MySQL数据库。 首先,我们需要了解两个关键的库:Apache POI 和 JDBC。Apache POI 是一个开源的Java库,用于读写Microsoft Office格式的文件,包括Excel。JDBC...

    从EXCEL批量添加数据到数据库

    总之,从Excel批量添加数据到数据库涉及到数据预处理、数据库连接、SQL操作和可能的ETL工具使用。掌握这些技能,将大大提高你在数据处理和管理中的效率,尤其在需要频繁交互Excel和数据库的工作场景中。在实际操作中...

    c# 操作excel(c#实现excel数据读出并插入到数据库)

    注意,如果你处理大量数据,考虑使用SQL Server的批量插入功能,如SqlBulkCopy,以提高性能。此外,根据实际情况,你可能需要进行数据验证、错误处理和事务管理,确保数据完整性和一致性。 总结来说,使用C#操作...

    C#将数据导入excel和Excel数据导入数据库

    在这个过程中,你可能需要处理异常,确保数据验证,并优化批量插入以提高性能。例如,你可以使用`SqlBulkCopy`类一次性导入大量数据,而不是逐条插入。 压缩包中的"ReadExcel"可能包含了一个示例项目,演示了如何...

    springboot实现将Excel导入数据库

    7. **批量插入数据库**:通过MyBatis的SqlSession,调用Mapper接口的`insertUser`方法,将数据批量插入到数据库。 8. **配置信息.sql**:可能需要一个SQL脚本文件(如information.sql),用于创建数据库表结构,...

    将EXCEL数据 插入ORACLE数据库

    - **性能优化**:如果数据量大,考虑分批导入,利用Oracle的批量插入语句提高效率,避免频繁的网络交互。 - **权限管理**:确保使用的账户有足够的权限执行插入操作,并遵循最小权限原则,防止安全风险。 通过上述...

Global site tag (gtag.js) - Google Analytics