遇见一个奇怪的问题,我做的一个客户端和服务端,服务端正常启动,且操作两个数据库,客户端连接服务端的时候是先与服务端通信,然后服务端操作两个数据库,操作完后再返回标识给客户端,最后客户端才正式的启动。在这个过程中老报错,不是一直报错,而是十次有一个八九次很频繁。
      服务端操作数据库的时候每个的增删查改操作都和数据库做了一个连接,就是在做这些操作的时候经常报Connection对象为空的错。某个操作的代码如下:
        /**
 * 初始化表格
 */
private void initLabels() {
ssdao = new StudentStateDAO();
labels = new JLabel[60];
for(int i =1;i<labels.length+1;i++){
String ip = SaveUserProperties.read(i+"");
StudentState ss = ssdao.findStuStateByIP(ip);
if(ss!=null){
int state = ss.getStuLoginstate();
labels[i-1] = state==1?new JLabel("<html><font size='4' color='black'>在线</html>",new ImageIcon(path + "array.JPG"),SwingConstants.CENTER):new JLabel("<html><font color='red'>离线</html>",SwingConstants.CENTER);;
labels[i-1].setBorder(BorderFactory.createEtchedBorder());
labels[i-1].setToolTipText("<html>" +
                "<table bgcolor='white'>" +
                  "<tr align='left'>" +
                   "<td >"+
                      "学号:" +
                     "</td>"+ 
                     "<td>"+
                     ss.getStuNumber() +
                     "</td>"+ 
                   "</tr>" + 
                   "<tr align='left'>" +
                   "<td >"+
                      "姓名:" +
                     "</td>"+ 
                     "<td>"+
                     ss.getStuName() +
                     "</td>"+ 
                   "</tr>" +
                   "<tr align='left'>" +
                   "<td >"+
                      "IP:" +
                     "</td>"+ 
                     "<td>"+
                     ss.getStuIp() +
                     "</td>"+ 
                   "</tr>" +
                   "<tr align='left'>" +
                   "<td >"+
                      "正在操作实验:" +
                     "</td>"+ 
                     "<td>"+
                     (ss.getStuOperate()==null?"无": ss.getStuOperate()) +
                     "</td>"+ 
                   "</tr>" + 
                 "</table>" +
               "</html>");
centerPanel.add(labels[i-1]);
}else{
labels[i-1] = new JLabel("<html><font size='4' color='gray'>离线</html>",new ImageIcon(path + "arrayout.JPG"),SwingConstants.CENTER);
labels[i-1].setBorder(BorderFactory.createEtchedBorder());
centerPanel.add(labels[i-1]);
}
       /**
 * 根据ip查询学生状态
 * 
 * @param ip
 * @return 学生状态对象
 */
public StudentState findStuStateByIP(String ip) {
DBConnection dbconn=new DBConnection(null);
StudentState stuState = null;
ResultSet rs = null;
StringBuffer sql = new StringBuffer();
sql
.append("select s_number,s_name,s_loginstate,s_operate,s_opertime from on_student_state where s_ip='");
sql.append(ip).append("'");
try {
rs = dbconn.executeQuery(sql.toString());

if (rs.next()) {
stuState = new StudentState();
stuState.setStuIp(ip);
stuState.setStuLoginstate(rs.getInt("s_loginstate"));
stuState.setStuName(rs.getString("s_name"));
stuState.setStuNumber(rs.getString("s_number"));
stuState.setStuOperate(rs.getString("s_operate"));
stuState.setStuOpertime(rs.getString("s_opertime"));
}
return stuState;
} catch (SQLException e) {
Log.log("数据库连接出错,请检查数据库连接!");
} finally {
if (rs != null) {
rs = null;
}
if (dbconn != null) {
dbconn = null;
}
}
return stuState;
}