java JDBC 的一点疑惑。 Class.forName(String className) API:返回与带有给定字符串名的类或接口相关联的 Class 对象。感觉这句没什么用,返回的对象也没有用到 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Class.forName("类的全路径") ;当然有用啦,保证你加载驱动类到jvm,主要是防止你没有加载到jvm就直接使用 这句的作用在于其执行了你参数表示的类里的static块你反编译下你的jdbc driver jar包,然后找到参数所表示的类,里面会有个static块,大部分代码都是如下:DriverManager.regist.....你也可以显式的去执行这个代码,而不用forName 就是一个加载对象而已,你去new 你括号里面写的东西是一样的 加载连接数据库的驱动jar包 加载对应的java类,可以执行其static块以及static变量的赋值 Class.forName是对类的六个主动使用中的一种,会导致类的初始化,即会导致类的静态变量的初始化和静态代码块的执行 Class.forName(),用到了反射的机制。 你怎么确定你没有用到JDBC驱动?童鞋,眼睛看到的东西并不一定是真的...要知道有种东西叫static代码块,基于ClassLoader的规则,static代码块会在类被加载的时候执行另外,还要看你的JDBC版本JDBC4以后存在一个叫ServiceProvider的东西这个东西会检测所有加载的JAR文件是否支持一个叫身份认证服务,这个服务可以自动加载需要的JDBC类型也就是说,高版本下,是不需要自己手动执行Class.forName(JDBC DRIVER)这个动作的 Class.forName(""),通过java的反射的机制,从而保证你加载驱动类到jvm,然后直接调用指定的类。 这个是加载数据库的驱动个,不用怎么去理解它,就是用JDBC连接数据库的时候 有个包对吧,一个压缩包,拷贝到bin的文件夹里面,然后用Class.forName();加载驱动 才可以连接 加载了驱动你才能 DriverManager.getConnection(url) 这和Java虚拟机的类加载机制有关(ClassLoader),当你要用到一个类的时候(比如:使用new关键字,或调用某一个类的静态方法),虚拟机才会试图去相应的类路径将相应的class字节码文件加载到内存中,并生成一个Class对象。而你在写JDBC程序时,使用DriverManager.getConnection(...)获得一个数据库连接的时候,底层会去查找实现了jdbc接口的驱动厂商,所以如果你没有将驱动加载到内存中,调用该方法时,就会抛找不到驱动的异常。有关JVM类加载机制,可以参考这篇文章:http://blog.csdn.net/xyang81/article/details/7292380 一般在web应用程序中,JDBC等一些组件会由Application的类加载器所加载,所以当应用程序部署在容器中就不需要写特别加载的语句;但是有时我们需要进行单元测试,而这些测试往往发生在部署到容器之前,为了引起不必要的麻烦,我们通常都会加上这句,以确保drive的加载。DriverManager.regist和Class.forClass的作用相同,所以只需其中任何一个就可以了。 关于迭代器Iterator的问题,请教: 请教关于ant的一些问题 如何才能轻松学好JAVA 怎样显示按钮的快捷键? 新手问题 關於Graphics g = getGraphics();(新人第一次發帖,請不吝賜教:) 类型转换问题---------为什么出错???? 初学weblogic 区别是什么? proxy软件如何才能让用户输入用户名和口令 关于java多线程的问题。。新人求解答 求助文件内容的读取
童鞋,眼睛看到的东西并不一定是真的...
要知道有种东西叫static代码块,基于ClassLoader的规则,static代码块会在类被加载的时候执行另外,还要看你的JDBC版本
JDBC4以后存在一个叫ServiceProvider的东西
这个东西会检测所有加载的JAR文件是否支持一个叫身份认证服务,这个服务可以自动加载需要的JDBC类型
也就是说,高版本下,是不需要自己手动执行Class.forName(JDBC DRIVER)这个动作的
有关JVM类加载机制,可以参考这篇文章:http://blog.csdn.net/xyang81/article/details/7292380
但是有时我们需要进行单元测试,而这些测试往往发生在部署到容器之前,为了引起不必要的麻烦,我们通常都会加上这句,以确保drive的加载。DriverManager.regist和Class.forClass的作用相同,所以只需其中任何一个就可以了。