Class.forName("com.mysql.jdbc.Driver");为什么我上面那句不写,任然可以照常连接数据库?

解决方案 »

  1.   

    这个是要看JDK的版本,比较新的JDK版本是不需要写这句的,当然,写了也不会错。
      

  2.   

    看我的连接池:
    package cn.itcast.jdbc.datasource;
    /*
     * 创建连接池
     */import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.LinkedList;public class MyDataSource { private static String url = "jdbc:mysql://localhost:3306/jdbc";
    private static String user = "root";
    private static String password = "root";

    private LinkedList<Connection> connectionsPool = new LinkedList<Connection>();

    //构造方法,创建连接池(初始化里面有10个连接)
    public MyDataSource(){
    try{
    Class.forName("com.mysql.jdbc.Driver");
    for(int i=0;i<10;i++){
    this.connectionsPool.addLast(this.createConnection());   //创建10个连接,并把他们加到队列里面
    }
    }catch(SQLException e){
    throw new ExceptionInInitializerError(e);
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{

    }
    }
    //创建一个连接的语句,为了给创建连接池调用
    private Connection createConnection() throws SQLException{
    return DriverManager.getConnection(url,user,password);
    }

    //获取一个连接
    public Connection getConnection(){
    return this.connectionsPool.removeFirst();  //获取并移除此列表的第一个元素
    }

    //释放的时候把用过的连接加到尾部
    public void free(Connection conn){
    this.connectionsPool.addLast(conn);
    }}
      

  3.   

    你确定?我用的JDK7最新版的,以前一直没注意过这个问题
      

  4.   

    这个是要看JDK的版本,比较新的版本是不需要写这句话就可以的。
      

  5.   

    我之前培训的时候老师没写这句话就正常运行,而我们学生不写这句话就不能运行,后来助教告诉我们是JDK版本的问题
      

  6.   


    这句话加载一个类到jvm中,一般是数据库驱动类,这个数据库驱动类中一定有个静态方法去系统中注册自己的数据库。新的JDK如果把对应的数据库驱动都注册了,那肯定不需要了。
      

  7.   

    Class.forName的作用就是加载驱动程序类“com.mysql.jdbc.Driver”,实际上,这不是加载该类的唯一方式,如果你没有显示的调用Class.forName加载驱动程序类,你程序中的DriverManager类也会尝试加载在 系统属性(存放在java.lang.System中)"jdbc.drivers"中引用的驱动程序类。
    你看看你的项目中有properties文件指定了属性jdbc.drivers么?