3. mysql的注解驱动的三种方式_注册 Jdbc 驱动程序的三种方式及Class.forName 的作用...
(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 的作用...相关推荐
- 注册jdbc驱动程序的三种方式
1.快速了解三种注册方式 Class.forName("com.mysql.jdbc.Driver"); DriverManager.registerDriver(new com. ...
- 西门子精智comfort系列面板下载程序的几种方法_参考手册(以太网+PN+USB方式)
西门子精智comfort系列面板下载程序的几种方法_参考手册(以太网+PN+USB方式) 以太网及 PN/IE 方式下载 下载要求 以太网电缆 交叉线: 对电缆的具体要求最好采用T568B的交叉线序标 ...
- mysql驱动为什么自动加载_为什么JDBC中加载驱动要使用反射?
原文链接:https://www.cnblogs.com/homejim/p/8076481.html 在JDBC详解系列(一)之流程中,我将数据库的连接分解成了六个步骤. JDBC流程: 第一步:加 ...
- mysql数据库任务驱动式教程课后答案_正版二手 MySQL数据库任务驱动式教程 石坤泉 汤双霞 王鸿铭 人民邮电出版社 9787115362711...
商品描述: 温馨提示:亲!旧书库存变动比较快,有时难免会有断货的情况,为保证您的利益,拍前请务必联系卖家咨询库存情况!谢谢!书名:MySQL数据库任务驱动式教程 编号:3428270 ISBN:978 ...
- mysql多表查询有几种方法_多表查询有几种方式
多表查询有3种方式,分别是:1.传统方式,包括左外连接查询,右外连接查询 ,完全外链接查询:2.子查询方式,包括单行查询,多行查询:3.聚合查询方式,包括求和,平均查询,记录总数. 多表查询有3种方式 ...
- JDBC驱动程序的四种方式
Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥.本地API驱动.网络协议驱动和纯JAVA驱动. 第一种驱动程序:JDBC-ODBC 桥 JDBC-ODBC 桥是一个JDBC 驱动, ...
- catv系统主要有哪三部分组成_你了解买车“三大件”之一的悬挂系统吗?家用车用什么悬挂系统?...
买车大家都听说要买三大件好的,但是具体哪三大件呢?估计好多买车的人都说不上来,其实三大件也就是"发动机.变速箱.底盘(悬挂系统)". 发动机和变速箱之前跟大家有分享过,今天跟大家 ...
- 创建线程池的四种方式_创建线程到底有几种方式?
很多时候,在项目中使用线程的情况很少,导致很多人只停想起最常见的两种创建线程的方法,即继承Thread类和实现Runnable接口. 而网络上大家有人认为是三种实现方式,也有人认为是四种实现,下面我们 ...
- 3. mysql的注解驱动的三种方式_上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。...
1.引入依赖 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot- ...
- java 加载驱动3种方法_加载jdbc驱动程序的三种不同方式
1.比较常用 try{ Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动 String url="jdbc:mysql:/ ...
最新文章
- 【每日一题】212. 单词搜索 II
- 实验十 配置EIGRP协议
- 十个免费的WEB压力测试工具
- [centos][ntp][administrator] chrony ntp
- linux字符驱动之自动创建设备节点
- LeetCode之最大回文串--动态规划
- 女人要的安全感到的是什么?
- java 文件上传 大小_java 上传文件大小转换为 GB/MB/KB/B
- 最受开发人员欢迎的JDBC接口
- 科大讯飞 开放平台 开发者 语音识别
- oracle手动 建库_Oracle Create the Database for 11g(手动创建数据库)
- oracle函数 length rpad lpad
- How to manually generate ssl certificate for own site in Linux
- 血淋淋的BUG:波音在软件开发上错在哪里?
- Hand Crafted 特征 PK 纯学习的特征提取方法
- 【计算机基础】中英文常用名词对照
- 谷歌浏览器打印不弹出预览直接打印机打印的方法
- 将数字1到9填入下面圆圈里,每个数字只使用一次,使得三角形三条边之和相等
- 详解Tomcat配置及使用
- Ext.form.TextField与Ext.form.TextArea
热门文章
- 湾区那些事儿 (二)
- android 延时摄影,当「延时摄影」和「镜头慢放」结合,手机视频从未有如此质感……#Android&iOS...
- matlab 柱状图 折线图,数据可视化分析(柱状图、折线图、热力图)
- 【语音识别】基于matlab GUI拨号语音识别【含Matlab源码 1753期】
- 除了iframe嵌套还有什么嵌套_嵌套了ROUND函数,为什么还会差1分钱,值得收藏
- Chrome插件GitZip(下载github项目中的部分文件)
- mysql 复制权限不够_解决不能mysqldump备份权限不够的问题
- datagrip 查看 blob_AppStore今日限免 不解锁屏幕通知中心查看日历等3款软件标题文章...
- 上海译文公布2019年“新书目录” 名家名译作品结集出版
- centos中,tomcat项目创建文件的权限研究