我的需求大概是,启动一个线程,监听一个端口接收数据,收到数据就保存到数据库。现在的问题是接收了一次数据之后就出错了,虽然还是可以接收数据,但是保存到数据库的操作就不行了。
代码大致如下:
数据连接类
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代码了,不是很规范。
希望大家帮我找出问题,提出优化意见。
代码大致如下:
数据连接类
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:接收数据是采用的什么方式,如果是socket,将socket接收的代码贴出来,或者检查每一次数据是否接收完整才去保存
2:保存一次数据需要多长时间。
3:数据库操作采用的什么方式,是否因为连接未释放,导致第二次保存时无法获取到连接
我这样设计,如果操作很频繁会不会有问题呢
每一次连接Dbconnection db=new Dbconnection();操作完数据库以后都确保关闭连接了吗?
数据库有最大连接限制的,当你不断地连接并没有正常关闭的时候,一旦超过了最大连接数,就连接不上数据库了,所以db这个对象取不到了。
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
Connection conn=null;
try{
conn.getConnection();
}catch{
...
}finaly{
conn.close();
}
每次连接都关闭,但是还是Communications link failure