如何使用Java 8作为数据库访问Excel

我正在使用Java 8。

当我试图通过jdbc-odbc访问Excel数据(基本上这是我的testing数据),我得到“java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver”

而且我也试图访问数据作为非DSN。

我冲浪网,并知道Oracle不支持jdbc-odbc。

那么使用Java访问这个Excel数据最简单的方法是什么?

Connection con=null; Statement stmt=null; ResultSet rs=null; String query = "select TestScript from [TS 360 Scripts$]"; try { Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); con = DriverManager.getConnection("jdbc:odbc:;Driver={Microsoft Excel Driver(*.xlsx)};DBQ=D://TS 360 Script with Count.xlsx"); stmt=con.createStatement(); rs=stmt.executeQuery(query); while(rs.next()) { System.out.println(rs.getString("TestScript")); } con.close(); rs.close(); stmt.close(); } catch(Exception e) { e.printStackTrace(); } 

这可能会有点晚,但如果你仍然有这个问题,你可以保留访问excel作为数据库与Java 8使用FILL数据库: http ://codoid.com/fillo/

Uday – 你可以轻松地做任何你想用Apache POI jar做的事情

正如你所提到的你的要求:所有具有isExecutedstring的行是。 我用这个jar子试了一下。

尝试这个

 package com.dd.selenium; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class PerformDDTest { private static HSSFWorkbook xlWBook; private static HSSFSheet xlSheet; private static HSSFRow xlRow; private static HSSFCell xlCell; private static String filePath = "/home/dinesh/"; private static String fileName = "test.xls"; public static void main(String[] args) throws InterruptedException { try { FileInputStream xlFile = new FileInputStream(filePath + fileName); // Access the required test data sheet xlWBook = new HSSFWorkbook(xlFile); // Assuming your data is in Sheet1- if not use your own sheet name xlSheet = xlWBook.getSheet("Sheet1"); // gives row count in sheet int noOfRows = xlSheet.getPhysicalNumberOfRows(); // gives column count in sheet xlRow = xlSheet.getRow(0); int noOfColumns = xlRow.getLastCellNum(); // excelData - 2 dimm array - stores all the excel data -Sheet1 only String[][] excelData = new String[noOfRows][noOfColumns]; // r - row c- column for (int r = 1; r < noOfRows; r++) { for (int c = 0; c < noOfColumns; c++) { xlRow = xlSheet.getRow(r); xlCell = xlRow.getCell(c); // Here we have complete excel data in an array -excelData- excelData[r][c] = xlCell.getStringCellValue(); // System.out.println("row: " + r + " column: " + c); // System.out.println(excelData[r][c]); } } // creating an array to store isExected column String[][] isExecuted = new String[noOfRows][1]; for (int row = 1; row < noOfRows; row++) { // here column is always only one // so c=0 // extracting a isExecuted column - and considering it as last // column in sheet // in your case it is not then - count the column position : use // position-1 // ex: if column position is 7 then use 6 as below // isExecuted[row][0]= excelData[row][6]; isExecuted[row][0] = excelData[row][noOfColumns - 1]; if (isExecuted[row][0].equalsIgnoreCase("yes")) { // accessing complete row -which isExecuted=Yes // *********IMPORTANT***** for (int col = 0; col < noOfColumns; col++) { // prints all the rows where isExecuted column has Yes System.out.println(excelData[row][col]); } } // System.out.println(isExecuted[row][0]); } } catch (IOException e) { e.printStackTrace(); } } } 

我用这个Excel数据:

 Test Case Name Username Password Results IsExecute APACHE_POI_TC testuser_1 Test@123 Pass Yes APACHE_POI_TC testuser_2 Test@124 Pass No APACHE_POI_TC testuser_3 Test@125 Pass Yes APACHE_POI_TC testuser_4 Test@126 Pass Yes APACHE_POI_TC testuser_5 Test@127 Pass No APACHE_POI_TC testuser_6 Test@128 Pass Yes 

不作为数据库访问Excel文件。 而是使用诸如Apache POI For Microsoft Documents之类的jar

下载链接: MSI文档 – Jar的Apache POI

一个例子使用这个API:

注意:在运行之前,您必须将Apache poi jar添加到您的构buildpath

 package com.dd.selenium; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.concurrent.TimeUnit; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.openqa.selenium.By; import org.openqa.selenium.firefox.FirefoxDriver; public class PerformDDTest { private static HSSFWorkbook xlWBook; private static HSSFSheet xlSheet; private static HSSFRow xlRow; private static HSSFCell xlCell; private static String filePath = "/home/dinesh/"; private static String fileName = "test.xls"; private static String url = "http://store.demoqa.com/"; private static String result = "Pass"; public static void main(String[] args) throws InterruptedException { try { FileInputStream xlFile = new FileInputStream(filePath+fileName); //Access the required test data sheet xlWBook = new HSSFWorkbook(xlFile); xlSheet = xlWBook.getSheet("Sheet1"); xlRow = xlSheet.getRow(1); String username = xlRow.getCell(1).getStringCellValue(); String password = xlRow.getCell(2).getStringCellValue(); FirefoxDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.manage().window().maximize(); driver.get(url); driver.findElement(By.xpath(".//*[@id='account']/a")).click(); driver.findElement(By.id("log")).sendKeys(username); driver.findElement(By.id("pwd")).sendKeys(password); driver.findElement(By.id("login")).click(); driver.findElement(By.xpath(".//*[@id='account_logout']/a")).click(); Thread.sleep(5000); driver.quit(); setResultCell(); FileOutputStream fout = new FileOutputStream(filePath+fileName); xlWBook.write(fout); fout.flush(); fout.close(); } catch (IOException e) { // TODO Auto-generated catch block result = "Failed"; setResultCell(); e.printStackTrace(); } } private static void setResultCell() { xlCell = xlRow.getCell(3, xlRow.RETURN_BLANK_AS_NULL); if(xlCell == null ){ xlCell = xlRow.createCell(3); xlCell.setCellValue(result); }else{ xlCell.setCellValue(result); } } }