-Java连接Excel、MySQL、SQLServer数据源及相关增、删、改、查方法和问题总结-【Part I】

本文详细介绍如何使用Java操作Excel文件,包括读取、写入、更新和删除数据等常见操作,并提供示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【Part I】-Java连接Excel数据源及相关增、删、改、查方法和问题总结-

一、前言

在项目中,经常会遇到需要读取数据源数据并进行处理的场景,数据源通常为Excel、MySQL、SQLServer三种,不久前,我刚好参加了这样一个项目,同时涉及到了上述三种数据源,中途也踩了一些坑,因此,觉得有写一个总结的必要,希望对读到这篇文章的人能够有所帮助。

二、准备工作

需要下载一个jar包——jxl.jar,并通过:Build Path -> Configure Build Path -> Add External JARs 将jxl.jar导入到工程的Referenced Libraries中。注意:jxl.jar包目前只支持office2003及之前版本,即.xls格式

三、增、删、改、查的实现

3.1 读取Excel表中的数据

这里,我仅仅以读取double类型数据举例说明,其它数据类型与之类似
public ArrayList<Double> getDataFromExcel(int numOfData,int ColumNum)
	{
		//创建一个用于返回数据的数据集
		ArrayList<Double> dataSet=new ArrayList<Double>();
		//创建一个文件路径名
		File file = new File("C:\\Users\UserName\\Desktop\\changxing.xls");
		Cell[] cellData=new Cell[numOfData];
        try
        {
        //创建一个输入流
		InputStream in = new FileInputStream(file);
		//创建一个工作簿
		Workbook workbook_in = Workbook.getWorkbook(in);
		//通过工作簿获取第一张Sheet表(索引号为0)
		//我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。
		Sheet sheet0 = workbook_in.getSheet(0);
		
		//Test1:可以通过指定行和列得到指定的单元格Cell对象
		Cell c00 = sheet0.getCell(3, 5); //读取第3行第5列中的数据
		Cell[] temp1 = sheet0.getColumn(2);//读取第2列的数据
		Cell[] temp2 = sheet0.getRow(3);//读取第3行数据
		System.out.println(c00.getContents()+";"+temp1[0].getContents()+";"+temp2[0].getContents());
		
		//Test2:可以得到某一行或者某一列的所有单元格Cell对象
		cellData = sheet0.getColumn(ColumNum);//读取一列数据ColumNum代表列号
        }
        catch(Exception e)
        {
        	System.out.println("读取数据失败!");
        }
		
		//Test3:可以将通过Cell获取到的Excel中的数据读入dataSet中,以便返回
		for(int i=0;i<cellData.length;i++)
		{
			//为了保证精度的特殊处理,如果读取的数据类型是double或者float,采用getContents()
			//仅仅默认保留三位小数,精度有可能不够,而通过下面的处理可以保证精度。当然,如果是其它
			//数据类型,如String,则可直接采用getContents()方法
			NumberCell cell = (NumberCell) cellData[i];  
	        	double data = cell.getValue();  
			dataSet.add(data);
		}
		return dataSet;//返回读取到的指定列、指定数量的数据集
	}

3.2 创建并向Excel表中的写入数据

/**
	 * 创建Excel文件并向其中写入数据
	 * @param fileName:指定创建文件的路径和文件名构成的字符串
	 * 注:如果只有文件名,则创建的文件将位于工作空间的默认目录下
	 */
	 public static void writeExcel(String fileName){    
	        WritableWorkbook wwb = null;    
	        try {    
	            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象    
	            wwb = Workbook.createWorkbook(new File(fileName));
	           
	        } catch (IOException e) {    
	            e.printStackTrace();    
	        }    
	        if(wwb!=null)
	        {    
	            //创建一个可写入的工作表    
	            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置    
	            WritableSheet ws = wwb.createSheet("自定义工作表名称", 0);  
	            //下面开始添加单元格    
	            for(int i=0;i<10;i++){    
	                for(int j=0;j<10;j++){    
	                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行    
	                    Label labelC = new Label(j, i, "第"+(i+1)+"行,第"+(j+1)+"列的内容"); 
	                    try {    
	                        //将生成的单元格添加到工作表中    
	                        ws.addCell(labelC);   
	                    } catch (RowsExceededException e) {    
	                        e.printStackTrace();    
	                    } catch (WriteException e) {    
	                        e.printStackTrace();    
	                    }    
	   
	                }    
	            }    
	   
	            try {    
	                //从内存中写入文件中    
	                wwb.write();    
	                //关闭资源,释放内存    
	                wwb.close();    
	            } catch (IOException e) {    
	                e.printStackTrace();    
	            } catch (WriteException e) {    
	                e.printStackTrace();    
	            }    
	        }    
	    } 

3.3 查询、修改Excel表中的数据

 /**
	  * 查询并替换掉Excel文件中的指定内容
	  * @param fileName
	  * @param sheetNum:0、1、2..n,分别代表Excel中的第n张表
	  */
	 public static void updateExcel(String fileName,int sheetNum)
	 {
		 File f = new File(fileName);
		 try
		 {
			 Workbook wb = Workbook.getWorkbook(f);//
			 WritableWorkbook book = wb.createWorkbook(f, wb);
			 // 获得第一个工作表对象,sheetNum从0开始
			 WritableSheet st = book.getSheet(sheetNum);
			 for (int i = 0; i < st.getRows(); i++) 
			 {
				 for (int j = 0; j < st.getColumns(); j++) 
				 {
					 Cell cel = st.getCell(j,i);
					 //查询:输出全部原始内容
					 System.out.println(cel.getContents());
					 //修改:修改指定原始内容
					 if(cel.getContents().equals("原始内容"))
					 {
						Label label = new Label(j, i, "替换内容");
						st.addCell(label);
					 }
				 }
			 }
			 book.write();
			 book.close();
			 wb.close();
		 	} catch (Exception e) {
		     e.printStackTrace();
		 	}
	 }

3.4 删除Excel表中指定的列(行与之类似)

/**
	  * 从Excel中删除指定的列
	  * @param fileName:Excel文件路径+文件名构成的字符串
	  * @param sheetNum:0、1、2...n待删除数据对应的表序号
	  * @param columnNum:0、1、2...n待删除的表对应的列
	  */
	 public void removeColumnFromExcel(String fileName,int sheetNum,int columnNum)
	 {
		 File f = new File(fileName);
		 try
		 {
			 Workbook wb = Workbook.getWorkbook(f);//
			 WritableWorkbook book = wb.createWorkbook(f, wb);
			 // 获得第一个工作表对象,sheetNum从0开始
			 WritableSheet st = book.getSheet(sheetNum);
			//删除指定的列
			st.removeColumn(columnNum);
			 book.write();
			 book.close();
			 wb.close();
		 } 
		 catch (Exception e) 
		 {
		     e.printStackTrace();
		 }
	 }

四、注意问题

精度问题:通过如下程序读取Excel中的单元格内容,如果数据是浮点型(double或float),默认读取的内容只能保留三位小数,在一些需要高精度计算的情况下,往往不能满足实际需要。
 Cell cel = st.getCell(j,i);
 System.out.println(cel.getContents());
因此,改用其它方法:
NumberCell cell = (NumberCell) cellData[i];  
double data = cell.getValue();  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jin_Kwok

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值