Oracle - SET ROLE语句

时间:2017-02-26 08:05:28

标签: java oracle jdbc user-roles role

波纹管代码在java中不起作用。

Class.forName('oracle.jdbc.driver.OracleDriver');
            Connection connection = DriverManager.getConnection('jdbc:oracle:thin:@localhost:1521:test', 'xyz', 'pass');
            PreparedStatement stmt = connection.prepareStatement("set role ? identified by ?");
            String role = "TEST_ROLE";
            String pswd = "TEST_PASS";
            stmt.setString(1, role);
            stmt.setString(2, pswd);
            stmt.execute();

以上代码抛出异常:

java.sql.SQLSyntaxErrorException: ORA-01937: missing or invalid role name

我从命令模式尝试了相同的角色和密码,但它已成功执行。

1 个答案:

答案 0 :(得分:0)

您只能使用PreparedStatement的绑定变量来绑定,而不能使用角色名称或其密码等标识符。您必须求助于字符串操作才能获得此效果(假设值不是硬编码的,如上所示,在这种情况下,您可以将它们放入字符串中来完成它)。 E.g:

String role = "TEST_ROLE";
String pswd = "TEST_PASS";
String sql = String.format("set role %s identified by %s", role, pswd);