龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

在java 中执行触发器代码、创表语句

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
由于程序的需要,在SQLServer 中创建触发器及建表,碰到了在java 代码中执行创建触发器及表。 /**建立中间表*/ public static final String createMiddleTableSQL = "CREATE TABLE [dbo].[AlarmsMiddleTbl] ( " + "

      由于程序的需要,在SQLServer 中创建触发器及建表,碰到了在java 代码中执行创建触发器及表。

      /**建立中间表*/

      public static final String

              createMiddleTableSQL =

              "CREATE TABLE [dbo].[AlarmsMiddleTbl] ( "

              + " [id] [int] NOT NULL  , "

              + " [DeviceID] [smallint] NULL , "

              + " [Aid] [char] (10) COLLATE Chinese_PRC_BIN NULL , "

              + " [BeginTime] [datetime] NULL , "

              + " [EndTime] [datetime] NULL , "

              + " [Severity] [char] (2) COLLATE Chinese_PRC_BIN NULL , "

              + " [CondType] [char] (25) COLLATE Chinese_PRC_BIN NULL , "

              + " [DetailID] [smallint] NULL , "

              +

              " [AckNotes] [char] (150) COLLATE Chinese_PRC_BIN NULL , "

              +

              " [Description] [char] (255) COLLATE Chinese_PRC_BIN NULL , "

              +

              " [Systemtimes] [char] (30) COLLATE Chinese_PRC_BIN NULL "

              + ") ON [PRIMARY] ";

   

   

      /**在告警表上创建触发器*/

      public static final String createMiddleTblTriggerSQL =

              "CREATE   TRIGGER t_alarms "

              + "ON [NTBW].[dbo].[Alarms] "

              + "FOR INSERT, UPDATE "

              + "AS "

              + "DECLARE  @rows int "

              + "SELECT @rows =  @@rowcount "

              + "IF @rows = 0 "

              + "  return "

              +

              "IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted) "

              + "BEGIN "

              + "  INSERT INTO [NTBW].[dbo].[AlarmsMiddleTbl] "

              + "  SELECT i.[id], i.[DeviceID], i.[Aid], i.[BeginTime], "

              +

              "  i.[EndTime], i.[Severity], i.[CondType], i.[DetailID], i.[AckNotes], "

              + "  i.[Description], getdate() from inserted i "

              + "END "

              +

              "IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted) AND "

              + " UPDATE(EndTime) "

              + "BEGIN "

              + "  INSERT INTO [NTBW].[dbo].[AlarmsMiddleTbl] "

              + "  SELECT i.[id], i.[DeviceID], i.[Aid], i.[BeginTime], "

              +

              "  i.[EndTime], i.[Severity], i.[CondType], i.[DetailID], i.[AckNotes], "

              + "  i.[Description], getdate() from inserted i "

              + "END "

              + "IF @@error <> 0 "

              + "BEGIN "

              + "  RAISERROR('ERROR',16,1) "

              + "  rollback transaction "

              + "  return "

              + "END ";

   

   

   

   

   

  JAVA中执行以上语句过程:

  view plaincopy to clipboardprint?
  /** 
   
   * 创建中间表或者触发器 
   
   * 
   
   * @param sql String 
   
   * @return boolean 返回语句执行结果,true 成功,false 失败 
   
   */ 
   
  private boolean createTableOrTrigger(String sql)  
   
  {  
   
      Connection con = null;  
   
      PreparedStatement st = null;  
   
      boolean result = false;  
   
      try 
   
      {  
   
          con = dbh.getConnection();  
   
          st = con.prepareStatement(sql);  
   
          st.execute();  
   
          result = true;  
   
          dbh.closeConnections(null, st, con);  
   
      }  
   
      catch (SQLException ex)  
   
      {  
   
          Log.error("Unable to create :" +  
   
                    sql + " ,ErrorCode :" + ex.getErrorCode() +  
   
                    ",Exception :" +  
   
                    ex.getLocalizedMessage());  
   
          dbh.closeConnections(null, st, con);  
   
      }  
   
   
   
      return result;  
   
  } 

精彩图集

赞助商链接