1 package SQLite.JDBC2z; 2 3 import java.sql.*; 4 5 public class JDBCResultSetMetaData implements java.sql.ResultSetMetaData { 6 7 private JDBCResultSet r; 8 9 public JDBCResultSetMetaData(JDBCResultSet r) { 10 this.r = r; 11 } 12 13 public String getCatalogName(int column) throws java.sql.SQLException { 14 return null; 15 } 16 17 public String getColumnClassName(int column) throws java.sql.SQLException { 18 column--; 19 if (r != null && r.tr != null) { 20 if (column < 0 || column >= r.tr.ncolumns) { 21 return null; 22 } 23 if (r.tr instanceof TableResultX) { 24 switch (((TableResultX) r.tr).sql_type[column]) { 25 case Types.SMALLINT: return "java.lang.Short"; 26 case Types.INTEGER: return "java.lang.Integer"; 27 case Types.REAL: 28 case Types.DOUBLE: return "java.lang.Double"; 29 case Types.FLOAT: return "java.lang.Float"; 30 case Types.BIGINT: return "java.lang.Long"; 31 case Types.DATE: return "java.sql.Date"; 32 case Types.TIME: return "java.sql.Time"; 33 case Types.TIMESTAMP: return "java.sql.Timestamp"; 34 case Types.BINARY: 35 case Types.VARBINARY: return "[B"; 36 /* defaults to varchar below */ 37 } 38 } 39 return "java.lang.String"; 40 } 41 return null; 42 } 43 44 public int getColumnCount() throws java.sql.SQLException { 45 if (r != null && r.tr != null) { 46 return r.tr.ncolumns; 47 } 48 return 0; 49 } 50 51 public int getColumnDisplaySize(int column) throws java.sql.SQLException { 52 return 0; 53 } 54 55 public String getColumnLabel(int column) throws java.sql.SQLException { 56 column--; 57 String c = null; 58 if (r != null && r.tr != null) { 59 if (column < 0 || column >= r.tr.ncolumns) { 60 return c; 61 } 62 c = r.tr.column[column]; 63 } 64 return c; 65 } 66 67 public String getColumnName(int column) throws java.sql.SQLException { 68 column--; 69 String c = null; 70 if (r != null && r.tr != null) { 71 if (column < 0 || column >= r.tr.ncolumns) { 72 return c; 73 } 74 c = r.tr.column[column]; 75 if (c != null) { 76 int i = c.indexOf('.'); 77 if (i > 0) { 78 return c.substring(i + 1); 79 } 80 } 81 } 82 return c; 83 } 84 85 public int getColumnType(int column) throws java.sql.SQLException { 86 column--; 87 if (r != null && r.tr != null) { 88 if (column >= 0 && column < r.tr.ncolumns) { 89 if (r.tr instanceof TableResultX) { 90 return ((TableResultX) r.tr).sql_type[column]; 91 } 92 return Types.VARCHAR; 93 } 94 } 95 throw new SQLException("bad column index"); 96 } 97 98 public String getColumnTypeName(int column) throws java.sql.SQLException { 99 column--; 100 if (r != null && r.tr != null) { 101 if (column >= 0 && column < r.tr.ncolumns) { 102 if (r.tr instanceof TableResultX) { 103 switch (((TableResultX) r.tr).sql_type[column]) { 104 case Types.SMALLINT: return "smallint"; 105 case Types.INTEGER: return "integer"; 106 case Types.DOUBLE: return "double"; 107 case Types.FLOAT: return "float"; 108 case Types.BIGINT: return "bigint"; 109 case Types.DATE: return "date"; 110 case Types.TIME: return "time"; 111 case Types.TIMESTAMP: return "timestamp"; 112 case Types.BINARY: return "binary"; 113 case Types.VARBINARY: return "varbinary"; 114 case Types.REAL: return "real"; 115 /* defaults to varchar below */ 116 } 117 } 118 return "varchar"; 119 } 120 } 121 throw new SQLException("bad column index"); 122 } 123 124 public int getPrecision(int column) throws java.sql.SQLException { 125 return 0; 126 } 127 128 public int getScale(int column) throws java.sql.SQLException { 129 return 0; 130 } 131 132 public String getSchemaName(int column) throws java.sql.SQLException { 133 return null; 134 } 135 136 public String getTableName(int column) throws java.sql.SQLException { 137 column--; 138 String c = null; 139 if (r != null && r.tr != null) { 140 if (column < 0 || column >= r.tr.ncolumns) { 141 return c; 142 } 143 c = r.tr.column[column]; 144 if (c != null) { 145 int i = c.indexOf('.'); 146 if (i > 0) { 147 return c.substring(0, i); 148 } 149 c = null; 150 } 151 } 152 return c; 153 } 154 155 public boolean isAutoIncrement(int column) throws java.sql.SQLException { 156 return false; 157 } 158 159 public boolean isCaseSensitive(int column) throws java.sql.SQLException { 160 return false; 161 } 162 163 public boolean isCurrency(int column) throws java.sql.SQLException { 164 return false; 165 } 166 167 public boolean isDefinitelyWritable(int column) 168 throws java.sql.SQLException { 169 return true; 170 } 171 172 public int isNullable(int column) throws java.sql.SQLException { 173 return columnNullableUnknown; 174 } 175 176 public boolean isReadOnly(int column) throws java.sql.SQLException { 177 return false; 178 } 179 180 public boolean isSearchable(int column) throws java.sql.SQLException { 181 return true; 182 } 183 184 public boolean isSigned(int column) throws java.sql.SQLException { 185 return false; 186 } 187 188 public boolean isWritable(int column) throws java.sql.SQLException { 189 return true; 190 } 191 192 int findColByName(String columnName) throws java.sql.SQLException { 193 String c = null; 194 if (r != null && r.tr != null) { 195 for (int i = 0; i < r.tr.ncolumns; i++) { 196 c = r.tr.column[i]; 197 if (c != null) { 198 if (c.compareToIgnoreCase(columnName) == 0) { 199 return i + 1; 200 } 201 int k = c.indexOf('.'); 202 if (k > 0) { 203 c = c.substring(k + 1); 204 if (c.compareToIgnoreCase(columnName) == 0) { 205 return i + 1; 206 } 207 } 208 } 209 c = null; 210 } 211 } 212 throw new SQLException("column " + columnName + " not found"); 213 } 214 215 public <T> T unwrap(java.lang.Class<T> iface) throws SQLException { 216 throw new SQLException("unsupported"); 217 } 218 219 public boolean isWrapperFor(java.lang.Class iface) throws SQLException { 220 return false; 221 } 222 223 } 224