码迷,mamicode.com
首页 > 数据库 > 详细

java加载jdbc驱动三种方式的比较

时间:2018-03-01 20:07:08      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:for   读取   result   creat   方式   database   cli   eve   gets   

平时连接数据库的时候首先要加载jdbc驱动,这一步骤其实有三种方式,他们的区别?优劣?

 

快速了解三种加载方式

  1. Class.forName(“com.mysql.jdbc.Driver”);

  2. DriverManager.registerDriver(new com.mysql.jdbc.Driver())

  3. System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver”);

注释:

  第二种与第三种注册的方法看起来更加的直接与好理解。

  但是,第一种与第三种方法可以脱离jdbc的驱动进行编译,第二种方法不可以的,它一定要有jdbc的驱动才可以通过编译,这样对我们的程序就有很多的不好之处,为程序换数据库会带来麻烦,并且,Driver类中就有一个静态的代码块,只要我们执行了Driver类中的静态代码块,并把驱动的实例放入到Drivers的一个数组列表中,我们再调用方法registerDrever就相当于又向drivers列表中放了一次driver驱动,意思是加载了两次驱动,虽然这并不影响我们程序,但是这样做实在是没有必要,还会影响程序的运行。

  第三种虽然也可以脱离,但是方法参数设置相对来说较为复杂,它可以设置多个驱动,所以在加载单个驱动时,一般采用第一种方法

  第一种方法是通过Class把类先装载到java的虚拟机中,并没有创建Driver类的实例。好处在于能够在编译时不依赖于特定的JDBC Driver库,也就是减少了项目代码的依赖性,而且也很容易改造成从配置文件读取JDBC配置,从而可以在运行时动态更换数据库连接驱动。

 


1、Class.forName(“com.mysql.jdbc.Driver”)常用

 1 try{
 2        Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
 3        String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议
 4        Connection conn=DriverManager.getConnection(url,"username","password");
 5        Statement stmt=conn.createStatement();
 6        ResultSet rs=stmt.executeQuery("select * from tablename");
 7        while(rs.next()){//不断指向下一条记录
 8             System.out.println("DeptNo:"+rs.getInt(1));
 9             System.out.println("\tDeptName:"+rs.getString(2));
10             System.out.println("\tLOC:"+rs.getString(3));
11 }         
12     rs.close();
13     stmt.close();
14     conn.close();
15 }catch(ClassNotFoundException e){
16    System.out.println("找不到指定的驱动程序类!");
17 }catch(SQLException e){
18     e.printStackTrace();
19 }

 

2、DriverManager,看起来比较直观的一种方式,注册相应的db的jdbc驱动,3在编译时需要导入对应的lib

 1 try{
 2        new com.mysql.jdbc.Driver();//创建driver对象,加载数据库驱动
 3        String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议
 4        Connection conn=DriverManager.getConnection(url,"username","password");
 5        Statement stmt=conn.createStatement();
 6        ResultSet rs=stmt.executeQuery("select * from tablename");
 7        while(rs.next()){//不断指向下一条记录
 8             System.out.println("DeptNo:"+rs.getInt(1));
 9             System.out.println("\tDeptName:"+rs.getString(2));
10             System.out.println("\tLOC:"+rs.getString(3));
11 }         
12     rs.close();
13     stmt.close();
14     conn.close();
15 }catch(SQLException e){
16     e.printStackTrace();
17 }

 

还可以按如下方式注册:

DriverManager.register(new com.mysql.jdbc.Driver());
但是该方式注册了两次驱动,所以不建议使用。

3、通过系统的属性设置System.setProperty(“jdbc.driver”,”com.mysql.jdbc.Driver”);

 1 try{
 2        System.setProperty("jdbc.driver","com.mysql.jdbc.Driver");//系统属性指定数据库驱动
 3        String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议
 4        Connection conn=DriverManager.getConnection(url,"username","password");
 5        Statement stmt=conn.createStatement();
 6        ResultSet rs=stmt.executeQuery("select * from tablename");
 7        while(rs.next()){//不断指向下一条记录
 8             System.out.println("DeptNo:"+rs.getInt(1));
 9             System.out.println("\tDeptName:"+rs.getString(2));
10             System.out.println("\tLOC:"+rs.getString(3));
11 }         
12     rs.close();
13     stmt.close();
14     conn.close();
15 }catch(SQLException e){
16     e.printStackTrace();
17 }

 

 

java加载jdbc驱动三种方式的比较

标签:for   读取   result   creat   方式   database   cli   eve   gets   

原文地址:https://www.cnblogs.com/Xieyang-blog/p/8489400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!