📄 savedatabase.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 + -