2017-02-26 80 views
1

波紋管代碼在java中不起作用。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,我現在有連接params的代碼。但在記錄器中它會輸出密碼。我需要避免在記錄器中顯示密碼。 – user3515080

回答

0

您只能使用PreparedStatement的綁定變量綁定,而不是標識符,如角色名稱或其密碼。你不得不求助於字符串操作來獲得這種效果(假設值不是硬編碼的,如上所示,在這種情況下,你可以把它們放在字符串中並且用它來完成)。例如:

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

我現在有連接params的代碼。但在記錄器中它會輸出密碼。我需要避免在記錄器中顯示密碼。 – user3515080