Come faccio a leggere una parte di un foglio di Excel, invece di tutto con Java?

Ho fatto una piccola applicazione che legge in un file di Excel. Ho connesso al mio database MySQL in modo che posso mettere il file nel database, che contiene più tabelle. Tuttavia, quando si implementano i valori nella tabella "Ordini", esiste un SQLException ei valori non entrano nel database. Questa è l'exception nella class CustomerMC. I valori della tabella "Clienti" entrano nel database.

Il codice che ho contiene contiene un elemento principale in cui ho letto il file e fatto istanze di cliente e ordine, due classi contenitore in cui entrano i valori, una class di connessione non rilevante per questa e una class model per il cliente where la query si trova.

  • Excel Formula..non potrebbe cambiare il text
  • Colore di background per due celle nella stessa row
  • Come leggere un file excel con le tabs vuote in R?
  • Excel VBA riprende l'azione della barra spaziale
  • Aggiungere la string definita all'ultima colonna di dati
  • come convertire l'image Tiff per mostrare la miniatura usando C # per l'esportzione in Excel
  • Principale:

    public static void main(String[] args){ CustomerMC cmc = new CustomerMC(); ArrayList<Customer> customers = new ArrayList<>(); ArrayList<Order> orders = new ArrayList<>(); try { try (FileInputStream file = new FileInputStream(new File("C:/Users/Wout/Desktop/ProjectTest.xlsx"))) { XSSFWorkbook wb = new XSSFWorkbook(file); XSSFSheet sh = wb.getSheetAt(0); Iterator<Row> rowIterator = sh.iterator(); while(rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); int counter = 0; int cid = 0; int OrderID = 0; String name = ""; String purchase = ""; String age = ""; String product = ""; while (cellIterator.hasNext() && row.getRowNum() != 0) { Cell cell = cellIterator.next(); counter++; switch (counter) { case 1: cid = (int)cell.getNumericCellValue(); break; case 2: name = cell.getStringCellValue(); break; case 3: purchase = cell.getStringCellValue(); break; case 4: age = "" + cell.getNumericCellValue(); break; case 5: OrderID = (int)cell.getNumericCellValue(); break; case 6: product = "" + cell.getStringCellValue(); break; case 7: cid = (int)cell.getNumericCellValue(); break; } } if(row.getRowNum() != 0) { Customer customer = new Customer(cid,name,purchase,age); Order order = new Order(OrderID, product, cid); customers.add(customer); orders.add(order); } } } } catch (FileNotFoundException ex) { System.out.println("File has not been found"); } catch (IOException ex) { System.out.println("IOException"); } for(Order order : orders) { System.out.println(order.toString()); cmc.insertOrder(""+order.getOrderid(), order.getProduct(), ""+order.getCid()); } for(Customer customer : customers){ System.out.println(customer.toString()); cmc.insertCustomer(""+customer.getCid(), customer.getName(), customer.getPurchase(), customer.getAge()); } } 

    Classi di contenitori:

     public class Customer { private int cid; private String name; private String purchase; private String age; public Customer(int cid, String name, String purchase, String age) { this.cid = cid; this.name = name; this.purchase = purchase; this.age = age; } public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPurchase() { return purchase; } public void setPurchase(String purchase) { this.purchase = purchase; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "" + cid + " ; "+ name + " ; " + purchase + " ; " + age; } public class Order { private int orderid; private String product; private int cid; public Order(int orderid, String product, int cid) { this.orderid = orderid; this.product = product; this.cid = cid; } public int getOrderid() { return orderid; } public void setOrderid(int orderid) { this.orderid = orderid; } public String getProduct() { return product; } public void setProduct(String product) { this.product = product; } public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } @Override public String toString() { return "" + orderid + " ; " + product + " ; " + cid; } nome di string privato; public class Customer { private int cid; private String name; private String purchase; private String age; public Customer(int cid, String name, String purchase, String age) { this.cid = cid; this.name = name; this.purchase = purchase; this.age = age; } public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPurchase() { return purchase; } public void setPurchase(String purchase) { this.purchase = purchase; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "" + cid + " ; "+ name + " ; " + purchase + " ; " + age; } public class Order { private int orderid; private String product; private int cid; public Order(int orderid, String product, int cid) { this.orderid = orderid; this.product = product; this.cid = cid; } public int getOrderid() { return orderid; } public void setOrderid(int orderid) { this.orderid = orderid; } public String getProduct() { return product; } public void setProduct(String product) { this.product = product; } public int getCid() { return cid; } public void setCid(int cid) { this.cid = cid; } @Override public String toString() { return "" + orderid + " ; " + product + " ; " + cid; } 

    Classe di model cliente:

     public class CustomerMC { private Connection connection; private PreparedStatement pst; String query; ResultSet rs; public CustomerMC(){ try{ connection = SimpleDataSourceV2.getConnection(); } catch(SQLException e){ System.out.println("Connection failure"); e.printStackTrace(); } } public String insertCustomer(String cid, String name, String purchase, String age) { String returning = null; try { query = "insert into CustomerService values(?,?,?,?);"; pst = connection.prepareStatement(query); pst.setInt(1, Integer.parseInt(cid)); pst.setString(2, name); pst.setString(3, purchase); pst.setString(4, age); int response = pst.executeUpdate(); returning = response +" Records has/have been edited"; } catch (SQLException e) { returning = "An error has occured"; System.out.println(returning); } return returning; } public String insertOrder(String orderid, String product, String id) { String returning = null; try { query = "insert into CustomerService values(?,?,?,?);"; pst = connection.prepareStatement(query); pst.setInt(1, Integer.parseInt(orderid)); pst.setString(2, product); pst.setInt(3, Integer.parseInt(id)); int response = pst.executeUpdate(); returning = response +" Records has/have been edited"; } catch (SQLException e) { returning = "xx"; System.out.println(returning); } return returning; } 

    Ovviamente c'è una class più con la connessione al database. Questo non è pertinente per questa domanda e ho deciso di lasciarlo fuori.

    Quindi il mio foglio di Excel è un foglio semplice, where il cid, il nome, l'acquirente e l'età sono la tabella 'Customer' e l'ID di ordine, il prodotto e il cid sono la tabella 'Ordini'. Cid in Orders è la chiave estera ai clienti. Excel genera automaticamente quel field come valore che viene nella tabella dei clienti. Ri-implemento il valore del cid per renderlo più facile per me stesso.

    Tabella: https://prnt.sc/ff1yd0

    L'output che ho ottenuto dopo l'esecuzione è come segue:

         1;  Tenere sotto controllo ;  1
         java.sql.SQLException: Il count delle colonne non corrisponde al valore di valore alla row 1
         2;  Divano;  2
         3;  Appartamento;  3
             a com.mysql.jdbc.SQLError.createSQLException (SQLError.java:1074)
             a com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:4120)
             a com.mysql.jdbc.MysqlIO.checkErrorPacket (MysqlIO.java:4052)
             a com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:2503)
             a com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2664)
             a com.mysql.jdbc.ConnectionImpl.execSQL (ConnectionImpl.java:2794)
             a 
         com.mysql.jdbc.PreparedStatement.executeInternal (PreparedStatement.java:2155)
             a 
          com.mysql.jdbc.PreparedStatement.executeUpdate (PreparedStatement.java:2458)
             a 
         com.mysql.jdbc.PreparedStatement.executeUpdate (PreparedStatement.java:2375)
             a 
         com.mysql.jdbc.PreparedStatement.executeUpdate (PreparedStatement.java:2359)
             a p4project.CustomerMC.insertOrder (CustomerMC.java:66)
             a p4project.Main.main (Main.java:103)
         java.sql.SQLException: Il count delle colonne non corrisponde al valore di valore alla row 1 

    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)

    Non so perché il secondo tavolo non implementa e spero che qualcuno possa aiutare! Qualsiasi aiuto è apprezzato.

  • POI: Formatta l'integer in Excel
  • Apache POI: SXSSFWorkbook.dispose () non esiste
  • applicare il carattere e il colore sul file excel creato utilizzando i driver ODBC
  • Algoritmo: due tabelle sono in connessione con l'ID, calcolando una nuova tabella da loro
  • Rimuovere il contenuto di sas da Excel con VBA (componente aggiuntivo di MS Office)
  • Espressione regolare per analizzare l'url dopo il nome di dominio
  • One Solution collect form web for “Come faccio a leggere una parte di un foglio di Excel, invece di tutto con Java?”

    La tua exception viene lanciata su: CustomerMC.insertOrder(CustomerMC.java:66) e dice java.sql.SQLException: Column count doesn't match value count .

    La tua tabella CustomerService sembra avere 7 colonne, ma vuoi inserire una row con solo 4 valori. Non è ansible. Devi fornire un valore per each colonna (se non specificate i nomi delle colonne in cui vuoi inserire i tuoi valori). È inoltre ansible inserire valori nulli se lo schema lo consente, ma devi specificarlo. L'istruzione non conosce quali colonne vuoi lasciare vuoto.

    Microsoft Office Excel Spreadsheet è il miglior software di Office, Excel VBA e formule Excel rendono il foglio di calcolo più veloce.