【问题标题】:How can I make a case-insensitive pattern for java.sql.DatabaseMetaData#getTables?如何为 java.sql.DatabaseMetaData#g​​etTables 创建不区分大小写的模式?
【发布时间】:2014-05-14 20:47:03
【问题描述】:

我正在使用 java.sql.DatabaseMetaData#getTablesthis JavaDoc

如果我想查找表格并忽略大小写,我应该为tableNamePattern 使用什么?这种模式格式记录在哪里?

我可以在这里制作一个匹配“loinc”、“LOINC”或“Loinc”的图案吗?

【问题讨论】:

  • ILIKE 不区分大小写。或者使用lower()
  • 如果我使用lower() 并且表名真的是“LOINC”,那么它将不匹配。另请注意,上面显示的查询是由getTables 生成的。我可以控制的唯一变量是传递给 getTables 的参数
  • 您在大小上都使用lower(),等等。请注意,我将其作为评论发布,因为这只是一个建议,而不是完整的答案。
  • 我认为LIKE 中没有任何不区分大小写的通配符或修饰符。所以不,我认为你不能,你需要一个带有标志的完整正则表达式。一种选择可能是直接查询information_schema

标签: java sql case-insensitive


【解决方案1】:

我可以在这里制作一个匹配“loinc”、“LOINC”或 “隆隆”?

一般来说:否。 JDBC API 不提供对特定表执行不区分大小写的查询的方法。

实际上这通常不是问题,因为大多数 DBMS 只使用大写的表名。 ANSI SQL 标准要求将 SQL 查询中的表名转换为大写,除非它们被引用(使用 ")。由于不断引用是相当乏味的,大多数开发人员和大多数软件都使用大写的表名。所以在大多数情况下,你可以假设表名是大写的,并使用大写的模式。

如果确实需要不区分大小写的查询,可以指定nulltableNamePattern(表示不按名称过滤),然后遍历所有结果并检查Java 代码中的表名。请注意,对于具有大量表的数据库,这可能会很慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2017-06-12
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    相关资源
    最近更新 更多