只是一个工作总结
前言:
今天做了一个工作,就是让我把一个javaBean的所有属性和一个存储在Excel文件中的表格对照,然后提取出有用的数据,存储到数据库中,
一开始我傻瓜式的一个一个比对,一个一个的写sql,但是我一看到一个javaBean中居然有80多个属性,我就开始犹豫了,我开始了思考,要是我可以用工具去实现它,把所有数据都放到一个表中多好,这样然后再利用字符串拼接合成SQL语句,这样岂不是美滋滋!
话是这样说的,但是这些东西是需要技术去作为基础搭建的,因为有过一次关于文档信息整理的因素(虽然只有500条数据,但我还是没有把数据完全清洗干净,最后貌似别人给我返工了,当时的我一开始还好,但是慢慢我发现我脑子陷进去了 )
我说一下需要的技术:
首先就是把javaBean的文件的所有属性获取到:
这个时候就涉及到java的反射:
其次,我需要java文件对Excel文件的操作写操作和读取操作
我没有一直用java进行操作,而是选择了Excel的函数,也就是常用的Index()和match()函数:
index(查找的范围,第几行):返回对应位置的值
match(查找的值,查找的范围,匹配方式):返回指定数值在指定区域中的位置。(匹配的方式:0[精确查找],-1,1)
具体方法如下:
https://baijiahao.baidu.com/s?id=1606405029318751713&wfr=spider&for=pc
然后把数据处理之后,再进行操作
然后再读取Excel文件,把读取到的数据进行再处理,一步一步把数据拼接,最后生成sql语句。
附录:
// 这是你要获取的类 WsInvestorCon wsLicenceinfo = new WsInvestorCon(); for(String str:getFiledName(wsLicenceinfo)){ System.out.println(str); } }
// 获取类的所有成员变量 private static String[] getFiledName(Object o){ Field[] fields=o.getClass().getDeclaredFields(); String[] fieldNames=new String[fields.length]; int count =0; for(int i=0;i<fields.length;i++){
// 获取成员变量的属性 // System.out.println(fields[i].getType());
// 获取成员变量名 fieldNames[i]=fields[i].getName(); count++; } System.out.println("一共有属性:"+count);
// 返回一个字符串数组 return fieldNames; }
java操作Excel文件:
这个时候需要注意一点,Excel文档的版本不能太高,因为java操作Excel文件的api版本比较老:
需要导入的依赖:
<dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency>
然后:
public class JavaTest { public static void main(String[] args) { /** * 获取当前对象的所有成员变量 */ WsInvestorCon wsLicenceinfo = new WsInvestorCon(); for(String str:getFiledName(wsLicenceinfo)){ System.out.println(str); } System.out.println("------------------------------------------"); /** * 读取Excek文件 */ executeExcel("C:\Users\Administrator\Desktop\2.xls"); } /** * 获取类中所有的成员变量 * @param o * @return */ private static String[] getFiledName(Object o){ Field[] fields=o.getClass().getDeclaredFields(); String[] fieldNames=new String[fields.length]; int count =0; for(int i=0;i<fields.length;i++){ // System.out.println(fields[i].getType()); fieldNames[i]=fields[i].getName(); count++; } System.out.println("一共有属性:"+count); return fieldNames; } /** * 读取Excel文件所有的信息 * @param fileName */ private static void executeExcel(String fileName){ //文件对象 Workbook book; //工作表对象 Sheet sheet; //行对象 Cell cell; try { //hello.xls为要读取的excel文件名 book= Workbook.getWorkbook(new File(fileName)); //获得第一个工作表对象(ecxel中sheet的编号从0开始,0,1,2,3,....) sheet=book.getSheet(0); // 获取每一行的单元格 int i =0; int j=0; while (true){ j=0; cell = sheet.getCell(j,i);//(列,行) 这里可以根据自己的逻辑来获取数据 if("".equals(cell.getContents())==true) { //如果读取的数据为空 break; } System.out.println(cell.getContents()); i++; } }catch (Exception e){ e.printStackTrace(); } } }
最后,越来越觉得需要学习的太多了。