java - Oracle - SET ROLE 语句

标签 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

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

最佳答案

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

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

关于java - Oracle - SET ROLE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42466171/

相关文章:

sql - 哪些代码在数据库中有对应关系

mysql - 获取有关主键和外键的信息

java - 如何在 Hibernate 中映射父级的 bean 类变量?

java - 如何将结果集映射到 JPA 中的自定义 POJO

java - "do while"出现问题

java变量在循环中递增后保存错误的值

sql - 如何通过 Spring Boot JPA 执行具有 INTERVAL 子句的 native SQL 查询?

oracle - JDBC 连接默认自动提交行为

java - 如何在 org.springframework.jdbc.CannotGetJdbcConnectionException 上记录 JDBC 连接信息

java - 我们什么时候应该调用 connection.rollback() 方法?