如何确定给定JDBC连接的数据库类型?

30 java oracle jdbc

我需要处理返回三个数据库(Oracle,sybase,MS-Server)的存储过程/函数的结果集.程序/功能通常是相同的,但在Oracle中调用稍有不同.

statement.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
...
statement.execute(); 
ResultSet rs = (ResultSet)statement.getObject(1);
Run Code Online (Sandbox Code Playgroud)

JDBC没有提供处理它的通用方法,因此我需要在代码中区分不同类型的DB.我得到了连接,但不知道确定数据库是否为oracle的最佳方法.我可以使用驱动程序名称,但宁愿找到更清洁的方式.

Jus*_*ave 48

我怀疑你会想要使用DatabaseMetaData类.很可能DatabaseMetaData.getDatabaseProductName就足够了,但如果您的代码依赖于您正在使用的特定数据库的特定版本,则可能还需要使用getDatabaseProductVersion方法.

  • PostgreSQL给出了"PostgreSQL" (12认同)
  • Microsoft SQL Server为产品名称提供"Microsoft SQL Server". (10认同)
  • Oracle给出了"Oracle" (8认同)
  • MySQL提供"MySQL",HSQLDB提供"HSQL数据库引擎". (8认同)
  • DB2给出了"DB2/....".在我的情况下,它给出了"DB2/LINUXX8664".H2给出"H2" (6认同)
  • 德比给出"Apache Derby" (2认同)
  • 此答案中列出了大多数其他值:/sf/ask/652414031/#58736912 (2认同)