1 package org.apache.ojb.broker.accesslayer; 2 3 17 18 import java.sql.ResultSetMetaData ; 19 import java.sql.SQLException ; 20 21 import org.apache.ojb.broker.PersistenceBrokerException; 22 import org.apache.ojb.broker.core.PersistenceBrokerImpl; 23 import org.apache.ojb.broker.metadata.FieldDescriptor; 24 import org.apache.ojb.broker.metadata.JdbcTypesHelper; 25 import org.apache.ojb.broker.query.ReportQuery; 26 27 33 public class ReportQueryRsIterator extends RsIterator 34 { 35 36 private int m_attributeCount; 37 private int[] m_jdbcTypes; 38 39 42 public ReportQueryRsIterator(RsQueryObject queryObject, PersistenceBrokerImpl broker) 43 { 44 super(queryObject, broker); 45 try 46 { 47 ReportQuery q = (ReportQuery)queryObject.getQuery(); 50 m_attributeCount = q.getAttributes().length; 51 52 init_jdbcTypes(); 53 } 54 catch (SQLException e) 55 { 56 releaseDbResources(); 57 throw new PersistenceBrokerException(e); 58 } 59 } 60 61 65 private void init_jdbcTypes() throws SQLException 66 { 67 ReportQuery q = (ReportQuery) getQueryObject().getQuery(); 68 m_jdbcTypes = new int[m_attributeCount]; 69 70 if (q.getJdbcTypes() != null) 72 { 73 m_jdbcTypes = q.getJdbcTypes(); 74 } 75 else 76 { 77 ResultSetMetaData rsMetaData = getRsAndStmt().m_rs.getMetaData(); 78 for (int i = 0; i < m_attributeCount; i++) 79 { 80 m_jdbcTypes[i] = rsMetaData.getColumnType(i + 1); 81 } 82 83 } 84 } 85 86 87 92 protected Object getObjectFromResultSet() throws PersistenceBrokerException 93 { 94 Object [] result = new Object [m_attributeCount]; 95 ReportQuery q =(ReportQuery) getQueryObject().getQuery(); 96 97 for (int i = 0; i < m_attributeCount; i++) 98 { 99 try 100 { 101 int jdbcType = m_jdbcTypes[i]; 102 String attr = q.getAttributes()[i]; 103 FieldDescriptor fld = (FieldDescriptor) q.getAttributeFieldDescriptors().get(attr); 104 Object val =JdbcTypesHelper.getObjectFromColumn(getRsAndStmt().m_rs, new Integer (jdbcType), i + 1); 105 106 if (fld != null && fld.getFieldConversion() != null) 107 { 108 val = fld.getFieldConversion().sqlToJava(val); 109 } 110 result[i] = val; 111 } 112 catch (SQLException e) 113 { 114 throw new PersistenceBrokerException(e); 115 } 116 } 117 return result; 118 } 119 120 121 } 122 | Popular Tags |