1:/*
   2: * QueryBean.java
   3: *
   4: * QueryBean is used to execute and return the results of a query on behalf of
   5: * the QueryPortlet application.
   6: * This bean is far from robust.  Purely for demonstration of the portlet...
   7: *
   8: * Created on May 15, 2004, 3:59 PM
   9: */
  10:import java.sql.*;
  11:import java.util.*;
  12:import org.apache.commons.logging.Log;
  13:import org.apache.commons.logging.LogFactory;
  14:import config.DbProps;
  15:
  16:/**
  17: *
  18: * @author  Michael Klaene
  19: */
  20:public class QueryBean {
  21:    
  22:    /** Designated Logger for this class. */
  23:    private final Log log = LogFactory.getLog(getClass().getName());
  24:    
  25:    List queryData;
  26:    String[] queryColumns;
  27:    
  28:    public QueryBean() {
  29:        try{
  30:            Class.forName(DbProps.DRIVER);
  31:        }
  32:        catch(Exception e){
  33:            throw new RuntimeException(e);
  34:        }
  35:    }
  36:    
  37:    /**Returns a query's results. */
  38:    public void executeQuery(String queryString){
  39:        Connection conn = null;
  40:        PreparedStatement psmt  = null;
  41:        ResultSet rs    = null;
  42:        ResultSetMetaData rsm = null;
  43:        
  44:        log.info("Executing QueryBean's executeQuery method. (New SQL to parse)");
  45:        try {
  46:            conn =
  47:            DriverManager.getConnection(DbProps.URL,DbProps.USERNAME,DbProps.PASSWORD);
  48:            psmt = conn.prepareStatement(queryString);
  49:            
  50:            if(log.isDebugEnabled()) {
  51:                log.debug("QueryBean.executeQuery. queryString  : " + queryString);
  52:            }
  53:            
  54:            rs = psmt.executeQuery();
  55:            
  56:            rsm = rs.getMetaData();
  57:            int sqlType = 0;
  58:            int colCount = rsm.getColumnCount();
  59:            
  60:            this.queryData = new ArrayList(); //All data are Strings.
  61:            while (rs.next()) {
  62:                String[] record = new String[colCount];
  63:                this.queryColumns = new String[colCount];
  64:                
  65:                for (int i = 1; i <= colCount;i++) {
  66:                    queryColumns[i -1] = rsm.getColumnLabel(i);
  67:                    sqlType = rsm.getColumnType(i);
  68:                    
  69:                    //For this simple example, I'm only checking 2 types...
  70:                    switch(sqlType) {
  71:                        case java.sql.Types.INTEGER:
  72:                            record[i -1] = new Integer(rs.getInt(i)).toString();
  73:                            break;
  74:                        case java.sql.Types.VARCHAR:
  75:                            record[i -1] = rs.getString(i);
  76:                            break;
  77:                    }
  78:                }
  79:                
  80:                queryData.add(record);
  81:            }
  82:        }
  83:        catch (Exception e) {
  84:            throw new RuntimeException(e);
  85:        }
  86:    }
  87:    
  88:    /**
  89:     * Getter for property queryData.
  90:     * @return Value of property queryData.
  91:     */
  92:    public java.util.List getQueryData() {
  93:        return queryData;
  94:    }
  95:    
  96:    /**
  97:     * Setter for property queryData.
  98:     * @param queryData New value of property queryData.
  99:     */
 100:    public void setQueryData(java.util.List queryData) {
 101:        this.queryData = queryData;
 102:    }
 103:    
 104:    /**
 105:     * Getter for property queryColumns.
 106:     * @return Value of property queryColumns.
 107:     */
 108:    public java.lang.String[] getQueryColumns() {
 109:        return this.queryColumns;
 110:    }
 111:    
 112:    /**
 113:     * Setter for property queryColumns.
 114:     * @param queryColumns New value of property queryColumns.
 115:     */
 116:    public void setQueryColumns(java.lang.String[] queryColumns) {
 117:        this.queryColumns = queryColumns;
 118:    }
 119:    
 120:}