系统是xp sp2而且是正版的,才刚装不久,里面有很多重要服务要做!
而且这种问题不是总发生,程序跑几天就有可能遇到.代价太大,关键是我想知道问题出在呢?

解决方案 »

  1.   

    不要使用jdbc-odbc桥了,现在谁还用那个啊。
      

  2.   

    真奇怪的错误啊,它提示你代码有很多地方错误!只可能是你的代码有问题啊,这于用jdbc-odbc无关!
      

  3.   

    代码测试过了,
    Connection conUp=DriverManager.getConnection("jdbc:odbc:SqlHandle");
    Statement stmtUp=conn.createStatement();
    stmtUp.executeUpdate("UPDATE CurrentRec SET yiled=0");
    stmtUp.close();
    conUp.close();
    第二句的异常,程序直接退出.
    我测试过,同一个表,同时多线程写入和读出没问题啊!
      

  4.   

    出现这个问题,应该是 你在使用一个关闭了 Connection这种情况一般出现在 多线程的程序中.你仔细检查一下,是不是 有的线程 把其他线程正在使用的 Connection 关闭了!
      

  5.   

    恩,用的jar放到javahome\ext下试试呢?
      

  6.   

    奇怪的是他并不是总是出现,有时候又没有!“应该是虚拟机出现了问题,让注册表的东西改动了”by wenchaohu213
    是 什么 意思?
      

  7.   

    "恩,用的jar放到javahome\ext下试试呢?",by knight_yl(knight_yl)  
    也没有用到什么jar啊,用到的控制串口的comm.jar必须放到lib目录下呀!
    劳烦大家都帮我想一下,java forume也有人提过此类问题,但是没人回答,不知是不是被
    报告过bug.
      

  8.   

    猜测1.多线程情况下,你不用连接池,需要自己保证你的连接的线程安全2.可能是你把数据连接的变量写成servlet的成员变量了,这样多用户访问时,其他用户可能修改了该变量
      

  9.   

    import java.sql.*;
    import java.net.URL;
    import java.io.*;import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.StringTokenizer;
    import java.util.*;import timer.Scheduler;
    import timer.SchedulerTask;
    import timer.DailyIterator;class ServerTask{
    public ServerTask(int hourOfDay, int minute, int second) {
            this.hourOfDay = hourOfDay;
            this.minute = minute;
            this.second = second;
            System.out.println("ServerTask thread was started!\n" +
             "The time is "+hourOfDay+":"+minute+":"+second+".");
        }

    public void start(){
    scheduler.schedule(new SchedulerTask(){
    public void run(){
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }catch(java.lang.Exception ex){ex.printStackTrace();}
    //---------------
    //SqlHandle sqlHndl=new SqlHandle();
    dayDeal();
    //---------------
    }
    private void dayDeal(){
    System.out.println("Data update! " +
                        "It's " + dateFormat.format(new Date()));
    dayRecUpdate();
    dayState();
    }
    private void dayRecUpdate(){
    String dateVal=Utility.getDate();
    try{
    Connection conn=DriverManager.getConnection("jdbc:odbc:SqlHandle");
    Statement stmt=conn.createStatement();
    ResultSet rs=stmt.executeQuery(sqlUp);
    while(rs.next()){
    String newDay="INSERT INTO DayRec VALUES('"+rs.getString("wellid")+"','"+dateVal+"','"+rs.getInt("yiled")+"')";
    Connection conIner=DriverManager.getConnection("jdbc:odbc:SqlHandle");
    Statement stmtIner=conn.createStatement();
    stmtIner.executeUpdate(newDay);
    stmtIner.close();
    conIner.close();
    }
    if(rs!=null) rs.close();
    stmt.close();
    conn.close();
    }catch(SQLException e){e.printStackTrace();}
    }
    private void dayState(){
    Vector vMsgQue=new Vector();
    Vector vPrint=new Vector();
    try{
    Connection conn=DriverManager.getConnection("jdbc:odbc:SqlHandle");
    Statement stmt=conn.createStatement();

    ResultSet rss=stmt.executeQuery(sqlUp);

    while(rss.next()){
    String id=rss.getString("wellid");
    int timeLen=(int)rss.getInt("yiled")/60;
    String idArea=id.substring(0,2);
    String areaName=Utility.queryAreaName(idArea);
    String sqlNo="SELECT number FROM cellphone WHERE district='"+idArea+"'";
    Connection conIner=DriverManager.getConnection("jdbc:odbc:SqlHandle");
    Statement stmtIner=conn.createStatement();
    ResultSet rsNo=stmtIner.executeQuery(sqlNo);
    String sendCon=areaName+":"+id+"今日产油"+Integer.toString(timeLen)+"小时!";

    while(rsNo.next()){
    String cellNo=rsNo.getString("number");

    vMsgQue.addElement(cellNo+"/"+sendCon);

    }
    vPrint.addElement(sendCon);
    rsNo.close();
    stmtIner.close();
    conIner.close();
    }
    rss.close();

    stmt.close();
    conn.close();
    Connection conUp=DriverManager.getConnection("jdbc:odbc:SqlHandle");
    Statement stmtUp=conn.createStatement();
    stmtUp.executeUpdate("UPDATE CurrentRec SET yiled=0");
    -------------------------------------出问题的语句;
    stmtUp.close();
    conUp.close();
    }catch(SQLException e){e.printStackTrace();} PrintMsg printObj=new PrintMsg(vPrint);
    Thread printThrd=new Thread(printObj);
    printThrd.start();
    SndThrd sndObj=new SndThrd(vMsgQue);
    Thread sndThrd=new Thread(sndObj);
    sndThrd.start(); }

    },new DailyIterator(hourOfDay,minute,second));
    }

    private final Scheduler scheduler = new Scheduler();
        private final SimpleDateFormat dateFormat =
            new SimpleDateFormat("dd MMM yyyy HH:mm:ss.SSS");
        private final int hourOfDay, minute, second;
        private final String sqlUp="SELECT wellid,yiled FROM CurrentRec";}
    这是一个定时启动的线程,每天定时执行一次!
    看看可能是什么问题?
    数据库当然还有别的线程和进程在访问!
      

  10.   

    楼主,最近我也碰到了一次,你是不是打开Applet的时候出现这样的问题?我解决的方法是在CMD方式下先用JAVA_HOME\bin目录下面的Appletviewer命令来打开一次Applet,然后再双击那个Applet就可以解决了。至于什么原因,现在我也解释不了。