1 package prefuse.data.io.sql; 2 3 import java.math.BigDecimal ; 4 import java.sql.Array ; 5 import java.sql.Blob ; 6 import java.sql.Clob ; 7 import java.sql.Date ; 8 import java.sql.Ref ; 9 import java.sql.ResultSet ; 10 import java.sql.ResultSetMetaData ; 11 import java.sql.SQLException ; 12 import java.sql.Time ; 13 import java.sql.Timestamp ; 14 import java.sql.Types ; 15 16 import prefuse.data.Table; 17 18 25 public class DefaultSQLDataHandler implements SQLDataHandler { 26 27 private boolean m_ignoreUnknownTypes; 28 29 31 34 public DefaultSQLDataHandler() { 35 this(true); 36 } 37 38 43 public DefaultSQLDataHandler(boolean ignoreUnknownTypes) { 44 m_ignoreUnknownTypes = ignoreUnknownTypes; 45 } 46 47 49 53 public void setIgnoreUnknownTypes(boolean ignore) { 54 m_ignoreUnknownTypes = ignore; 55 } 56 57 62 public boolean isIgnoreUnknownTypes() { 63 return m_ignoreUnknownTypes; 64 } 65 66 68 71 public void process(Table t, int trow, ResultSet rset, int rcol) 72 throws SQLException 73 { 74 ResultSetMetaData metadata = rset.getMetaData(); 75 String field = metadata.getColumnName(rcol); 76 int type = metadata.getColumnType(rcol); 77 78 switch ( type ) { 79 case Types.ARRAY: 80 t.set(trow, field, rset.getArray(rcol)); 81 break; 82 83 case Types.BIGINT: 84 t.setLong(trow, field, rset.getLong(rcol)); 85 break; 86 87 case Types.BINARY: 88 case Types.LONGVARBINARY: 89 case Types.VARBINARY: 90 t.set(trow, field, rset.getBytes(rcol)); 91 break; 92 93 case Types.BIT: 94 case Types.BOOLEAN: 95 t.setBoolean(trow, field, rset.getBoolean(rcol)); 96 break; 97 98 case Types.BLOB: 99 t.set(trow, field, rset.getBlob(rcol)); 100 break; 101 102 case Types.CHAR: 103 case Types.LONGVARCHAR: 104 case Types.VARCHAR: 105 t.setString(trow, field, rset.getString(rcol)); 106 break; 107 108 case Types.CLOB: 109 t.set(trow, field, rset.getClob(rcol)); 110 break; 111 112 case Types.DATE: 113 t.setDate(trow, field, rset.getDate(rcol)); 114 break; 115 116 case Types.DECIMAL: 117 case Types.DOUBLE: 118 case Types.FLOAT: 119 case Types.NUMERIC: 120 t.setDouble(trow, field, rset.getDouble(rcol)); 121 break; 122 123 case Types.INTEGER: 124 case Types.SMALLINT: 125 case Types.TINYINT: 126 t.setInt(trow, field, rset.getInt(rcol)); 127 break; 128 129 case Types.JAVA_OBJECT: 130 t.set(trow, field, rset.getObject(rcol)); 131 break; 132 133 case Types.REAL: 134 t.setFloat(trow, field, rset.getFloat(rcol)); 135 break; 136 137 case Types.REF: 138 t.set(trow, field, rset.getRef(rcol)); 139 break; 140 141 case Types.TIME: 142 t.setDate(trow, field, rset.getTime(rcol)); 143 break; 144 145 case Types.TIMESTAMP: 146 t.setDate(trow, field, rset.getTimestamp(rcol)); 147 break; 148 149 case Types.DATALINK: 150 case Types.DISTINCT: 151 case Types.NULL: 152 case Types.OTHER: 153 case Types.STRUCT: 154 default: 155 if ( !m_ignoreUnknownTypes ) { 156 t.set(trow, field, rset.getObject(rcol)); 157 } 158 break; 159 } 160 } 161 162 165 public Class getDataType(String columnName, int sqlType) { 166 switch ( sqlType ) { 167 case Types.ARRAY: 168 return Array .class; 169 170 case Types.BIGINT: 171 return long.class; 172 173 case Types.BINARY: 174 case Types.LONGVARBINARY: 175 case Types.VARBINARY: 176 return byte[].class; 177 178 case Types.BIT: 179 case Types.BOOLEAN: 180 return boolean.class; 181 182 case Types.BLOB: 183 return Blob .class; 184 185 case Types.CHAR: 186 case Types.LONGVARCHAR: 187 case Types.VARCHAR: 188 return String .class; 189 190 case Types.CLOB: 191 return Clob .class; 192 193 case Types.DATE: 194 return Date .class; 195 196 case Types.DECIMAL: 197 case Types.NUMERIC: 198 return BigDecimal .class; 199 200 case Types.DOUBLE: 201 case Types.FLOAT: 202 return double.class; 203 204 case Types.INTEGER: 205 case Types.SMALLINT: 206 case Types.TINYINT: 207 return int.class; 208 209 case Types.JAVA_OBJECT: 210 return Object .class; 211 212 case Types.REAL: 213 return float.class; 214 215 case Types.REF: 216 return Ref .class; 217 218 case Types.TIME: 219 return Time .class; 220 221 case Types.TIMESTAMP: 222 return Timestamp .class; 223 224 case Types.DATALINK: 225 case Types.DISTINCT: 226 case Types.NULL: 227 case Types.OTHER: 228 case Types.STRUCT: 229 default: 230 if ( !m_ignoreUnknownTypes ) { 231 return Object .class; 232 } else { 233 return null; 234 } 235 } 236 } 237 238 } | Popular Tags |