Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL模式在我的数据库中查找一些表_Java_Sql_Postgresql - Fatal编程技术网

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()方法中使用它谢谢你,非常好