这个代码运行一段时间,不定期的挂死在那儿了,没有任何异常。
public class SendMs
{
private String ZipPath = "";
private String BegZipName = "";
MMSMonistor MSMonistor;
private BasicDataSource dataSource;
private String driverClassName;
private String ValidationQuery;
private String jdbcUrl;
private String userName;
private String password;
public static void main(String[] args) throws Exception
{
SendMs app = new SendMs();
app.init();
app.doMain();}
public void doMain()
{
//变量申明略....
ResultSet rs;Statement st = null;String zipfile;
try
{
Connection conn = getConnection();
do
{
String sql = "select * from SMS_MT_WAIT order by nlevel,SEQUENCE_ID";
st = conn.createStatement();
//就在这句话死掉,也没有异常,也不继续执行
rs = st.executeQuery(sql);
if (rs.next())
{
smslength = 1;
dest_Id = rs.getString("SEQUENCE_ID");
dest_Terminal_Id = CTools.getRsString(rs.getString("DEST_TERMINAL_ID"));
my_msg_Content = CTools.getRsString(rs.getString("MSG_CONTENT"));
srcTerminial = CTools.getRsString(rs.getString("FEE_TERMINAL_ID"));
my_msg_acid = CTools.getRsString(rs.getString("ACT_CODE"));
my_msg_spCode = CTools.getRsString(rs.getString("SP_CODE"));
my_msg_serverId = CTools.getRsString(rs.getString("SERVICE_ID"));
my_msg_feeType = CTools.getRsString(rs.getString("FEE_TYPE"));
my_msg_feeCode = CTools.getRsString(rs.getString("FEE_CODE"));
my_msg_needReport = CTools.getRsString(rs.getString("NEEDREPLAY"));
my_msg_msgFormat = CTools.getRsString(rs.getString("MSG_FORMAT"));
my_msg_linkID = CTools.getRsString(rs.getString("linkID"));
my_msg_level = CTools.getRsString(rs.getString("NLEVEL"));
}
rs.close();
rs = null;
st.close();
st = null;
if (smslength > 0)
{
sendsms(dest_Id, my_msg_acid, my_msg_spCode, srcTerminial, dest_Terminal_Id, my_msg_serverId, my_msg_feeType, my_msg_feeCode, my_msg_needReport, my_msg_msgFormat, my_msg_Content, my_msg_linkID, conn, my_msg_level);
}
sql = "select * from MMS_MT_WAIT order by nlevel,SEQUENCE_ID";
mmslength = 0;
st = conn.createStatement();
rs = st.executeQuery(sql);
if (rs.next())
{
mmslength = 1;
mms_seqID = CTools.getRsString(rs.getString("SEQUENCE_ID"));
mms_acId = CTools.getRsString(rs.getString("ACT_CODE"));
mms_feeTerminalID = CTools.getRsString(rs.getString("SFROM"));
mms_destTerminalID = CTools.getRsString(rs.getString("STO"));
mms_copyTerminalID = CTools.getRsString(rs.getString("STO2"));
mms_serverId = CTools.getRsString(rs.getString("YWDM"));
mms_fl = CTools.getRsString(rs.getString("FEE"));
mms_mMStitle = CTools.getRsString(rs.getString("SUBJECT"));
mms_msgContext = CTools.getRsString(rs.getString("CONTENTS"));
mms_needReport = CTools.getRsString(rs.getString("NEEDREPLY"));
mms_LinkID = CTools.getRsString(rs.getString("LINKID"));
mms_smilname = CTools.getRsString(rs.getString("smilname"));
mms_level = CTools.getRsString(rs.getString("NLEVEL"));
}
rs.close();
rs = null;
st.close();
st = null;
if (mmslength > 0)
{
zipfile = createzipfile(mms_msgContext, mms_smilname, mms_LinkID, mms_seqID);
sendmms(mms_seqID, mms_acId, mms_feeTerminalID, mms_destTerminalID, mms_copyTerminalID, mms_serverId, mms_fl, mms_mMStitle, zipfile, mms_needReport, mms_LinkID, conn, mms_level);
}
if (smslength <= 0 && mmslength <= 0)
{
System.out.println(CTime.getTime(14) + ":--not find sms/mms");
Thread.sleep(2000L);
}}while (true);
}catch (Exception e){}
}
private void sendsms(String dest_Id, String acId, String spCode,String feeTerminalID, String destTerminalID, String serverId,String feeType, String feeCode, String needReport, String msgFormat,String msgContent, String linkID, Connection conn, String nlevel)throws Exception
{
Statement st = conn.createStatement();
int result = MSMonistor.sendSMS(acId, spCode, feeTerminalID, destTerminalID, serverId, feeType, feeCode, needReport, msgFormat, msgContent, linkID);
String sql = "";
if (result != 0)
{sql = "insert into sms_mt_waitfail(sequence_id,act_code,sp_code,fee_terminal_id,dest_terminal_id"
+ ",register_delivery,msg_content,request_time"+ ",service_id,fee_type,fee_code,msg_level,valid_Time"+ ",operator_CODE,area_code,linkid,MSG_FORMAT,NEEDREPLAY"+ ",FAILCODE,NLEVEL)" + "values("+ "sequence_sms_mt_waitfail.nextval,'" + acId + "','" + spCode
+ "','" + feeTerminalID + "','" + destTerminalID + "','0','"
+ msgContent + "','" + CTime.getTime(14) + "'" + ",'" + serverId
+ "','" + feeType + "','" + feeCode + "','0','60'"
+ ",'JSYD','CZ','" + linkID + "','" + msgFormat + "','"
+ needReport + "','" + String.valueOf(result) + "'," + nlevel
+ ")";
}
else
{
sql = "insert into sms_mt_history("
+ "sequence_id,act_code,sp_code,fee_terminal_id,dest_terminal_id"
+ ",register_delivery,msg_content,request_time"
+ ",service_id,fee_type,fee_code,msg_level,valid_Time"
+ ",operator_CODE,area_code,linkid,MSG_FORMAT,NEEDREPLAY,NLEVEL)"
+ "values(" + "sequence_sms_mt_history.nextval,'" + acId + "','"
+ spCode + "','" + feeTerminalID + "','" + destTerminalID
+ "','0','" + msgContent + "','" + CTime.getTime(14) + "'"
+ ",'" + serverId + "','" + feeType + "','" + feeCode
+ "','0','60'" + ",'JSYD','CZ','" + linkID + "','" + msgFormat
+ "','" + needReport + "'," + nlevel + ")";
}
st.executeUpdate(sql);
st.close();
st = null;
st = conn.createStatement(); sql = "delete from SMS_MT_WAIT where SEQUENCE_ID = " + dest_Id;
st = conn.createStatement();
st.executeUpdate(sql);
st.close();
st = null;
} private void sendmms(String mms_seqID, String acId, String feeTerminalID,
String destTerminalID, String copyTerminalID, String serverId,
String fl, String mMStitle, String msgContext, String needReport,
String LinkID, Connection conn, String nlevel) throws Exception
{
if (copyTerminalID == null || copyTerminalID.equals("null"))
{
copyTerminalID = "";
}
int result = MSMonistor.sendMMS(acId, feeTerminalID, destTerminalID, copyTerminalID, serverId, fl, mMStitle, msgContext, needReport, LinkID);
String sql = "";
if (result != 0)
{
sql = "insert into MMS_MT_WAITFAIL(SEQUENCE_ID,XXLY,SUBJECT,SFROM,STO,"
+ "STO2,REQUEST_TIME,SMILNAME,CONTENTS,FEE,YWDM,NEEDREPLY,ACT_CODE,"
+ "MMSC_NUMBER,LINKID,FAILCODE,NLEVEL) values"
+ "(SEQUENCE_MMS_MT_WAITFAIL.nextval,'3','" + mMStitle + "','"
+ feeTerminalID + "','" + destTerminalID + "','"
+ copyTerminalID + "','" + CTime.getTime(14) + "','','"
+ msgContext + "','" + fl + "','" + serverId + "','"
+ needReport + "','" + acId + "','','" + LinkID + "','"
+ String.valueOf(result) + "'," + nlevel + 
")";
}
else
{
sql = "insert into MMS_MT_HISTORY(SEQUENCE_ID,XXLY,SUBJECT,SFROM,STO,"
+ "STO2,REQUEST_TIME,SMILNAME,CONTENTS,FEE,YWDM,NEEDREPLY,ACT_CODE,"
+ "MMSC_NUMBER,LINKID,NLEVEL) values"
+ "(SEQUENCE_MMS_MT_HISTORY.nextval,'3','" + mMStitle + "','"
+ feeTerminalID + "','" + destTerminalID + "','"
+ copyTerminalID + "','" + CTime.getTime(14) + "','','"
+ msgContext + "','" + fl + "','" + serverId + "','"
+ needReport + "','" + acId + "','','" + LinkID + "'," + nlevel
+ ")";
}
Statement st = conn.createStatement();
st.executeUpdate(sql);
st.close();
st = null;
st = conn.createStatement();
sql = "delete from MMS_MT_WAIT where SEQUENCE_ID = " + mms_seqID;
st.executeUpdate(sql);
st.close();
st = null;
}
}

解决方案 »

  1.   

    是不是SMS_MT_WAIT表里的记录太多了
    或者Client端与数据库之间的网络连接有问题
      

  2.   

    请确认Server的IP和Port等初始化没有问题
      

  3.   

    我这是一个通过Socket通信的短信收发程序,同时运行的有两个程序,这个是发送的程序中的读数据库块,如果数据库连接有问题,那么接收的也应该死掉呀,且同时这个服务器上还有其它的程序在运行,访问的也是同一个数据库,为什么其它的不死,偏偏这个死掉了呢?
      

  4.   

    表中的记录是不会太多的,因为发送后就删掉了,最多也不会滞留上千条呀,Oracle处理上千条记录应该是不会有题的呀
      

  5.   

    数据库连接有问题!
    把:Connection conn = getConnection(); 
    改成:Connection conn = DriverManager.getConnection(); 
    就可以拉。建议:以后不要把代码写的老长老长的,太长了别人看不懂的,就是自己,时间长了看起来也很费劲的,多写一个bean进行封装一些看起来就舒服多拉,编程的规范很重要的哦。
      

  6.   

    我是用DHCP连接的
    public Connection getConnection() throws SQLException
    {
    return dataSource.getConnection();
    }
      

  7.   

    太长了。。不过你看看是不是同步(synchronized)的问题。。
      

  8.   

    你是不是有个连接控制类呀。。如果就上面的类的话那Connection类的连接有问题,用JBuilder工具在异常的地方println("异常信息!!").呀打开你的sql事件查看器。对比下,如果有错误事件就是你的T-sql语句有问题。要是没有错误事件的话就是你的Connection类的连接有问题。如果你还有个连接类的话,就看你那个连接类异常。
      

  9.   

    目前我就知道二种连接。纯JDBC 要数据库的驱动包,Class.forName("")造实例。Connection con = DriverManager.getConnection("数据库地址","数据库用户名","密码");
        JDBC ODBC桥和那个差不多只是不用驱动,方法大同,数据库的地方有点差别。不知道你用的JDBC驱动是什么有上面的方法自己查查很有用的。