Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oracle-SET角色语句_Java_Oracle_Jdbc_User Roles_Role - Fatal编程技术网

Java Oracle-SET角色语句

Java Oracle-SET角色语句,java,oracle,jdbc,user-roles,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.prepareStatemen

下面的代码在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的绑定变量绑定值,而不能使用诸如角色名称或其密码之类的标识符。您必须求助于字符串操作来获得这种效果(假设值不是硬编码的,如上所示,在这种情况下,您可以将它们放入字符串中,然后使用它完成)。例如:


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


角色名称是一个标识符。您不能在准备好的语句中将标识符作为参数传递。请尝试将参数连接到SQL并执行?@GurV,我现在有连接参数的代码。但在记录器中,它会打印密码。我需要避免在logger中显示密码。@user3515080:在这种情况下,您必须修改logger。角色名是一个标识符。您不能在准备好的语句中将标识符作为参数传递。请尝试将参数连接到SQL并执行?@GurV,我现在有连接参数的代码。但在记录器中,它会打印密码。我需要避免在logger中显示密码。@user3515080:在这种情况下,您必须修改logger。我现在有连接参数的代码。但在记录器中,它会打印密码。我需要避免在logger中显示密码。我现在有连接参数的代码。但在记录器中,它会打印密码。我需要避免在logger中显示密码。
String role = "TEST_ROLE";
String pswd = "TEST_PASS";
String sql = String.format("set role %s identified by %s", role, pswd);