Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 遍历对象的arraylist并返回每个类属性_Java - Fatal编程技术网

Java 遍历对象的arraylist并返回每个类属性

Java 遍历对象的arraylist并返回每个类属性,java,Java,我创建了五个类->一般数据、材料数据、重量和尺寸、技术数据、后勤数据。所有类都有一些属性。我还创建了一个类Material,其构造函数有五个对象属性: package com.mmdmanager.others; public class Material { private GeneralData generalData; private MaterialData materialData; private WeigthsAndDimensions weigthsAn

我创建了五个类->一般数据、材料数据、重量和尺寸、技术数据、后勤数据。所有类都有一些属性。我还创建了一个类Material,其构造函数有五个对象属性:

package com.mmdmanager.others;

public class Material {
    private GeneralData generalData;
    private MaterialData materialData;
    private WeigthsAndDimensions weigthsAndDimensions;
    private TechnicalData technicalData;
    private LogisticData logisticData;

    public Material(GeneralData generalData, MaterialData materialData, WeigthsAndDimensions weigthsAndDimensions, TechnicalData technicalData, LogisticData logisticData) {
        this.generalData = generalData;
        this.materialData = materialData;
        this.weigthsAndDimensions = weigthsAndDimensions;
        this.technicalData = technicalData;
        this.logisticData = logisticData;
    }

    @Override
    public String toString() {
        return generalData + "," + materialData + "," + weigthsAndDimensions + "," + technicalData + "," + logisticData;
    }
}
我的应用程序创建一个“Material”类的对象,并将所有这些对象放入arraylist:

Material material = new Material(generalData, materialData, weigthsAndDimensions, technicalData, logisticData);
materialList.add(material);
我必须强制执行一个算法,该算法迭代对象“material”中包含的所有五个类的每个属性。此外,如果arraylist materialList具有多个对象,则该算法应遍历每个对象。我创建了这样一个代码:

public ArrayList<Material> getMaterialList(ArrayList<Material> materialList, GeneralData generalData, MaterialData materialData, WeigthsAndDimensions weigthsAndDimensions, TechnicalData technicalData, LogisticData logisticData) {

    try {
        connection = ConnectionProvider.getConnection();
        while(!connection.isClosed()) {
            preparedStatement = connection.prepareStatement("insert into materials(material_name,product_number,user_id,request_datetime,esk_number,request_type,request_sub_type,remark,batch_number, product_hierarchy, gross_Weight, net_Weight, material_Length, material_Width, material_Height, material_Volume, Capacity_Unit_Of_Measure, inverter, POWER_SUPPLY, CEMARK, REFR_APPLICATION, REFR_MODE, REFRIGERANT_TYPE, REFRIGERANT_WEIGHT, FREQUENCY, COMPRESSOR_TYPE, PACKAGING_STYLE, SALES_OEM_PRODUCT, BUY_OEM_PRODUCT, INDOOR_OUTDOOR, DG_INDICATOR_PROFILE, SALES_BRAND, BUSINESS_PILAR, MATERIAL_SOURCE, FACTORY_NAME, DESTINATION_MARKET) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

            connection.setAutoCommit(false);
            iterator = materialList.iterator();

            while (iterator.hasNext()) {
                for (counter = 1; counter < 37; counter++) {
                    if ((counter > 0 && counter < 4) || (counter > 5 && counter < 11) || (counter == 32) || ((counter > 33 && counter < 37))) {
                        preparedStatement.setString(counter,String.valueOf(iterator.next()));
                    }
                    else if (counter == 4) {
                        preparedStatement.setTimestamp(counter, Timestamp.valueOf(String.valueOf(iterator.next())));
                    }
                    else if (counter == 5) {
                        preparedStatement.setInt(counter,Integer.valueOf(String.valueOf(iterator.next())));
                    }
                    else if ((counter > 10 && counter < 17) || (counter > 24 && counter <25)) {
                        preparedStatement.setDouble(counter, Double.valueOf(String.valueOf(iterator.next())));
                    }
                    else if ((counter > 16 && counter < 24) || (counter > 25 && counter < 32) || counter == 33) {
                        preparedStatement.setDouble(counter, Byte.valueOf(String.valueOf(iterator.next())));
                    }
                }
                preparedStatement.addBatch();
            }

            preparedStatement.executeBatch();
            connection.commit();
            connection.setAutoCommit(true);
            connection.close();
        }
    }
    catch (SQLException ex) {
        ex.printStackTrace();
        System.out.println(ex.getSQLState());
    }
    return materialList;
}
public ArrayList getMaterialList(ArrayList materialList,GeneralData GeneralData,MaterialData MaterialData,weightsanddimensions weightsanddimensions,TechnicalData TechnicalData,LogisticData LogisticData){
试一试{
connection=ConnectionProvider.getConnection();
而(!connection.isClosed()){
preparedStatement=连接。prepareStatement(“插入到材料中(材料名称、产品编号、用户id、申请日期时间、esk编号、申请类型、申请子类型、备注、批号、产品层次、毛重、净重、材料长度、材料宽度、材料高度、材料体积、容量计量单位、逆变器、电源、CEMARK、制冷剂应用、制冷剂模式、制冷剂类型、制冷剂类型)GHT、频率、压缩机类型、包装风格、销售OEM产品、购买OEM产品、室内外、DG指示器配置文件、销售品牌、业务PILAR、材料来源、工厂名称、目的地市场)值(?、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、));
connection.setAutoCommit(false);
迭代器=materialList.iterator();
while(iterator.hasNext()){
用于(计数器=1;计数器<37;计数器++){
如果((计数器>0&&counter<4)| |(计数器>5&&counter<11)| |(计数器==32)| |(计数器>33&&counter<37))){
preparedStatement.setString(计数器,String.valueOf(iterator.next());
}
否则如果(计数器==4){
setTimestamp(计数器,Timestamp.valueOf(String.valueOf(iterator.next()));
}
否则如果(计数器==5){
preparedStatement.setInt(计数器,Integer.valueOf(String.valueOf(iterator.next()));
}
如果((计数器>10和计数器<17)| |(计数器>24和计数器16和计数器<24)| |(计数器>25和计数器<32)| |计数器==33){
setDouble(计数器,Byte.valueOf(String.valueOf(iterator.next()));
}
}
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
commit();
connection.setAutoCommit(true);
connection.close();
}
}
catch(SQLException-ex){
例如printStackTrace();
System.out.println(例如getSQLState());
}
返回材料专家;
}

java.util.NoSuchElementException->当计数器等于2且无法将属性分配给preparedStatement.setString()时,发生以下错误如果迭代没有更多的元素,迭代器的下一个方法将抛出一个
NoSuchElementException
。您可以在while循环中检查迭代器
是否有next
,但在for循环中调用next,而不检查是否有下一个元素


假设您的列表只有一个元素。
hasNext
在while循环中返回
true
,您输入for循环。在for循环中,您检索第一个元素,将计数器增加到2,然后尝试检索下一个元素(它不存在)这导致了
NoSuchElementException

是的,我知道我的sql语句很荒谬:)我稍后会在一个过程中交换它。这里的问题是什么?您是否在寻找更好的方法来构造查询和设置参数?(a)为什么数据库中只有一个平面表,而Java中却有一个对象层次结构?(b) 你的问题到底是什么?(c) 为什么要为servlet添加标签?(d) 从JSR 310和JDBC 4.2开始,
java.sql.Timestamp
在几年前被
java.time.Instant
类取代。问题是:如何检索名为“material”的对象中包含的类的每个类属性,哪个包含在arraylist中?您应该将任何代码包装在backticks``中,以便将其格式化为代码。它有助于在快速通读时区分普通文本和代码,并澄清您的答案。