我的需求大概是,启动一个线程,监听一个端口接收数据,收到数据就保存到数据库。现在的问题是接收了一次数据之后就出错了,虽然还是可以接收数据,但是保存到数据库的操作就不行了。
代码大致如下:
数据连接类
class Dbconnection{
void getDbconnection(){
......
}
.......
}线程类 
 class Thread1 extends Thread(){
 run(){
Dbconnection db=new Dbconnection();
db.query(sql);
.......
}
}启动类 
class Test(){
main(){
Thread1 t=new Thread1 ();
t.star();
..........
}}
最近少写java代码了,不是很规范。
希望大家帮我找出问题,提出优化意见。

解决方案 »

  1.   

    啊,new Dbconnection()还能变空?
      

  2.   

    有几个地方不太明确
    1:接收数据是采用的什么方式,如果是socket,将socket接收的代码贴出来,或者检查每一次数据是否接收完整才去保存
    2:保存一次数据需要多长时间。
    3:数据库操作采用的什么方式,是否因为连接未释放,导致第二次保存时无法获取到连接
      

  3.   

    接收数据是socket,socket方面没有问题,就是数据库操作出了问题。
    我这样设计,如果操作很频繁会不会有问题呢
      

  4.   

    LZ是收数据和写入数据库都是一个线程,还是受数据一个线程,写数据另一个线程?
    每一次连接Dbconnection db=new Dbconnection();操作完数据库以后都确保关闭连接了吗?
    数据库有最大连接限制的,当你不断地连接并没有正常关闭的时候,一旦超过了最大连接数,就连接不上数据库了,所以db这个对象取不到了。
      

  5.   

    错误来了the last packet successfully received from the server was 702,453 milliseconds a go. The last packet sent successfully to the server was 0 milliseconds ago. 
    at sun.reflect.NativeConstructorAccessorlmpl.newlnstanceO<Native Method) 
    at sun.reflect.NativeConstructorAccessorlmpl.newlnstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorlmpl.newlnstance(Unknown Sou rce) 
    at java.lang.reflect.Constructor.newlnstance(Unknown Source) 
    at con.nysql.jdbc .Util.handleNewlnstance(Util.java:411) 
    at con.nysql.jdbc .SQLError.createConnunicationsException(SQLError.java:1 116) 
    at con.nysql.jdbc .MysqllO.reuseAndfleadPacket(MysqllO.java:3090) 
    at con.nysql.,jdbc .MysqllO.reuseAndfleadPacket(MysqllO.java:2979) 
    at con.nysql.jdbc .MysqllO.checkErrorPacket(MysqllO.java:3520) 
    at con.nysql.jdbc .MysqllO.sendConmand(MysqllO.java:1990) 
    at con.nysql.jdbc .MysqllO.sqlQueryDirect(MysqllO.java:2151) 
    at con.nysql.jdbc .Connectionlmpl.execSQL(Connectionlmpl.java:2619) 
    at con.nysql.,jdbc .Statenentlnpl.executeUpdate(Statenentlmpl.java:1709) 
    at con.nysql.jdbc .Statenentlnpl.executeUpdate(Statementlmpl.java:1628) 
    at con.biz.ListenSocket.xmlfleader(ListenSocket.java:141) 
    at con.biz.ListenSocket.run(ListenSocket.java:79) 
    Caused by: .java.net.SocketException: Software caused connection abort: recv fail 
    at java.net.SocketlnputStrean.socketfleadO(Native Method) 
    at .java.net .SocketlnputStrean.read(Unknown Source) 
    at con.nysql.,jdbc .util.ReadAheadlnputStream.fill<ReadAheadlnputStrean.ja va:114) 
    at con.nysql.jdbc .util.ReadAheadlnputStrean.readFromUnderlyingStreanlfHe cessary(ReadAheadlnputStrean.java:161) 
    at con.nysql.jdbc .util.ReadAheadlnputStrean.read(ReadAheadlnputStream.ja va:189) 
    at con.nysql.,jdbc.MysqllO.readFully(MysqllO.java:253?) 
    at con.nysql.jdbc .MysqllO.reuseAndfleadPacket(MysqllO.java:2990) 
    ...9nore 
      

  6.   

    Caused by: .java.net.SocketException: Software caused connection abort难道是connect没关闭
      

  7.   

    我都已经用
    Connection conn=null; 
    try{
    conn.getConnection();
    }catch{
    ...
    }finaly{
    conn.close();
    }
    每次连接都关闭,但是还是Communications link failure
      

  8.   

    还是自己解决了,具体方法 http://hao123it.com/blog/?p=178