(1)jdbc中注册驱动,首先导入对应的包,例如mysql-connector-java-5.0.8-bin.jar。驱动包是java和具体数据库之间的连接桥梁,由数据库厂商开发。每一种数据库对应一款驱动jar,甚至每一个版本的数据库都有自己对应版本的驱动jar。

(2)java.sqlDriverManger类是Java的驱动管理类。管理一组JDBC驱动程序。

javax.sql.DataSource 接口是 JDBC 2.0 API中的新增内容,它提供了连接到数据源的另一种方法。使用DataSource对象是连接到数据源的首选方法。

DiverManager.class里有个属性drivers,它实际上是一个vector(向量)。可在列表中加入很多驱动,当DriverManager去取连接的时候,若果drivers里有很多驱动,它会把drivers里面的各个驱动的url和创建连接时传进来的url逐一比较,遇到对应的url,则建立连接。

注册驱动的三种方式:

(一)DriverManager.registerDriver(new com.mysql.jdbc.Driver());

会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

具体来说就是:

1,加载的时候注册一次驱动(原因请看第三中注册方式),实例化的时候又注册一次。所以两次。

2,由于实例化了com.mysql.jdbc.Driver.class,导致必须导入该类(就是要把这个类import进去),从而具体驱动产生了依赖。不方便扩展代码。

代码如下:

try{

new com.mysql.jdbc.Driver();//创建driver对象,加载数据库驱动

String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议

Connection conn=DriverManager.getConnection(url,"username","password");

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery("select * from tablename");

while(rs.next()){//不断指向下一条记录

System.out.println("DeptNo:"+rs.getInt(1));

System.out.println("\tDeptName:"+rs.getString(2));

System.out.println("\tLOC:"+rs.getString(3));

}

rs.close();

stmt.close();

conn.close();

}catch(SQLException e){

e.printStackTrace();

}

(二)System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");

通过系统的属性设置注册驱动

如果要注册多个驱动,则System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:com.oracle.jdbc.Driver");

虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。

代码如下:

try{

System.setProperty("jdbc.driver","com.mysql.jdbc.Driver");//系统属性指定数据库驱动

String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议

Connection conn=DriverManager.getConnection(url,"username","password");

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery("select * from tablename");

while(rs.next()){//不断指向下一条记录

System.out.println("DeptNo:"+rs.getInt(1));

System.out.println("\tDeptName:"+rs.getString(2));

System.out.println("\tLOC:"+rs.getString(3));

}

rs.close();

stmt.close();

conn.close();

}catch(SQLException e){

e.printStackTrace();

}

(三)

Class.forName("com.mysql.jdbc.Driver");( 关于这句代码的进一步理解请参看另一篇文章《从Class.forName()

到类的装载机制》)

推荐这种方式,不会对具体的驱动类产生依赖(就是不用import package了)。其实这个只是把com.mysql.jdbc.Driver.class这个类装载进去,但是关键就在于,在

这个类中,有个静态块,如下:

static{

try{

java.sql.DriverManager.registerDriver(new Driver());

}catch(SQLException e){

throw new RuntimeException("can't register driver!");

}

}

就是因为这个代码块,让类在加载的时候就把驱动注册进去了!

代码如下:

try{

new com.mysql.jdbc.Driver();//创建driver对象,加载数据库驱动

String url="jdbc:mysql://localhost:3306/databasename";//数据库连接子协议

Connection conn=DriverManager.getConnection(url,"username","password");

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery("select * from tablename");

while(rs.next()){//不断指向下一条记录

System.out.println("DeptNo:"+rs.getInt(1));

System.out.println("\tDeptName:"+rs.getString(2));

System.out.println("\tLOC:"+rs.getString(3));

}

rs.close();

stmt.close();

conn.close();

}catch(SQLException e){

e.printStackTrace();

}

附:Class.forName  的作用? 为什么要用?

按参数中指定的字符串形式的类名去搜索并加载相应的类, 如果该类字节码已经被加载过,则返回代表该字节码的 Class 实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类,则抛ClassNotFoundException。加载完这个 Class 字节码后,接着就可以使用 Class 字节码的 newInstance 方法去创建该类的实例对象了。        有时候,我们程序中所有使用的具体类名在设计时(即开发时)无法确定,只有程序运行时才能确定,这时候就需要使用 Class.forName 去动态加载该类,这个类名通常是在配置文件中配置的,例如,spring 的 ioc 中每次依赖注入的具体类就是这样配置的,jdbc 的驱动类名通常也是通过配置文件来配置的, 以便在产品交付使用后不用修改源程序就可以更换驱动类名。

3. mysql的注解驱动的三种方式_注册 Jdbc 驱动程序的三种方式及Class.forName 的作用...相关推荐

  1. 注册jdbc驱动程序的三种方式

    1.快速了解三种注册方式 Class.forName("com.mysql.jdbc.Driver"); DriverManager.registerDriver(new com. ...

  2. 西门子精智comfort系列面板下载程序的几种方法_参考手册(以太网+PN+USB方式)

    西门子精智comfort系列面板下载程序的几种方法_参考手册(以太网+PN+USB方式) 以太网及 PN/IE 方式下载 下载要求 以太网电缆 交叉线: 对电缆的具体要求最好采用T568B的交叉线序标 ...

  3. mysql驱动为什么自动加载_为什么JDBC中加载驱动要使用反射?

    原文链接:https://www.cnblogs.com/homejim/p/8076481.html 在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加 ...

  4. mysql数据库任务驱动式教程课后答案_正版二手 MySQL数据库任务驱动式教程 石坤泉 汤双霞 王鸿铭 人民邮电出版社 9787115362711...

    商品描述: 温馨提示:亲!旧书库存变动比较快,有时难免会有断货的情况,为保证您的利益,拍前请务必联系卖家咨询库存情况!谢谢!书名:MySQL数据库任务驱动式教程 编号:3428270 ISBN:978 ...

  5. mysql多表查询有几种方法_多表查询有几种方式

    多表查询有3种方式,分别是:1.传统方式,包括左外连接查询,右外连接查询 ,完全外链接查询:2.子查询方式,包括单行查询,多行查询:3.聚合查询方式,包括求和,平均查询,记录总数. 多表查询有3种方式 ...

  6. JDBC驱动程序的四种方式

    Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥.本地API驱动.网络协议驱动和纯JAVA驱动. 第一种驱动程序:JDBC-ODBC 桥 JDBC-ODBC 桥是一个JDBC 驱动, ...

  7. catv系统主要有哪三部分组成_你了解买车“三大件”之一的悬挂系统吗?家用车用什么悬挂系统?...

    ​买车大家都听说要买三大件好的,但是具体哪三大件呢?估计好多买车的人都说不上来,其实三大件也就是"发动机.变速箱.底盘(悬挂系统)". 发动机和变速箱之前跟大家有分享过,今天跟大家 ...

  8. 创建线程池的四种方式_创建线程到底有几种方式?

    很多时候,在项目中使用线程的情况很少,导致很多人只停想起最常见的两种创建线程的方法,即继承Thread类和实现Runnable接口. 而网络上大家有人认为是三种实现方式,也有人认为是四种实现,下面我们 ...

  9. 3. mysql的注解驱动的三种方式_上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。...

    1.引入依赖 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot- ...

  10. java 加载驱动3种方法_加载jdbc驱动程序的三种不同方式

    1.比较常用 try{ Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动 String url="jdbc:mysql:/ ...

最新文章

  1. 【每日一题】212. 单词搜索 II
  2. 实验十 配置EIGRP协议
  3. 十个免费的WEB压力测试工具
  4. [centos][ntp][administrator] chrony ntp
  5. linux字符驱动之自动创建设备节点
  6. LeetCode之最大回文串--动态规划
  7. 女人要的安全感到的是什么?
  8. java 文件上传 大小_java 上传文件大小转换为 GB/MB/KB/B
  9. 最受开发人员欢迎的JDBC接口
  10. 科大讯飞 开放平台 开发者 语音识别
  11. oracle手动 建库_Oracle Create the Database for 11g(手动创建数据库)
  12. oracle函数 length rpad lpad
  13. How to manually generate ssl certificate for own site in Linux
  14. 血淋淋的BUG:波音在软件开发上错在哪里?
  15. Hand Crafted 特征 PK 纯学习的特征提取方法
  16. 【计算机基础】中英文常用名词对照
  17. 谷歌浏览器打印不弹出预览直接打印机打印的方法
  18. 将数字1到9填入下面圆圈里,每个数字只使用一次,使得三角形三条边之和相等
  19. 详解Tomcat配置及使用
  20. Ext.form.TextField与Ext.form.TextArea

热门文章

  1. 湾区那些事儿 (二)
  2. android 延时摄影,当「延时摄影」和「镜头慢放」结合,手机视频从未有如此质感……#Android&iOS...
  3. matlab 柱状图 折线图,数据可视化分析(柱状图、折线图、热力图)
  4. 【语音识别】基于matlab GUI拨号语音识别【含Matlab源码 1753期】
  5. 除了iframe嵌套还有什么嵌套_嵌套了ROUND函数,为什么还会差1分钱,值得收藏
  6. Chrome插件GitZip(下载github项目中的部分文件)
  7. mysql 复制权限不够_解决不能mysqldump备份权限不够的问题
  8. datagrip 查看 blob_AppStore今日限免 不解锁屏幕通知中心查看日历等3款软件标题文章...
  9. 上海译文公布2019年“新书目录” 名家名译作品结集出版
  10. centos中,tomcat项目创建文件的权限研究