2011-07-26 4 views
2

prepareCall을 사용하여 JDBC 연결을 통해 응용 프로그램 역할을 설정하려고합니다. 같은JDBC set_approle

Application roles can only be activated at the ad hoc level 

내 JDBC 연결에서 바로 직접 저장 프로 시저 또는 아무것도 내에서이 발사하고 있지 않다 : 확인 (예 : 구문 현명한)하지만 SQL 서버 2008 반환이 오류를 작동하는 것 같다

CallableStatement cstmt = con.prepareCall("{call sys.sp_setapprole(?, ?, ?, ?)}"); 
//setup all the IN and OUT parameters here 
cstmt.execute(); 

이것이 작동하지 않는 이유는 무엇입니까?

답변

1

Microsoft의 JDBC 드라이버는 Prepared Statements 또는 Statement Pooling을 끌 수있는 방법이 없습니다. 따라서 데이터베이스로 전송 된 모든 것은 sys.sp_setapprole()이 감지하고 싫어하는 sp_prepexec()에 래핑되었으므로 다른 프로 시저로 래핑 할 수 없으며 데이터베이스에서 직접 실행해야합니다. 해결책은 다른 JDBC 드라이버를 사용하는 것입니다.

+0

어느 것을 사용하셨습니까? –

+0

@SimonArsenault https://www.inetsoftware.de/products/jdbc-driver/ms-sql/merlia – Ayyoudy

2

sp_setapprole을 실행하려면 다음 코드를 사용하십시오.

// substitute userName and password with your own code 
try { 
    String sql = "EXEC sp_setapprole '" + userName + "', '" + password + "'"; 
    Statement st = con.createStatement(); 
    st.execute(sql); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 
+0

이 방법으로 OUTPUT 매개 변수를 어떻게 검색합니까? –