扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
jsp中加载jdbc驱动:
成都网站建设、网站设计的关注点不是能为您做些什么网站,而是怎么做网站,有没有做好网站,给成都创新互联一个展示的机会来证明自己,这并不会花费您太多时间,或许会给您带来新的灵感和惊喜。面向用户友好,注重用户体验,一切以用户为中心。
Java加载JDBC的实现方法:
通过调用Class.forName()方法可以显式地加载一个驱动程序。该方法的入口参数为要加载的驱动程序。例如:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")语句加载了SUN 公司开发的JDBC-ODBC 桥接器。对数据库进行连接的时候,驱动管理器(DriverManager)会使用这个被加载的驱动程序。通过DriverManager 的getDriver()方法可以获得已经加载的驱动程序信息。程序代码要求:
1.编写useDBDriver 类的基本框架,在该类中仅包括main()方法,在main()方法中加载驱动程序。
2.程序代码如下:
public class useDBDriver
{
public static void main(String arg[])
{
try
{
//初始化并加载JDBC-ODBC 驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Enumeration enum=DriverManager.getDrivers();
//显示驱动程序信息
while(enum.hasMoreElements())
{
System.out.println(enum.nextElement());
}
//处理加载数据库中可能出现的异常
}
catch(java.lang.Exception exec)
{
System.out.println("加载数据库驱动程序出现异常");
}
}
}
3.因为程序中使用了JDBC 类和Enumeration 类,所以要引入的包有:
import java.sql.*;
import java.util.*;
三种加载方式
1.Class.forName(“com.mysql.jdbc.Driver”);
2.DriverManager.registerDriver(new com.mysql.jdbc.Driver())
3.System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver”);
你这个程序是一个stand alone的程序,所以你把mysql-connector-java-5.0.5-bin.jar放到tomcat/common/lib目录下肯定是不对的。放到jre/lib/ext也不一定会加载。如果你用IDE开发的话,在Classpath中把mysql-connector-java-5.0.5-bin.jar添加进去执行就OK了,如果不是的话,你需要在执行的时候这么写(比如你放到d:\)
java -cp d:\mysql-connector-java-5.0.5-bin.jar data
可能你还没有理解什么是 JDBC, 个人感觉 JDBC 就像是一个协议,规定了一些具体的接口和方法,而 JDBC 的驱动,也就是你说的具体到每个数据库的驱动程序,是对这个协议的具体实现。
1. 这个驱动是怎样加载的? 直接实例化,但是并没有使用这个对象呀!驱动加载到哪儿了?
驱动不是在实例化的时候加载的,你知道连接数据库的时候会使用
Connection con = DriverManager.getConnection(String uri);
如果你看 DriverManager 的源码就会发现,它会先跟句 uri (就是 每个数据库不同的一个字符串,也可以说是特定数据库的 key) 去得到具体的驱动名称和 Class 的名字,然后使用 ClassLoader 加载这个驱动类。至于 ClassLoader 怎么找到 ClassPath 下面的类,这是另外一个故事了。
2. 并且我试着把加载驱动的代码去掉,依然可以连接数据库读取数据没有错误,这个驱动的生存期是怎样的?
因为你去的不是加载的地方。这个驱动存在于每次你获取 connection 的时候,也就说每次你跟数据库的互动(增删改查),都需要这个驱动类参与。
3. 加载SQLServer的驱动是这样写,还可以直接new
com.microsoft.sqlserver.jdbc.SQLServerDriver();
try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch (ClassNotFoundException ex) { System.err.println(ex.getMessage());}
为什么大家这样写,这是直接先把这个类加载啦,但是获取连接的时候还是会去加载,至于 Java 虚拟机是不是重新加载,这又是另外一个故事啦。
所以,写不写这个都行,因为这不是必须的步骤。
建议看看 JDBC ( )的定义,看看 DrvierManager 源码。一切都在代码里。
Java语言本身只提供了数据库连接和操作接口,而实现这些接口的就是数据库厂商了,所以每次你要连接数据库就必须下载对应数据库厂商的JDBC驱动,也就是接口实现程序。这个需要持久的预设环境,就是你必须告诉你的程序你的接口实现程序在哪。也就是哪个jdbc驱动程序的包在哪,java程序在连接数据库之前需要通过反射机制创建jdbc驱动程序包中的所有类。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流