Diff for /FM2SQL/src/DBBean.java between versions 1.2 and 1.3

version 1.2, 2005/04/19 10:49:05 version 1.3, 2005/09/06 10:53:16
Line 460  public class DBBean Line 460  public class DBBean
    */     */
   public Vector[] getQueryData(String query, int maxHits) throws SQLException, ParseException,Exception    public Vector[] getQueryData(String query, int maxHits) throws SQLException, ParseException,Exception
   {    {
     long timeStart = System.currentTimeMillis();      return getQueryData(query,null,maxHits);  
     ResultSet resultSet = null;  
     if (connection == null)  
     {  
       Vector[] noData = new Vector[2];  
       //System.out.println("Exception occured");  
       noData[1] = new Vector();  
       Vector vec2 = new Vector();  
       noData[0] = new Vector();  
       vec2.add("no Connection available");  
       noData[0].add(vec2);  
       noData[1].add("Exception occured! No results available");  
       //noData[1].add("no Results were produced");  
   
       return noData;  
     }  
     resultSet = makeQuery(query, maxHits);  
     metaData = resultSet.getMetaData();  
     int columnCount = metaData.getColumnCount();  
   
     Vector tableData = new Vector();  
     while (resultSet.next())  
     {  
       //System.out.println("datatype "+(Types.LONGVARCHAR ==metaData.getColumnType(3)));  
       Vector tableRow = new Vector(), m_columnClasses = new Vector();  
       for (int i = 1; i <= columnCount; i++)  
       {  
         // repeating fields and fields from related databases may contain  
         // multliple data values; the data values are stored using  
         // a Vector which is then added to the tableRow  
         //      if (metaData instanceof ResultSetMetaDataExt)  
         if ((metaData instanceof ResultSetMetaDataExt) && (((ResultSetMetaDataExt) metaData).isRelated(i) || ((ResultSetMetaDataExt) metaData).isRepeating(i)))  
         {  
           //System.out.println("Related fields");  
           // retrieve the repeating or related field contents as a  
           // com.fmi.jdbc.Array via the ResultSet.getObject method  
           com.fmi.jdbc.Array array = (com.fmi.jdbc.Array) resultSet.getObject(i);  
           //            create a Vector for storing all of the data values  
           ArrayList columnData = new ArrayList();  
   
           try  
           {  
   
             // call the Array.getStringArray method since the data will  
             // only be displayed  
             Object[] fieldData = (Object[]) array.getArray();  
   
             if (fieldData != null)  
             {  
               // add each value to the Vector  
               for (int j = 0; j < fieldData.length; j++)  
               {  
                 if (fieldData[j] != null)  
                   columnData.add(fieldData[j]);  
               }  
   
             }  
           } catch (Exception e)  
           {  
             //System.out.println(e);  
           }  
           if (columnData.isEmpty())  
             tableRow.add(null);  
           else  
             tableRow.addElement(columnData);  
           //System.out.println(columnData);  
           //System.out.println("Related fields"+columnData.size()+" "+tableRow.size());  
   
           m_columnClasses.addElement(java.util.Vector.class);  
         } else if (metaData.getColumnType(i) == Types.LONGVARBINARY)  
         {  
           // use the ResultSet.getObject method for retrieving images  
           // from FileMaker Pro container fields; the ResultSet.getObject  
           // method returns a java.awt.Image object for FileMaker Pro  
           // container fields  
           try  
           {  
   
             tableRow.addElement(resultSet.getObject(i));  
           } catch (Exception e)  
           {  
             // TODO Auto-generated catch block  
             //e.printStackTrace();  
             tableRow.addElement(null);  
           }  
           //tableRow.addElement("Picture ignored");  
           m_columnClasses.addElement(java.awt.Image.class);  
         } else if (metaData.getColumnType(i) == Types.TIME)  
         {  
           // use the ResultSet.getObject method for retieving images  
           // from FileMaker Pro container fields; the ResultSet.getObject  
           // method returns a java.awt.Image object for FileMaker Pro  
           // container fields  
           try  
           {  
             tableRow.addElement(resultSet.getTime(i).toString());  
             m_columnClasses.addElement(java.sql.Time.class);  
           } catch (Exception e)  
           {  
   
             String value = resultSet.getString(i);  
             if (value != null)  
             {  
               //System.out.println("SQLTime new "+Time.valueOf("17:00:00").toString());  
               int index = 0;  
               for (int j = 0; j < value.length(); ++j)  
               {  
                 if (!Character.isLetter(value.charAt(j)))  
                   index = j + 1;  
                 else  
                   break;  
               }  
   
               tableRow.addElement(value.substring(0, index));  
               //m_columnClasses.addElement(java.sql.Time.class);  
             } else  
               tableRow.add(null);  
             m_columnClasses.addElement(String.class);  
           } // to catch  
   
         } else if (metaData.getColumnType(i) == Types.DATE)  
         {  
           // use the ResultSet.getObject method for retieving images  
           // from FileMaker Pro container fields; the ResultSet.getObject  
           // method returns a java.awt.Image object for FileMaker Pro  
           // container fields  
   
           try  
           {  
             tableRow.addElement(resultSet.getDate(i));  
   
           } catch (Exception e)  
           {  
             // work around for parse bug in FM JDBC Driver   
             // for dates of format dd-mm-yyyy  
             String date = resultSet.getString(i);  
             date = date.replace('-', '.');  
             java.text.DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN);  
             java.util.Date d = dateFormat.parse(date);  
             // Calendar cal=Calendar.getInstance(Locale.GERMAN);  
             // cal.setTime(d);  
             // date=(cal.get(Calendar.YEAR))+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DATE);  
             tableRow.addElement(new java.sql.Date(d.getTime()));  
             System.out.println("Date " + date);  
           }  
         } else if (metaData.getColumnTypeName(i) == "NUMBER")  
         {  
           // use the ResultSet.getObject method for retieving images  
           // from FileMaker Pro container fields; the ResultSet.getObject  
           // method returns a java.awt.Image object for FileMaker Pro  
           // container fields  
           try  
           {  
             Double value =new Double(resultSet.getDouble(i));  
             
             
           // tableRow.addElement(new Double(resultSet.getDouble(i)));  
           String tVal =value.toString();  
           tVal = tVal.substring(tVal.indexOf('.')+1);  
           boolean checkMe = tVal.length()==1&&tVal.equals("0");  
         //  System.out.println("check was"+checkMe+" "+tVal);  
           if(checkMe)  
           tableRow.addElement(new Integer(value.intValue()));  
           else            
           tableRow.addElement(value);  
   
           } catch (Exception e)  
           {  
   
             StringBuffer number = new StringBuffer();  
             String value = resultSet.getString(i);  
             System.out.println(value);  
             for (int c = 0; c < value.length(); ++c)  
             {  
               if (Character.isDigit(value.charAt(c)))  
               {  
                 number.append(value.charAt(c));  
               }  
             }  
             if (number.length() > 0)  
             {  
               tableRow.addElement(null);  
               m_columnClasses.addElement(Double.class);  
             } else  
               tableRow.addElement(null);  
           }  
         } else  
         {  
           // all other field values are retrieved as strings and  
           // added to the tableRow Vector  
           // if(resultSet.getObject(i)!=null) System.out.println(resultSet.getObject(i));  
           try  
           {  
             String utf8 = null;  
             if (metaData instanceof ResultSetMetaDataExt)  
             {  
             byte[] b = resultSet.getBytes(i);  
               
             if (metaData instanceof ResultSetMetaDataExt)  
               utf8 = (b == null) ? null : new String(b);  
             else  
               utf8 = (b == null) ? null : new String(b, "UTF-8");  
             }  
              else  
               utf8=resultSet.getString(i);  
                   
                 //  utf8 = (utf8 == null) ? null : new String(utf8.getBytes("UTF-8"), "UTF-8");  
             tableRow.addElement(utf8);  
               
           } catch (Exception e)  
           {  
             System.out.println("Hey I Got an error" + e);  
             e.printStackTrace();  
           }  
           m_columnClasses.addElement(java.lang.String.class);  
         }  
       }  
   
       // add the tableRow Vector to the tableData Vector  
       tableData.addElement(tableRow);  
     }  
   
     // retrieve the column names from the result set; the column names  
     // are used for the table header  
     columnNames = new Vector();  
   
     for (int i = 1; i <= columnCount; i++)  
       columnNames.addElement(metaData.getColumnName(i));  
     Vector data[] = new Vector[2];  
     data[0] = tableData;  
     data[1] = columnNames;  
     System.out.println("Rows " + tableData.size() + " " + ((Vector) tableData.get(0)).size());  
     long timeEnd = System.currentTimeMillis();  
     System.out.println("Time needed for query and data retrieval " + (timeEnd - timeStart) + " ms");  
     return data;  
   }    }
   
   public Vector getColumnNames()    public Vector getColumnNames()

Removed from v.1.2  
changed lines
  Added in v.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>