Dies hängt mehr mit dem Typ des Spaltenwerts zusammen, nicht damit, wie die Spalte ausgewählt wird. Diese Informationen sind in DatabaseMetaData#getTypeInfo()
gespeichert. Die Spalte SEARCHABLE
kann entweder DatabaseMetaData.typePredNone
(nicht durchsuchbar) oder andere Werte zurückgeben.
9: SEARCHABLE short => können Sie "WHERE"
basierend auf diesem Typ verwenden:
typePredNone
- Keine Unterstützung
typePredChar
- Nur mit WHERE .. LIKE
unterstützt
typePredBasic
- Unterstützt außer für WHERE .. LIKE
typeSearchable
- Unterstützt für alle WHERE ..
Hier ist ein Ausschnitt, der diese Informationen anzeigt:
DatabaseMetaData databaseMetaData = connection.getMetaData();
ResultSet typeInfo = databaseMetaData.getTypeInfo();
System.out.println("Typname | Datentyp | durchsuchbar");
System.out.println("-------------------------------+-----------+------------");
while (typeInfo.next()) {
String typeName = typeInfo.getString("TYPE_NAME");
int dataType = typeInfo.getInt("DATA_TYPE");
boolean durchsuchbar = typeInfo.getShort("SEARCHABLE") != DatabaseMetaData.typePredNone;
System.out.printf("%-30s | %-9d | %-9s%n", typeName , dataType, durchsuchbar);
}
Dies ergibt bei einer PostgreSQL 8.4-Verbindung etwas Ähnliches wie folgt:
Typname | Datentyp | durchsuchbar
-------------------------------+-----------+------------
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
(\*Ausschnitt\*, ca. 270 Zeilen, alle WAHR übrigens)
Der Datentyp
korreliert mit ResultSetMetaData#getColumnType()
.