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的用法,为什么不把实例句柄给某个人。
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的用法,为什么不把实例句柄给某个人。
是类.静态方法的调用方式,这个类方法实现了数据库驱动的加载功能,调用数据库之前要加载
Class.forName(driverClassName);是不是相当于下面的话?
import com.microsoft.sqlserver.jdbc.SQLServerDriver;谢谢回复的朋友
调用 forName("X") 将导致命名为 X 的类被初始化。
你要感觉不好理解就用Class.forName(driverClass).newInstance();
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是不管你内存中是否有这个对象都会创建一个新的对象,也是说会在内存中开辟一个新的内存空间!
Driver oraDriver = new oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(oraDriver);我的理解是驱动程序对象在创建时已经默认调用了DriverManager.registerDriver(oraDriver);方法,所以不需要获取这个Class.forName的返回值了。
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);