lundi 18 mars 2019

ResultSetMetaData containing String requires a switch stmt rather than a series of ifs. Why is that?

I have 3 different CRITERIA_TYPES. I, X & XA. I have the code below to set Booleans dependant on the value of ColumnValueS which is retrieved CHAR(3) column in MYSQL. if (columnValueS.toString().equals("I")) works as i would expect. However it then proceeds to enter the "XA" condition check as well when the value of ColumnValueS is "I"!

If I replace with a switch stmt it works (see below)

Why is this??

            while(true) {
                Boolean include = false, absolute = false;
                for (int i = 1; i <= numColumns; i++) {
                    String columnValueS = null;
                    String columnName = rsMetaData.getColumnName(i); // Iterate through column names

                    if (rsMetaData.getColumnType(i) == java.sql.Types.CHAR){ 
                        columnValueS = rs.getString(columnName);
                    }


                    switch (columnName.toUpperCase())
                    {
                    case "CRITERIA_TYPE":

                        System.out.println(" columnName " + columnName + "columnValueS " + columnValueS);
                        System.out.println(" columnValueS.len " + columnValueS.length());
                        if (columnValueS.toString().equals("I"))
                        {
                            System.out.println("columnValueS I " + columnValueS);
                            include = true;
                        }

                        if (columnValueS.trim().equals("XA"));
                        {
                            System.out.println("columnValueS XA " + columnValueS);
                            absolute = true;        
                        }
                        break;
                    case "CRITERIA_VALUE":
                        if (include)
                            inc.add(columnValueS);
                        else
                        {
                            exclusion e = new exclusion(columnValueS,absolute); 
                            excl.add(e);
                        }
                        break;
                    default: break;
                    }
                                            System.out.println("include " + include);
                                            System.out.println("absolute " + absolute);
                }

                if (!rs.next()) 
                    break;
            }

This works:

                        switch (columnValueS){
                        case "I":
                            System.out.println("Case I " + columnValueS);
                            include = true;
                            break;
                        case "X":
                            System.out.println("Case X ");
                            break;
                        case "XA":
                            System.out.println("Case XA " + columnValueS);
                            absolute = true;
                            break;
                        default: break;
                        }

Aucun commentaire:

Enregistrer un commentaire