Java SQL模式在我的数据库中查找一些表
我使用数据库元数据在数据库中的给定模式中查找一些表,如下所示:Java SQL模式在我的数据库中查找一些表,java,sql,postgresql,Java,Sql,Postgresql,我使用数据库元数据在数据库中的给定模式中查找一些表,如下所示: DatabaseMetaData dbmd = connections.getMetaData(); ResultSet rs = dbmd.getTables(null,"schema_name","table_name_pattern","type"); 它可以工作,但我的问题是,我只想找到以t开头的表,以及其他三个我有确切名称的表: books\u table,fr
DatabaseMetaData dbmd = connections.getMetaData();
ResultSet rs = dbmd.getTables(null,"schema_name","table_name_pattern","type");
它可以工作,但我的问题是,我只想找到以t
开头的表,以及其他三个我有确切名称的表:
books\u table
,froots
,以及colors
我怎样才能创建一个只给出这三个表和以
t
开头的表的模式?我很久以前也遇到过类似的问题,答案是不,你不能这样做
JDBC元数据类的功能非常有限
但是,您可以直接查询引擎元数据。例如,您可以执行以下操作:
select *
from pg_catalog.pg_tables
where schemaname = 'public'
and tablename like 't%' or tablename in ('books_table', 'froots', 'colors')
该参数被解释为类似条件的通配符值。因此,要查找所有以
t
开头的表,请使用t%
某些DatabaseMetaData方法采用字符串模式的参数。这些参数都有fooPattern这样的名称。在模式字符串中,“%”表示匹配0个或多个字符的任何子字符串,“\u1”表示匹配任何一个字符
请注意,这是区分大小写的。如果您创建的表没有引号(这是您应该做的),那么它们以小写形式存储,因此t%
可以正常工作
最后一个参数应该是包含所有可能“对象类型”的字符串数组。需要表格时,请使用{“TABLE”}
。或者,如果您不关心“类型”,也可以传递null
DatabaseMetaData dbmd = connections.getMetaData();
ResultSet rs = dbmd.getTables(null,"schema_name","t%",new String[]{"TABLE"});
但是,不能指定多个或多个条件。如果要查找是否存在无法使用通配符的其他表,则必须为每个表名调用一次
getTables()
另一种选择是简单地从该模式中获取所有表,然后在处理结果集时丢弃不需要的表。这可能比多次调用
getTables()
要快。谢谢你的回答,我发现它非常有用,但在我工作的项目中,他们不喜欢在java代码中看到SQL查询……我所做的工作很有效……我只是想纠正一种模式,让我找到以t开头的表和其他三个表,并在getTables()方法中使用它谢谢你,非常好