MySQL 笔记-DriverManager 类与 Driver 类
来源:互联网 发布:php 九九乘法表 表格 编辑:程序博客网 时间:2024/06/06 22:53
一、DriverManager 类
所有方法:
//注册驱动DriverManager.registerDriver(Driver driver);DriverManager.registerDriver(Driver driver, DriverAction da);//da 为调用deregisterDriver 类方法时执行的驱动事件//获取驱动DriverManager.getDriver(String url);//获取特定数据库的对应的驱动,url格式:jdbc:subprotocol:subnameDriverManager.getDriver();//注销驱动DriverManager.deregisterDriver(Driver driver);//获取Connection 对象DriverManager.getConnection(String url);//url 格式同上DriverManager.getConnection(String url, Properties info);//info 为连接信息值对,至少包含user与password。DriverManager.getConnection(String url, String user,String password);//设置有效时间DriverManager.setLoginTimeout(int seconds);DriverManager.getLoginTimeout();//设置日志输出位置DriverManager.setLogStream(PrintStream out);//设置日志输出位置。已淘汰,采用setLogWriterDriverManager.getLogStream();DriverManager.setLogWriter(PrintStream out);DriverManager.getLogWriter();
此处主要了解与日志相关的两个方法:
DriverManager.setLogWriter(PrintStream out);DriverManager.getLogWriter();
PrintStream 类:
常用构造方法:
PrintWriter pw=new PrintWriter(String fileName);//fileName 所指文件不存在时自动新建PrintWriter pw=new PrintWriter(File fileName);PrintWriter pw=new PrintWriter(OutputStream os);常用实例方法:
print系列方法;//print 方法实际是调用了write(int c)方法append系列方法;write 系列方法format 系列方法;//可见写入时还可进行格式化
二、forName 与 registerDriver 方法注册数据库驱动的异同
转载自:http://xm-king.iteye.com/blog/798331
原文:
在学习JDBC的时候,通常有两种方式去注册数据库驱动程序(这里采用MySQL数据库),分别为:
DriverManager.registerDriver(new Driver()); Class.forName("com.mysql.jdbc.Driver");那么这两种方式有什么异同呢?首先我们到DriverManager中去看一下:
public static synchronized void registerDriver(java.sql.Driver driver) throws SQLException { if (!initialized) { initialize(); } DriverInfo di = new DriverInfo(); di.driver = driver; di.driverClass = driver.getClass(); di.driverClassName = di.driverClass.getName(); // Not Required -- drivers.addElement(di); writeDrivers.addElement(di); println("registerDriver: " + di); /* update the read copy of drivers vector */ readDrivers = (java.util.Vector) writeDrivers.clone(); }
很明显,DriverManager将我们需要注册的驱动程序信息封装成DriverInfo放进了一个writeDrivers中,这个writeDrivers是DriverManager中声明的一个static类型Vector变量。在getConnection的时候会再用到。
那么Class.forName("com.mysql.jdbc.Driver")是如何注册驱动程序的呢,我们知道Class.forName("类名")的主要作用是向虚拟机实例化一个Class实例,我们看一下com.mysql.jdbc.Driver的源代码。
public class Driver extends NonRegisteringDriver implements java.sql.Driver { // ~ Static fields/initializers // --------------------------------------------- // // Register ourselves with the DriverManager // static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
在 com.mysql.jdbc.Driver中有一段静态代码块,是向 DriverManager注册一个Driver实例。这样在 Class.forName("com.mysql.jdbc.Driver")的时候,就会首先去执行这个静态代码块,于是和DriverManager.registerDriver(new Driver())有了相同的效果。
那么对于这两种方法,在这里,我推荐使用第二种,即Class.forName("类名")的方式。原因有两点:
1、在我们执行DriverManager.registerDriver(new Driver())的时候,静态代码块也已经执行了,相当于是实例化了两个Driver对象。
2、 DriverManager.registerDriver(new Driver())产生了一种对MySQL的一种依赖。而Class.forName的方式我们完全可以在运行的时候再动态改变。
0 0
- MySQL 笔记-DriverManager 类与 Driver 类
- Drivermanager类
- DriverManager类
- 通过Driver与DriverManager连接数据库
- JDBC 之 DriverManager 类
- JDBC中加载驱动类与DriverManager的关系
- DriverManager.registerDriver(new com.mysql.jdbc.Driver())为什么Driver会创建两次
- Connection接口及DriverManager类
- MySQL JDBC驱动 - Class.forName和java.sql.DriverManager.registerDriver(new Driver())的区别
- DriverManager连接MySQL数据库
- no suitable driver at java.sql.DriverManager
- DataSource与DriverManager的比较
- Class.forName与DriverManager区别
- org.gjt.mm.mysql.Driver与com.mysql.jdbc.Driver
- 关于jdbc的数据库驱动类DriverManager.getConnection()参数
- 关于jdbc的数据库驱动类DriverManager.getConnection()参数
- 关于jdbc的数据库驱动类DriverManager.getConnection()参数
- 关于jdbc的数据库驱动类DriverManager.getConnection()参数
- Java的char默认值,打印时是否为空格
- Linux常用命令(三)
- 牛人的博客
- mysql服务启动报错1607
- Java设计模式(2):简单工厂模式
- MySQL 笔记-DriverManager 类与 Driver 类
- 开关问题
- android 轮播图
- 【JQ】 validate验证表单时多个name相同的元素的解决办法
- 程序员面试金典--面试23之求出满二叉树a和b点的最近公共祖先的编号
- EmpServlet案例--使用重定向和路径匹配访问路径(一个Servlet处理多个请求)
- @ResponseBody 零散知识
- C/C++中如何获取数组的长度?
- AngularJS 内置服务