2017-02-26 5 views
1

자바에서 벨로우즈 코드가 작동하지 않습니다. Oracle - SET ROLE 문

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 

내가 성공적으로 실행 된 명령 모드에서 같은 역할과 암호를 시도했다.

+0

역할 이름은 식별자입니다. 준비된 명령문에서 식별자를 매개 변수로 전달할 수 없습니다. –

+0

대신 params를 SQL에 연결하고?를 실행하십시오. – GurV

+0

@GurV, 지금 매개 변수를 연결 한 코드가 있습니다. 로거에서는 암호를 인쇄합니다. 로거에서 암호를 표시하지 않아야합니다. – user3515080

답변

0

을 바인드하기 위해 PreparedStatement의 바인드 변수 만 사용할 수 있으며 역할 이름이나 암호와 같은 식별자는 사용할 수 없습니다. 이 효과를 얻으려면 문자열 조작에 의존해야합니다 (위의 그림과 같이 값을 하드 코딩하지 않은 경우 가정 할 때 문자열에 값을 넣을 수 있습니다). 예 :

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

지금 당장 매개 변수를 연결하는 코드가 있습니다. 로거에서는 암호를 인쇄합니다. 로거에서 암호를 표시하지 않아야합니다. – user3515080