Comment accéder à Excel en tant que base de données à l'aide de Java 8


J'utilise Java 8.

Lorsque j'essaie d'accéder aux données Excel(ce sont essentiellement mes données de test) via jdbc-odbc, je reçois "java.lang.ClassNotFoundException: soleil.jdbc.ODBC.JdbcOdbcDriver "

Et aussi j'essaie d'accéder aux données en tant que non DSN.

J'ai surfé sur net et j'ai appris qu'Oracle dépréciait le support de jdbc-odbc.

Alors, quel est le moyen le plus simple d'accéder à ces données Excel en utilisant Java?

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();
    }
Author: skaffman, 2015-02-03

3 answers

Uday - vous pouvez facilement faire ce que vous voulez avec Apache POI jar

Comme Vous êtes mentionné votre exigence: de toutes les lignes ayant une chaîne isExecuted Oui. J'ai essayé avec ce pot.

Essayez ceci

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();
        }

    }

}

J'ai utilisé ces données 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
 1
Author: Dinesh Dontha, 2016-07-25 12:00:27

Ne pas accéder au fichier Excel en tant que base de données. Au lieu de cela utilisez un pot tel en tant que POI Apache Pour Les Documents Microsoft

Lien de téléchargement: Apache POI Pour MS Docs-Jar

Un Exemple D'utilisation De cette API:

Remarque: vous devez ajouter apache poi jar à votre chemin de construction avant de l'exécuter

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);
        }
    }

}
 1
Author: Dinesh Dontha, 2016-07-25 12:00:46

Cela peut être un peu tard, mais au cas où vous auriez toujours le problème, vous pouvez conserver access excel en tant que base de données avec java 8 en utilisant Fillo: http://codoid.com/fillo/

 0
Author: Sai, 2016-09-27 13:47:32