您先帮我看一下这个代码我现在这个是数据库连接的类下面我有一个返回连接对象的方法我每次调用 这个 public static Connection getconn() 方法的时候都会返回一个不同的对象我把数据库连接对象声明成这样的private static  Connection conn(这样写会在几个人一起连接数据库的时候出现错误,我不明白为什么会出现错误,既然每次返回的都是不同的对象为什么不能加static,就算加了static 也是重新给它一个指向)一定要说的明白些 我实在想不通 为什么有static 修饰 Connection conn不行 谢谢了啊!!(最好能画一下内存图)public class GetDBtest {
 private static String url="jdbc:mysql://localhost:3306/test";
 private static String forname="com.mysql.jdbc.Driver";
 private  static String user="root";
 private static String password="root";
 private static GetDBtest db;
 private static  Connection conn;
 private GetDBtest(){
  try {
   Class.forName(forname);
   
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public static GetDBtest getdb(){
 if(db==null)
  db=new GetDBtest();
  return db;
 }
 public static Connection getconn(){
  try {
   conn=DriverManager.getConnection(url, user, password);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return conn;
  
 }
 
}

解决方案 »

  1.   

    public class GetDBtest {
     private static String url="jdbc:mysql://localhost:3306/test";
     private static String forname="com.mysql.jdbc.Driver";
     private static String user="root";
     private static String password="root";
     private static GetDBtest db;
     private static Connection conn;
     private GetDBtest(){
      try {
      Class.forName(forname);
       
      } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
     }
      

  2.   

    一般Connection都不设计为单例模式,因为这样会有很多后续问题在里面,我这也没什么好的例子,反正不行...
      

  3.   

    多线程问题
    try {
      conn=DriverManager.getConnection(url, user, password);
      } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      return conn;
    这里没有对conn进行同步,所以多个用户使用的时候会出问题
    用户A和B可能使用同一个conn(A用户执行return conn前,B用户重新对conn付了值),A关闭了,B却还在用,所以报错。这个东西从设计上就是错的
    conn不能使用单列的,在项目中应该采用连接池的设计