Это больше связано с типом значения столбца, а не с тем, как выбран столбец. Эта информация хранится в DatabaseMetaData#getTypeInfo()
. Столбец SEARCHABLE
может возвращать либо DatabaseMetaData.typePredNone
(без возможности поиска), либо другие значения.
9: ПОИСК short => вы можете использовать "WHERE"
в зависимости от типа:
typePredNone
- без поддержки
typePredChar
- поддерживается только с WHERE .. LIKE
typePredBasic
- Поддерживается, кроме WHERE .. LIKE
typeSearchable
- поддерживается для всех WHERE ..
Вот фрагмент, который отображает эту информацию:
DatabaseMetaData databaseMetaData = connection.getMetaData();
ResultSet typeInfo = databaseMetaData.getTypeInfo();
System.out.println("type name | data type | searchable");
System.out.println("-------------------------------+-----------+------------");
while (typeInfo.next()) {
String typeName = typeInfo.getString("TYPE_NAME");
int dataType = typeInfo.getInt("DATA_TYPE");
boolean searchable = typeInfo.getShort("SEARCHABLE") != DatabaseMetaData.typePredNone;
System.out.printf("%-30s | %-9d | %-9s%n", typeName , dataType, searchable);
}
При подключении к PostgreSQL 8.4 это выглядит примерно так:
type name | data type | searchable
-------------------------------+-----------+------------
bool | -7 | true
bytea | -2 | true
char | 1 | true
name | 12 | true
int8 | -5 | true
bigserial | -5 | true
int2 | 5 | true
int2vector | 1111 | true
int4 | 4 | true
serial | 4 | true
regproc | 1111 | true
text | 12 | true
(*snip*, it were about 270 rows, all TRUE by the way)
data type
корректируется с ResultSetMetaData#getColumnType()
.