2017-03-22 8 views
0

javaを使用してDB内のすべての関数とプロシージャを削除しようとしています。 私の現在のコードはそうのようなものです:アイテムは一度、「機能」とかつて「手順」であるgetProceduresとgetFunctionsが同じResultSetを返す

 Class.forName(driver); 
     Connection conn = getConnectionToDB(); 
     String itemName; 
     ResultSet rs = getResultSetForItem(item); 
     String upperCaseItem = item.toUpperCase(); 
     while (rs.next()) { 
      itemName = rs.getString(upperCaseItem + "_NAME"); 
      // Procedure and function names come with a grouping ID, remove it 
      if (item.equals("procedure") || item.equals("function")) 
       itemName = itemName.substring(0, itemName.indexOf(";")); 
      stmt = conn.createStatement(); 
      stmt.executeUpdate(query + " " + itemName); 
     } 

。また、クエリ変数は、実行ごとに「DROP FUNCTION」または「DROP PROCEDURE」に正しく設定されています。

getResuletSetForItemの方法

 Class.forName(driver); 
     Connection conn = getConnectionToDB(); 
     DatabaseMetaData md = conn.getMetaData(); 
     switch (item.toLowerCase()){ 
      case "function": 
       rs = md.getFunctions("LDMS", "dbo", "%"); 
       break; 
      case "procedure": 
       rs = md.getProcedures("LDMS", "dbo", "%"); 
       break; 
     } 
     return rs; 

何が起こることはあるが、私は私が求めていたものに従って関数やプロシージャなどの結果セットを取得します。しかし、それはまた、他の種類のレコードを返します(私が関数のResultSetを要求した場合、手順も同様に取得します)。

もちろん、Xが実際にストアドプロシージャである「DROP FUNCTION X」を実行しようとすると、例外が発生します。

答えて

0

明示的に言っているわけではありませんが、Java用のMS SQL Serverドライバを使用しているようです。

ドキュメントから、getFunctionsgetProceduresメソッドのように、関数とプロシージャのリストが返されます。 FUNCTION_TYPE列を評価してどちらがどちらであるかを判断する必要があります。

機能の種類。これは次の値のいずれかとすることができる。

SQL_PT_UNKNOWN(0)

SQL_PT_PROCEDURE(1)

SQL_PT_FUNCTION(2)

関連する問題