2011-07-26 8 views
2

prepareCallを使用してJDBC接続を使用してアプリケーションロールを設定しようとしています。このエラー(すなわち構文的に)が、SQL Server 2008人のOKを返す動作しているようです:JDBC set_approle

Application roles can only be activated at the ad hoc level 

私のような、私のJDBC接続からだけで直接、ストアドプロシージャ、または何かの中からこれを焼成することではないのです。

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パラメータをどのように取得しますか? –