我需要在jtable的行中插入不同的结果。我使用purchaseid(即pid)搜索我的记录,它将为特定的purchaseid找到2个结果。问题是,当我将它插入到行中时,它只是复制了第一个行的结果。例:p0001有两个采购明细,当我将其插入行中时,我有两个相同的行。我有没有办法一行一行地插进去?另外,我从早上就开始编码,大脑功能不好。用户界面:else if(e.getSource() == jbtRetrieve) { String pID = jTF3.getText(); Purchase purchase = purcControl.selectRecord(pID); if (purchase != null) { String pdCountStr = purchase.getPurchaseDetailsID(); String pdCountStr2 = pdCountStr.substring(2,5); int pdCount = Integer.parseInt(pdCountStr2); for(int g = 0; g<pdCount;g++){ //g =1 tableModel.addRow(new Object[]{ purchase.getPurchaseDetailsID(),purchase.getStockID(),purchase.getPrice(),purchase.getQuantity()}); }}陆军部: public Purchase getRecord(String pID){ String queryStr = "SELECT PD.PURCHASEDETAILID,PD.PURCHASEID,PD.STOCKID,PD.ORDERQTY,S.STOCKPRICE FROM "+tableName+" PD, STOCKS S WHERE PD.STOCKID = S.STOCKID AND PurchaseID = ?"; Purchase purchase = null; System.out.println("asd"); try{ stmt = conn.prepareStatement(queryStr); stmt.setString(1,pID); ResultSet rs = stmt.executeQuery(); if(rs.next()){ purchase = new Purchase(pID, rs.getString("purchaseID"),rs.getString("stockID"),rs.getDouble("stockprice"),rs.getInt("orderqty")); } } catch (SQLException ex){ JOptionPane.showMessageDialog(null,ex.getMessage(),"ERROR",JOptionPane.ERROR_MESSAGE); } return purchase;}域:public Purchase(String purchaseDetailsID,String purchaseID,String stockID,double price,int quantity){ this.purchaseDetailsID = purchaseDetailsID; this.purchaseID = purchaseID; this.stockID = stockID; this.price = price; this.quantity = quantity;}public void setPurchaseID(String u){ this.purchaseID = u;}public String getPurchaseID(){ return purchaseID;}public String getPurchaseDetailsID(){ return purchaseDetailsID ;}public double getPrice(){ return price;}public String getStockID(){ return stockID;}public int getQuantity(){ return quantity;}public void setPurchaseDetailsID(String r){ this.purchaseDetailsID = r ;}public void setPrice(double p){ this.price = p;}public void setStockID(String s){ this.stockID = s;}public void setQuantity(int q){ this.quantity = q;}控制:public Purchase selectRecord(String pID){ return purcDA.getRecord(pID);}编辑:将purchase设置为arraylist以接受该列表,我将得到此异常。Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1at java.util.ArrayList.rangeCheck(ArrayList.java:635) at java.util.ArrayList.rangeCheck(ArrayList.java:635)at java.util.ArrayList.get(ArrayList.java:411)at ui.MainPurchasingFrame$ListenerClass.actionPerformed(MainPurchasingFrame.java:183)代码:ArrayList<Purchase> purchase = purcControl.selectRecord(pID); if (purchase != null) { String pdCountStr = purchase.get(0).getPurchaseDetailsID(); String pdCountStr2 = pdCountStr.substring(2,5); int pdCount = Integer.parseInt(pdCountStr2); System.out.print(pdCount); for(int g = 0; g<pdCount;g++){ tableModel.addRow(new Object[]{ purchase.get(g).getPurchaseDetailsID(),purchase.get(g).getStockID(),purchase.get(g).getPrice(),purchase.get(g).getQuantity()}); //This is where the exception occurs. } (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 如果要从查询返回多个对象,则返回类型应为该类型的数组或集合。所以不是定义public Purchase getRecord(String pID){…}您应该将da方法定义为:public List<Purchase> getRecords(String pID) {…}在方法内部,定义一个列表对象,例如:List<Purchase> foundPurchases = new ArrayList<>();然后在发出查询并获取结果集之后,使用while循环填充它:while ( rs.next() ) { purchase = new Purchase(pID, rs.getString("purchaseID"),rs.getString("stockID"),rs.getDouble("stockprice"),rs.getInt("orderqty")); foundPurchases.add( purchase );}然后,在完成并结束对账单后,您应该返回foundpurchases:return foundPurchases;当然,调用代码应该期望接收购买的List而不是购买,然后迭代并显示它。关于你编辑过的部分。你有几件事做得不对。首先,你不必去购买记录里面看看有多少记录。如果没有,列表将是空的。如果有1,它的大小是1,如果有2,它的大小是2。第二,实际上不需要知道有多少元素,因为可以使用列表的迭代器在简单的for循环中遍历列表:ArrayList<Purchase> purchaseList = purcControl.selectRecord(pID);for ( Purchase purchase : purchaseList ) { …}实际上,您不必使用get。变量purchase中有当前的个人购买(注意,我将原始变量的名称更改为显示它是列表而不是购买的名称),您可以直接使用它。还要注意,您不需要检查空值。按照我编写它的方式,da方法总是返回对列表的引用,即使它是一个空列表。循环总是将一个实际的new Purchase(…)添加到列表中,这样列表的项也永远不会为空。不过,有一件事:从错误的外观来看,当details id说应该有两行时,似乎只有一行。直接在数据库中检查查询,确保实际上有两条记录。如果希望在未找到任何内容时显示错误,则应使用if语句检查列表是否为空。这意味着根本没有返回任何记录。if ( purchasedList.isEmpty() ) { // Display error dialog} else { // Do the for loop to fill the rows} (adsbygoogle = window.adsbygoogle || []).push({});