PoolManager.getInstance();是注册驱动等于Class.forName(driverClassName)

解决方案 »

  1.   

    感觉你应该是连接数据库那出的问题吧!你使用线程new的话,一个实例会new好几次的!可能我表达的不准确!你可以先不连接数据库!只在线程里随便输出一个语句!然后启动这个线程,你会发现这个语句输出了多次!感觉你应该在数据库连接那用下单例吧!
      

  2.   

    new Thread(new OperateDB()).start();
    执行完后Main线程结束,子线程被强制结束了。
    你可以试试这样写:new Thread(new OperateDB()).start();
    Thread.sleep(10000);   //Main等待10秒
    System.out.println("主线程结束");
      

  3.   

    不知道我是否看错,也可能是由于没有看全部代码,可能会给错建议。我根据你给的代码。稍微创建其他代码来验证,
    class Test 
    {
    public static void main(String[] args) 
    {
    new Person().say();
    }
    class Person {
    public void say(){
    System.out.println("hello world!");
    }
    }
    }当编译时,会报错。
    class Test 
    {
    public static void main(String[] args) 
    {
    new Person().say();
    }
    class Person {
    public void say(){
    System.out.println("hello world!");
    }
    }
    }
    所以,我给你的建议是,把这个类调出去。像下面这样。
    class Test 
    {
    public static void main(String[] args) 
    {
    new Person().say();
    }
    }
    class Person {
    public void say(){
    System.out.println("hello world!");
    }
    }
      

  4.   

    执行完后Main线程结束,子线程被强制结束了。
      

  5.   

    表示..为嘛我看你的3个都没区别啊?还有哦,oracle,Sqlserver都是可以正常执行的,只是mysql不行
      

  6.   

    你注意看“}”这个,这个我在static void main下多了一个“}”,表明OperatorDB不是内部类。而我看到你上面所传的代码,发现OperatorDB是内部类。这个区别是很大的。所以你把这个OperatorDB类放到外面成一个类,而不是内部类,运行一下。看能否编译成功。这个能否说清楚了???