gpt4 book ai didi

java - isSearchable 什么时候会为 Oracle JDBC 列返回 false?

转载 作者:行者123 更新时间:2023-11-30 09:55:10 30 4
gpt4 key购买 nike

在什么情况下,对 Oracle 数据库调用 java.sql.ResultSetMetaData.isSearchable(int col) 会返回 false? documentation因为该方法并没有真正回答问题:

"Indicates whether the designated column can be used in a where clause."

我只能想到一种情况 - 当该列是聚合函数的结果时(在这种情况下,它必须是 HAVING 过滤器的一部分,而不是 WHERE过滤器)。

还有其他情况吗?

最佳答案

这与列值的类型有关,而不是列的选择方式。此信息存储在 DatabaseMetaData#getTypeInfo() 中. SEARCHABLE 列可以返回 DatabaseMetaData.typePredNone (不可搜索)或其他值。

9: SEARCHABLE short => can you use "WHERE" based on this type:

  • typePredNone - No support
  • typePredChar - Only supported with WHERE .. LIKE
  • typePredBasic - Supported except for WHERE .. LIKE
  • typeSearchable - Supported for all 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)

数据类型ResultSetMetaData#getColumnType() 相关.

关于java - isSearchable 什么时候会为 Oracle JDBC 列返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952061/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com