`
liyx985
  • 浏览: 216030 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

连接数据库驱动时的.newInstance()

 
阅读更多
   在连接数据库驱动时有这样一句话,
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
.newInstance()一般情况加不加没什么区别,不过一般都加上,这是主动将driverName载入虚拟机,成为运行于'全局'的实例,
如果只是driverName dn = new driverName();
那只有在调用此类时才会装载入虚拟机,运行完后可能会被虚拟机垃圾回收



new与newInstance()的区别?
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的 区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用 等软件设计思想。

  Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:

   class c = Class.forName(“Example”); 
  factory = (ExampleInterface)c.newInstance(); 

  其中ExampleInterface是Example的接口,可以写成如下形式:

   String className = "Example"; 
  class c = Class.forName(className); 

  factory = (ExampleInterface)c.newInstance(); 

  进一步可以写成如下形式:

   String className = readfromXMlConfig; //从xml 配置文件中获得字符串 
  class c = Class.forName(className); 

  factory = (ExampleInterface)c.newInstance(); 

  上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类 Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。

  从 JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类 已经加载; 2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。

  现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法 加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。

  最后用最简单的描述来区分new关键字和newInstance()方法的区别:

  newInstance: 弱类型。低效率。只能调用无参构造。

  new: 强类型。相对高效。能调用任何public构造。
分享到:
评论

相关推荐

    java连接数据库字符串

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //Sql Server7.0/2000数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //DB2数据库 Class....

    jdbc笔记整理 sql

    将数据库的 JDBC 驱动加载到 classpath 中,在基于 JAVAEE 的 WEB 应用库产品的 JDBC 驱动复制到 WEB-INF/lib 下 . 加载 JDBC 驱动,并将其注册到 DriverManager 中,下面是一些主流数 //Oracle8/8i/9iO 数据库 ...

    Javabean封装数据库

    //加载数据库驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //数据库连接url String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; //数据库...

    access jar驱动连接数据库

    access jar驱动连接数据库

    JDBC数据库连接大全

    JDBC连接Oracle数据库需要使用Oracle的JDBC驱动程序。驱动程序的类名为oracle.jdbc.driver.OracleDriver。连接的URL格式为jdbc:oracle:thin:@localhost:1521:orcl,其中orcl为数据库的SID。用户和密码分别为test和...

    sqljdbc jsp连接数据库驱动

    直接导入包使用即可,代码如下,详细代码在压缩包里 try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance

    java数据库连接详细

    Class.forName(Driver).new Instance(); Connection con=DriverManager.getConnection(URL,Username,Password); Microsoft SQL Server 2.0驱动(3个jar的那个): String Driver=...

    jsp连接各种数据库代码及读取数据实例

    在 Web 应用程序中,连接数据库是一个非常重要的步骤,而 JSP 技术正是解决这个问题的利器。本文将详细介绍如何使用 JSP 连接各种数据库,包括 MySQL、Sql Server 7.0/2000、DB2、Informix、Sybase、PostgreSQL、...

    Access_JDBC30.jar --Java JDK1.8实现与Access数据库连接

    Java写了一个连接Access数据库的桌面程序,百度很长时间发现jdk1.8没有rt.jar,没法通过第一种方式jdbc:odbc方式连接access数据库,可以通过第四种方式驱动直连access。 实现步骤①外部jar包(Access_JDBC30.jar)导入...

    如何在Servlet中连接数据库

    d = (Driver) Class.forName(driverName).newInstance(); con = DriverManager.getConnection("jdbc:oracle:thin:ndb/ndb@111.222.1.36:1521:PC36"); stmt = con.createStatement(); String sqlstr = "select ...

    jsp连接数据库大全

    一定将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里建一个表test,有两个字段比如为test1,test2,可以用下面SQL建 create table test(test1 varchar(20),test2 varchar(20) 然后向这个表写入一条测试...

    jsp数据库连接jtds使用和java环境变量设置

    Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance(); String sConn="jdbc:jtds:sqlserver://localhost:1433/ch03"; String user = "sa"; String password = "123"; conn = DriverManager.get...

    连接sql数据库的jdbc类

    // 通过构造方法加载数据库驱动 static { try { Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance(); } catch (Exception ex) { System.out.println("数据库加载失败"); } } // ...

    各种数据库的连接和指导

    MySQL: ... //驱动程序 String URL="jdbc:mysql://localhost:3306/db_name"; //连接的URL,db_name为... Class.forName(Driver).new Instance(); Connection con=DriverManager.getConnection(URL,Username,Password);

    各种JDBC连接数据库的常用代码

    MySQL: ... //驱动程序 String URL="jdbc:mysql://localhost:3306/db_name"?useUnicode=true&characterEncoding=UTF-8; //连接的URL,db_name为数据库名,注意修改编码... Class.forName(Driver).new Instance();

    JAVA连接FileMaker完整工程

    包函FileMaker数据库Java连接驱动 修改工程中的FileMaker安装地址就 可以用JAVA操作FileMaker 数据库 Driver d = (Driver)Class.forName("com.filemaker.jdbc.Driver").newInstance(); con = DriverManager.get...

    SQL-JDBC驱动

     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  System.out.println("数据库驱动程序注册成功!");  String url ="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=...

    JDBC详解HTML-JDBC.pp

    1、JDBC(Java Database Connection):java连接数据库统一接口API,底层主要通过直接的JDBC驱动和 JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合...

    JAVA通过JDBC连接ORACLE9I

    我们需要配置环境变量,加载驱动程序,连接数据库,执行SQL语句,处理异常等。通过这种方式,JAVA程序可以连接和操作ORACLE9I数据库。 八、相关知识点 * JDBC(Java Database Connectivity) * ORACLE9I数据库 * ...

    jdbc连接代码

    // 定义连接数据库对象conn Connection conn = null; // 定义执行sql语句对象stmt Statement stmt = null; //定义结果集对象rs,用来保存查询的结果 ResultSet rs = null; try { // 通过反射...

Global site tag (gtag.js) - Google Analytics