使用oracle jdbc连接时如何获取数据库模式名称?

joh*_*ode 8 java oracle jdbc

我试图使用DatabaseMetaData.getTables()方法获取所有数据库表.但是这种方法需要数据库模式名称模式.是否可以获取当前数据库连接的模式名称?

a_h*_*ame 9

您当前连接的标准模式是您用来登录的用户名.所以,如果你的用户是SCOTT必须使用SCOTTDatabaseMetaData.getTables().

您可以通过获取用户名DatabaseMetaData.getUserName().

但请记住,在JDBC驱动程序中完成的模式/用户名的比较是区分大小写的,通常用户名是大写的.

我不是百分百肯定是否DatabaseMetaData.getUserName()会在所有情况下都以正确的方式返回名称.可以肯定的是,您可能希望在使用该值之前执行upperCase().

  • @CKLee:因为SQL标准要求将标识符折叠为大写,这就是为什么非引用标识符在Oracle中以大写形式存储的原因.在这种情况下,区分大小写是因为后台的JDBC驱动程序执行类似`where owner =?`和***比较区分大小写(与其他每个字符串比较)的事实.用户名作为*标识符*的一部分不区分大小写.`select*from SCOTT.foobar`是'select*from scott.FOObar`的意思 (2认同)