public class sqlBean {
private Connection conn = null;
private ResultSet rs = null;
private Statement stmt = null;
private String driverClassName;
private String url;
private String userName;
private String password;
public sqlBean() {// ///构造函数
try {
Config config = Config.getInstance(); driverClassName = config.getDriverClassName();
url = config.getUrl();
userName = config.getUserName();
password = config.getPassword();
Class.forName(driverClassName); } catch (java.lang.ClassNotFoundException e) {
System.err.println("加载驱动器有错误:" + e.getMessage());
System.out.print("执行插入有错误:" + e.getMessage());// 输出到客户端
}
}
}
我不理解Class.forName的用法,为什么不把实例句柄给某个人。

解决方案 »

  1.   

    以前做开发的,肤浅认识Class.forName(driverClassName);
    是类.静态方法的调用方式,这个类方法实现了数据库驱动的加载功能,调用数据库之前要加载
      

  2.   

    driverClassName   =  "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    Class.forName(driverClassName);是不是相当于下面的话?
    import   com.microsoft.sqlserver.jdbc.SQLServerDriver;谢谢回复的朋友 
      

  3.   

    你查查API,里面有句这样的描述:
    调用 forName("X") 将导致命名为 X 的类被初始化。 
      

  4.   

    你看看API,里面的解释很详细。用到了类加载器。
    你要感觉不好理解就用Class.forName(driverClass).newInstance();
      

  5.   

    通过类名字符串调用类实例。属于JAVA中的反射。
      

  6.   

    恩 JAVA中反射那块的知识 看看
      

  7.   

    支持是JAVA中的反射机制的相关内容,struts中的很多xml的配置文件都是通过java反射机制获得的
      

  8.   

    class.forName()是运用反射的原理创建对象通俗地说,平时我们创建对象都是用Studeng s = new Studeng()的方式,而class.forName()也是创建对象的一种方式,等你学了反射就知道了。现在你只要知道class.forName()是创建了一个对象就可以
      

  9.   

    Class.forName(driverClassName);就是初始化driverClassName类,在driverClassName中,一般会有一个static块,在块中有DriverManager.register...的语句,Class.forName(driverClassName);的时候,就执行了这条语句
      

  10.   

    --------------------------转载的---------------------
    Class.forName是用来获取Class的类类型 
    例如:class myclass 

    int Point; 
    public static void main(String[] args) 
    { Class obj=Class.forName(myclass); 
    System.out.println(obj.getClassName()); 
    //输出为"myclass"; 


    用到数据库就是用来加载驱动。 
    例如:用sql数据库建立jdbc-odbc桥 
    Class.forName("sun.Jdbc.Odbc.JdbcOdbc"); 
    创建连接 
    Connection=DriverManager.getConnection("jdbc:odbc:ODBC"); 
    ODBC为你建立的ODBC名  比如:
            Class c =Class.forName("ss.dd.bb.Bean"); Bean b = c.newInstace();
       和 Bean b = new Bean();效果一样      但是:forName("ss.bb.bean"), JVM会在classapth中去找对应的类,设定在classpath的类,在java启动的时候最先被加载,并将Class对象保存起来,这样forName创建对象时就不需要通过classloader再去读取该类的文件了。而new 一个对象,一般不需要该类在classpath中设定,但可能需要通过classlaoder来加载。
           当你确定此时内存中没有这个对象的时候,你就可以用class.forName();来创建一个对象,而假如new是不管你内存中是否有这个对象都会创建一个新的对象,也是说会在内存中开辟一个新的内存空间!
      

  11.   

    其实注册驱动程序有好几个方法,不一定就需要Class.forName,如下面两句话也是可以注册驱动的:
    Driver oraDriver = new oracle.jdbc.driver.OracleDriver();
    DriverManager.registerDriver(oraDriver);我的理解是驱动程序对象在创建时已经默认调用了DriverManager.registerDriver(oraDriver);方法,所以不需要获取这个Class.forName的返回值了。
      

  12.   

    多看看api吧
    Class.forName(driverClassName)返回的是static Class<?>类,
    你可以把赋给一个Class 对象。
    Class clazz=Class.forName(driverClassName);然后你可以根据这个类对象产生一个实例对象。Object obj=clazz.getConstructor().newInstance();当然这里用的无参的构造方法。如果想用带有参数的构造方法来生成对象,需要先获取Constructor对象Constructor constructor=clazz.getConstructor(parameterTypes);parameterTypes 参数是Class对象的一个数组,这些Class对象按声明顺序标识构造方法的形参类型。例如你的构造方法所带的参数为(String a,Integer b)Class [] parameterTypes =new Class[]{String.class, Integer.class};Constructor constructor=clazz.getConstructor(parameterTypes);然后调用Constructor对象的newInstance方法,Object[] objects=new Object[]{"test",1}; //objects为参数对象值的数组
    Object obj=constructor.newInstance(objects);