⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 savedatabase.java

📁 移动彩信网关
💻 JAVA
字号:
package com.mengzhong.mms;/** * <p>Title: </p> * <p>Description: 负责存消息。上行,下行,状态报告</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author unascribed * @version 1.0 */import java.io.*;import java.util.*;import java.sql.*;import com.huawei.mms.pdu.*;import com.mengzhong.mms.publics.*;import com.huawei.mms.pdu.MMSContent;import com.huawei.mms.pdu.MMessage;import com.huawei.mms.pdu.MMSAddress;import com.huawei.mms.vas.VAS;public class SaveDataBase extends Thread{   private int  SAVE_INTERVAL       = 10000;   private boolean bConnectFlag     = false;    //获取连接数据库标志   private boolean bShutdownFlag    = false;   //是否需要提交(即已经有数据)   private boolean conn1NeedCommit  = false;   private boolean conn3NeedCommit  = false;   //是否用executeBatch   private boolean bMsgExecBatch    = true;   //是否自动提交 true:YES  false:NO   private boolean bAutoCommit      = false;    //连接对象   private volatile Connection        conn1     = null;   private volatile Connection        conn3     = null;   private volatile PreparedStatement pstmt1    = null;// for submit   private volatile PreparedStatement pstmt3    = null;// for deliver   private String submitSqlStatement =                   //存储发送信息     "insert into T_SUBMIT_TO_MMSC (SUBMIT_TO_MMSC_ID,"+      "VASP_ID,VAS_ID,Service_Code,Charged_Party_IDTo_No,"+       "Cc_No,Bcc_No,MMS_subjet,MMS_Content_Type,Content_Id_List,"+       "Submit _time,Msg_id,Submit_result,)"+       "values(T_SUBMIT_TO_MMSC_SEQ.nextval,?,?,?,?,?,?,?,?,?,?,sysdate,?,2)";   private String deliverSqlStatement =                    //存储接收信息       "insert into T_RECIEVE_FROM_MMSC(Recieve_from_MMSC_ID,"+       "Service_Code,From_no,To_No,MMS_subjet,Content,Recv _time,Msg_id)"+        "values(T_RECIEVE_FROM_MMSC_SEQ.nextval,?,?,?,?,?,sysdate,?)";   public SaveDataBase()  {   }  /**   * 写数据线程执行体.   * 连接维护<br>   * 提交数据   */   public void run()   {      connectDatabase();  //连接数据库函数      if( bConnectFlag )       // System.out.println("Cmpp Save Data Thread started ." );      while( !bShutdownFlag )      {        if( !bConnectFlag ){                     //设置线程休眠时间            com.mengzhong.mms.publics.PublicMethod.threadSleep(PublicConstants.RECONNECTDB_INTERVAL) ;            connectDatabase();            continue;          }          com.mengzhong.mms.publics.PublicMethod.threadSleep(SAVE_INTERVAL);          commitConn1();          commitConn3();     } //end while     //thread exit     commitConn1();     commitConn3();     disconnectConn1();//断开连接     disconnectConn3();   }  private void commitConn1(){      try      {        if( (conn1 !=null)&&(conn1NeedCommit) ){           synchronized  ( pstmt1){  //lock pstmt               if( bMsgExecBatch )                 pstmt1.executeBatch() ;               conn1.commit() ;           }                        //end lock           conn1NeedCommit = false;        }      } catch(Exception e){          if( (bConnectFlag=DatabaseAccess.isConnectDB(conn1))==false ){            disconnectConn1();            conn1 = null;          }      }  }  private void commitConn3(){      try      {        if( (conn3 !=null)&&(conn3NeedCommit) ){           synchronized  ( pstmt3){  //lock pstmt               if( bMsgExecBatch )                 pstmt3.executeBatch() ;               conn3.commit() ;           }                        //end lock           conn3NeedCommit = false;        }      } catch(Exception e){          if( (bConnectFlag=DatabaseAccess.isConnectDB(conn3))==false ){            disconnectConn3();            conn3 = null;          }      }  }  /**   * 终止线程   */  public void tStop(){    bShutdownFlag = true;  }  /**   * 连接数据库   * 与数据库建立两个连接   */  public void connectDatabase(){      if(conn1 == null)   // Prepare for conn1      {          conn1=DatabaseAccess.connectDatabase(     //获得连接              PublicConstants.CONNECTION_URL ,              PublicConstants.DB_USER ,              PublicConstants.DB_PASS );          if(conn1 != null) {            try{              if(bAutoCommit)                conn1.setAutoCommit(true);              else                conn1.setAutoCommit(false);              pstmt1=conn1.prepareStatement(submitSqlStatement); //执行发送存盘SQL语句            }catch(SQLException eSQL) {              System.out.println("cmppSaveData prepareStatement conn1 :"+eSQL.toString());              disconnectConn1();              bConnectFlag=false;            }          }      }      if (conn3 == null)   // Prepare for conn3      {        conn3=DatabaseAccess.connectDatabase(            PublicConstants.CONNECTION_URL ,            PublicConstants.DB_USER ,            PublicConstants.DB_PASS );        if(conn3 != null) {          try{            if(bAutoCommit)              conn3.setAutoCommit(true);            else              conn3.setAutoCommit(false);            pstmt3=conn3.prepareStatement(deliverSqlStatement);  //执行接收存盘SQL语句          }catch(SQLException eSQL) {            System.out.println("CmppSaveData prepareStatement conn3:"+eSQL.toString());            disconnectConn3();            bConnectFlag=false;          }        }      }      if( (conn1 !=null ) &&(conn3 !=null )  )  //数据库以连接        bConnectFlag=true;  }  /**   * 写Cmpp_Submit消息到数据库   * @param sm ShortMsgcmpp对象   * @return   *    true :成功   *    false:失败   */  public boolean saveSubmitMsg(String from,String to,String serviceCode,MMessage m)  {    boolean bConnectState=false;  //-----发送消息后存盘--------    if(bConnectFlag == false) return false;    try    {      synchronized  ( pstmt1){      pstmt1.setString(1,VAS.VASP_ID);  //设置参数值      pstmt1.setString(2,VAS.VAS_ID);      pstmt1.setString(3,serviceCode);      pstmt1.setString(4,from);      pstmt1.setString(5,to);      String cc="";      Vector ts = m.getCc();      if(ts != null)      {        int size = ts.size();        for(int i = 0; i < size; i++) //取出多个号码        {          MMSAddress tmp = (MMSAddress)ts.get(i);           if(cc!=""){             cc+=";";           }          cc+=tmp.getAddress();        }      }      pstmt1.setString(6,cc);      String bcc="";      Vector tb=m.getBcc();   //Vector 数组      if(tb!=null)      {        int size=tb.size();        for(int i = 0; i < size; i++)        {          MMSAddress tbp= (MMSAddress)tb.get(i); //获得单个号码          if(bcc!=""){            bcc+=";";          }            bcc+=tbp.getAddress();        }      }      pstmt1.setString(7,bcc);      pstmt1.setString(8,String.valueOf(String.valueOf(m.getSubject())));      pstmt1.setString(9,m.getContentType());      String tmp=null;      MMSContent mmc;                             //集合     如果有Content的话就执行循环      for(Iterator i = m.getContents().iterator(); i.hasNext(); System.out.println(mmc.toString())) {        if(tmp!=null){                tmp=tmp+";";              }              mmc = (MMSContent)i.next();//获取单个ID              tmp+=mmc.getContentId()+"~~"+mmc.getType()+"~~"+mmc.getContentAsString();//多个号码用;间隔         }      pstmt1.setString(10,tmp);      pstmt1.setString(11,String.valueOf(String.valueOf(m.getMessageId()))); //发送返回的消息编号     if( bMsgExecBatch )           {              pstmt1.addBatch();           }           else              pstmt1.executeUpdate();       } //end lock       conn1NeedCommit = true;       return true;    }catch(Exception e)    {        bConnectState=DatabaseAccess.isConnectDB(conn1);        if(bConnectState==false)//假如是数据库连接的原因        {          bConnectFlag=false;          conn1NeedCommit = false;          disconnectConn1();  //断开连接1          connectDatabase(); //获得连接        }        return false;    }  }  /**   * 写Cmpp_Deliver.消息到数据库   * @param smResp ShortMsgcmpp对象   * @return   *    true :成功   *    false:失败   */  public boolean saveCmppDeliverMsg(MMessage m){ //----接收消息存盘--------    boolean bConnectState=false;    if(bConnectFlag == false) return false;    try    {       synchronized  ( pstmt3){         System.out.println("收到多媒体消息,内容如下:");         System.out.println("来自:".concat(String.valueOf(String.valueOf(m.getFrom()))));         System.out.println("标题:".concat(String.valueOf(String.valueOf(m.getSubject()))));         System.out.println("消息ID:".concat(String.valueOf(String.valueOf(m.getMessageId()))));         pstmt3.setString(1,VAS.Service_Code);  //设置参数值         pstmt3.setString(2,String.valueOf(String.valueOf(m.getFrom()))); //转换成字符串         String tto="";         Vector to = m.getTo();  //把To_no字段的值保存到数组中         if(to != null)         {           int size = to.size();           for(int i = 0; i < size; i++)           {             MMSAddress tmp = (MMSAddress)to.get(i);             if(tto!=""){               tto+=";";             }             tto+=tmp.getAddress();           }         }         System.out.println("发送方号码:"+tto);         pstmt3.setString(3,tto);         pstmt3.setString(4,String.valueOf(String.valueOf(m.getSubject())));         System.out.println("消息内容:");         MMSContent mmc;         String tmp=null;   //取出多个Content用";"间隔,一个Content中多个参数用"~~"间隔         for(Iterator i = m.getContents().iterator(); i.hasNext(); System.out.println(mmc.toString()))  {           if(tmp!=null){   //如果一个Content则不加";"             tmp=tmp+";";           }           mmc = (MMSContent)i.next(); //获得单个Content           tmp+=mmc.getContentId()+"~~"+mmc.getType()+"~~"+mmc.getContentAsString();//保存成一个字符串         }         pstmt3.setString(5,String.valueOf(String.valueOf(tmp)));//Content         pstmt3.setString(6,String.valueOf(String.valueOf(m.getMessageId())));//Msg_id           if( bMsgExecBatch ){              pstmt3.addBatch();           }           else{             pstmt3.executeUpdate();           }       } //end lock       conn3NeedCommit = true;       return true;    }catch(Exception e)    {     bConnectState=DatabaseAccess.isConnectDB(conn3);        if(bConnectState==false)//假如是数据库连接的原因        {          bConnectFlag=false;          conn3NeedCommit = false;          disconnectConn3();          connectDatabase();        }        return false;    }  }//end  /**   * 断开连接一   */  public void disconnectConn1(){    try{      pstmt1.close();    }catch(Exception eSQL){}    try{      conn1.close();    }catch(Exception eSQL){}    conn1 = null;  }  /**   * 断开连接三   */  public void disconnectConn3(){    try{      pstmt3.close();    }catch(Exception eSQL){}    try{      conn3.close();    }catch(Exception eSQL){}    conn3 = null;  }   public boolean getConnectStatus(){     if (conn1 !=null  & conn3 !=null  )        return true;     else return false;   }  /*   * 把字符串数组用separator衔接为一个字符串   * @param srcArray 源数组   * @param separator 分隔符   * @return 目的串   */  private static final String stringArray2String(String [] srcArray,String separator)  {      StringBuffer buffer = new StringBuffer();      for(int i = 0; i< srcArray.length-1; i++)      {          buffer.append(srcArray[i]);          buffer.append(separator);      }      buffer.append(srcArray[srcArray.length-1]);      return buffer.toString();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -