一个关于java数据库驱动包的小发现
2015-09-24 22:10
507 查看
之前一直都在用数据库的驱动jar包,却没有仔细看过。只知道Class.forName();去装载驱动类。
今天无意间想到Class.forName();不就是装载类嘛,难道引用的jar包里的类不会在虚拟机启动的时候被直接装载嘛?
然后写了点代码做了测试:
然后测试结果是即使不使用Class.forName();程序依旧可以正常读取数据库的数据,所以暂时认为jar包里的类会被装载。
但是又觉得不太对,如果我一个项目引用了非常多的jar包岂不是启动非常慢嘛。
然后去问问问别人,都说是jar包里的类只有在被用到的时候才加载。
但是有又如何解释驱动jar包里的Driver类中的静态代码块被执行的问题呢。
终于查到有关于驱动jar包这种现象的解释。
所以如果使用JDBC 4.0以上的版本,上图类似的文件存在, Class.forName();这一步可以省略。该文件的内容为本jar包中的驱动类的全名。
ps:此文为博主原创,未经允许不得转载。
今天无意间想到Class.forName();不就是装载类嘛,难道引用的jar包里的类不会在虚拟机启动的时候被直接装载嘛?
然后写了点代码做了测试:
package com.mariadb.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; //import org.mariadb.jdbc.Driver; public class Test { public static void main(String[] args) throws ClassNotFoundException, SQLException { // Class.forName("org.mariadb.jdbc.Driver"); //在新版的驱动包里有个文件取代了这句话的作用 Connection conn = DriverManager .getConnection("jdbc:mariadb://localhost:3306/test?user=root&password=bdqn"); Statement statement = conn.createStatement(); ResultSet rs = statement.executeQuery("SELECT * FROM `tb1`"); while (rs.next()) { System.out.println(rs.getInt(1) + "\t" + rs.getString(2)); } } }
然后测试结果是即使不使用Class.forName();程序依旧可以正常读取数据库的数据,所以暂时认为jar包里的类会被装载。
但是又觉得不太对,如果我一个项目引用了非常多的jar包岂不是启动非常慢嘛。
然后去问问问别人,都说是jar包里的类只有在被用到的时候才加载。
但是有又如何解释驱动jar包里的Driver类中的静态代码块被执行的问题呢。
终于查到有关于驱动jar包这种现象的解释。
所以如果使用JDBC 4.0以上的版本,上图类似的文件存在, Class.forName();这一步可以省略。该文件的内容为本jar包中的驱动类的全名。
ps:此文为博主原创,未经允许不得转载。
相关文章推荐
- Java基础知识强化74:正则表达式之分割功能 (扩展练习)
- 用代码窥探Java支持的语言
- Java 基础总结
- Java学习日记-2 零零碎碎
- [转载]java servlet过滤器控制frame框架中的页面跳转
- Java基础知识强化73:正则表达式之分割功能
- Android 开发在Eclipse提示信息 This element neither has attached source nor attached Javadoc
- java基金会 之 HashMap统计csvWord文档
- java编程——数据的加法
- 简单springMVC环境搭建
- java字符转换
- Java基础知识强化72:正则表达式之判断功能(手机号码判断 和 校验邮箱)
- JAVA学习第三天
- eclipse 缓解眼睛疲劳保护眼睛
- Java笔试选择题 1
- JAVA_配置篇
- Myeclipse 安装Aptana3.2 插件
- 第一次接触java
- eclipse struts2 错误及解决方法
- 10_mybatis与Spring的整合