有没有办法使用JDBC检查SEQUENCE的存在?

Nei*_*ton 5 java sql jdbc sequence

我需要以编程方式在数据存储区中生成序列,但需要能够检测它们的存在而不是在它们已经存在的情况下创建.有人知道提取此信息所需的JDBC元数据吗?

DatabaseMetadata进行粗略扫描并未发现合适的方法; 我可以获取所有表/视图和关联的键/索引等,但不能获取该模式的序列.有没有人知道一种方法,最好是数据库独立的,但如果没有,那么对于尽可能多的数据库(想想oracle有一个user_sequence表?但这只是一个数据库,我需要支持其他数据库).

提前致谢

Ane*_*ran 1

据我所知,没有任何直接的方法。因为每个数据库都有自己的生成/处理序列的方式。当它在Oracle中是序列时,它在mysql中是auto_incriment(不是序列,但接近它或达到某种相同的结果),SQL Server中是身份列等。

我会做这样的事情 - 你必须制作一个界面:

interface ISequenceChecker{ // or some name which suits you
    SequenceObject getSequence();
}
Run Code Online (Sandbox Code Playgroud)

不同数据库/存储的实现(下面给出了 Oracle 的 EG):

public class OracleSequenceChecker implements ISequenceChecker{
   OracleSequenceObject getSequence(){
    // some jdbc or similar call
    // to get SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回复。是的,每个数据存储都有一个变体可能是我会采取的方式。顺便说一句,MySQL 中的“自动增量”并不等同于(SQL)SEQUENCE,它是一个独立的命名值生成器,而自动增量是特定列的标识,没有名称。有些 RDBMS 同时支持 IDENTITY(自动增量)和 SEQUENCE,因此有区别。 (2认同)