2017-06-02 56 views
1

好吧..所以我做了一个小应用程序,它连接到我的数据库。我可以读出一个excel文件并将这些文件存储到一个数组中。 我的数据库有多个表。我可以填写一张桌子,但是当我想填写另一张桌子时,它将不起作用。我的堆栈跟踪中有一堆红线,我无法弄清楚该怎么做..所以我绝望地来到了这里,希望得到一些帮助。我的第二张桌子没有被填充数据

我的程序由一个主的:

public static void main(String[] args){ 
    CustomerMC cmc = new CustomerMC(); 
    ArrayList<Customer> customers = new ArrayList<>(); 
    ArrayList<Order> orders = new ArrayList<>(); 
    ArrayList<ArrayList> gay = 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); 
        gay.add(customers); 
        gay.add(orders); 
       } 


      } 
     } 
    } catch (FileNotFoundException ex) { 
     System.out.println("File has not been found"); 
    } catch (IOException ex) { 
     System.out.println("An error has occured"); 
    } 

    for(Customer customer : customers){ 
     for(Order order : orders) { 
     System.out.println(order.toString()); 
     cmc.insertOrder(""+order.getOrderid(), order.getProduct(), ""+customer.getCid()); 
    } 
     System.out.println(customer.toString()); 
     cmc.insertCustomer(""+customer.getCid(), customer.getName(), customer.getPurchase(), customer.getAge());   
    } 



} 

两个容器类:

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

我的模型类客户提供查询,例如:

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"; 

    } 

    return returning; 

} 
public String insertOrder(String orderid, String product, String id) { 
    String returning = null; 
    try { 
     query = "insert into Order 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) { 
     System.out.println(); 
     e.printStackTrace(); 

    } 

    return returning; 

} 

第一类;这是客户表填写完美。它打印出它必须做的事情。但是,订单表,第二个,没有。我得到的输出如下:

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.Util.getInstance(Util.java:386) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053) 
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) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2794) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359) 
at p4project.CustomerMC.insertOrder(CustomerMC.java:65) 

at p4project.Main.main(Main.java:102) 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order values(2,'Couch',1)' at line 1 

我希望有人能帮忙,任何帮助都是值得欢迎的。

真诚,

+0

我会建议您包括您插入的列名,它既帮助文档,还可以帮助的情况下,有时表是用不同的列顺序重新创建一个它会导致各种未来的问题。 –

回答

3

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您有一个 错误的SQL语法; 检查对应于您 MySQL服务器版本的手册正确的语法在1号线

Order附近使用“订单 值(2,”沙发“ 1)”是MySQL的保留字因此,你必须把这个名字你的表``这样之间:

query = "insert into `Order` values(?, ?, ?);"; 
//-------------------^-----^ 
+0

非常感谢你的朋友!我无法更感激。这解决了我的问题,在过去的3个小时里一直忙着....啊! – Wout

+0

不客气@Wout :) –