如何从 JDBC 检索序列元数据?
我正在尝试从 Java 代码(使用基本 JDBC)检索 Oracle DB 的不同类型的元数据。例如,如果我想检索带有 _FOO
后缀的表列表,我可以执行以下操作:
Connection connection = dataSource.getConnection();
DatabaseMetaData meta = connection.getMetaData();
ResultSet tables = meta.getTables(connection.getCatalog(), null, "%_FOO", new String[] { "TABLE" });
// Iterate on the ResultSet to get information on tables...
现在,我想从数据库中检索所有序列(例如例如所有名为 S_xxx_FOO
的序列)。
我该怎么做,因为我在 DatabaseMetaData
与序列相关?
我是否必须运行 select * from user_sequences
这样的查询?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
有同样的问题。这相当容易。只需将“SEQUENCE”传递到 getMetaData().getTables() 类型参数中即可。
在您的具体情况下,它会是这样的:
Had the same question. It's fairly easy. Just pass in "SEQUENCE" into the getMetaData().getTables() types param.
In your specific case it would be something like:
您无法通过 JDBC API 执行此操作,因为某些数据库(仍然)不支持序列。
获取它们的唯一方法是查询 DBMS 的系统目录(我猜您提到的 user_sequences 是 Oracle)
You can't do this through the JDBC API, because some databases (still) do not support sequences.
The only way to get them is to query the system catalog of your DBMS (I guess it's Oracle in your case as you mention
user_sequences
)鉴于最新版本的 Oracle JDBC 驱动程序(例如 12.1.0.2)不返回序列信息< /a> 当您调用
DatabaseMetaData#getTables
,其中types
设置为["SEQUENCE"]
,最好的办法是自己运行必要的查询,例如:... 其中
someOwnerPattern
和someNamePattern
是 SQL 模式,例如与LIKE
运算符一起使用的那些(例如%
匹配任何内容)。这与驱动程序本身运行的查询基本相同,只是它查询
SEQUENCE
类型的对象。Given that recent versions of the Oracle JDBC drivers (e.g. 12.1.0.2) don't return sequence information when you call
DatabaseMetaData#getTables
withtypes
set to["SEQUENCE"]
, your best bet is to run the necessary query yourself, e.g.:... where
someOwnerPattern
andsomeNamePattern
are SQL patterns like the ones you'd use with theLIKE
operator (e.g.%
matches anything).This is basically the same as the query run by the driver itself, except that it queries for objects of type
SEQUENCE
.您可以使用 hibernate dialect api 来检索序列名称。请参阅:http://docs.jboss.org /hibernate/orm/3.2/api/org/hibernate/dialect/Dialect.html
从下面的示例中,您可以看到如何使用方言来获取序列名称
如果您不想使用 hibernate,那么您可以创建自定义顺序特定实现。
自定义实现的示例代码
You can use the hibernate dialect api for retrieving sequence Name. see : http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/dialect/Dialect.html
From below example, you can see how to use dialect to get sequence names
If you don't desire to use hibernate, then you have to crate custom sequential specific implementation.
Sample code for custom implementation