Hibernate学习(1):常规数据库操作

在学习Hibernate之前,有必要了解一下,不采用Hibernate,Java是怎么进行数据库操作的。先看如下一段代码:

try
   {
    Class.forName ( "oracle.jdbc.driver.OracleDriver" ) ;
     Connection conn= DriverManager.getConnection (
                         "jdbc:oracle:thin:@dbserver:1521:XXX" ,
                         "UserID" ,
                         "Password"
                         )
       String sSQL =  "Select * from Test_Table" ;
       Statement statement = conn.createStatement () ;
       ResultRest rs = statement.execute  ( sSQL ) ;
   }
   catch  ( ClassNotFoundException e )
   {
     e.printStackTrace () ;
   }
   catch  ( SQLException e )
   {
     e.printStackTrace () ;
   }
   finally
   {
     if  ( conn!= null )
     {
       try
       {
         if  ( statement!= null )
         {
           try
           {
             statement.close () ;
           }
           catch  ( SQLException e )
           {
             e.printStackTrace () ;
           }
         }
         conn.close () ;
       }
       catch  ( SQLException e )
       {
         e.printStackTrace () ;
       }
     }
   }

     这里有几个学习点: Class.forName( ), Connection, DriverManager, Statement,ResultRest。

    在学习Class.forName()之前,先说说DriverManager:DriverManager类是 JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。对于简单的应用程序,一般需要在此类中直接使用的唯一方法是DriverManager.getConnection。正如名称所示,该方法将建立与数据库的连接。JDBC 允许用户调用DriverManager 的方法 getDriver、getDrivers 和 registerDriver 及 Driver 的方法connect。但多数情况下,让 DriverManager 类管理建立连接的细节为上策。

    DriverManager类包含一列 Driver 类,它们已通过调用方法DriverManager.registerDriver 对自己进行了注册。所有Driver 类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时DriverManager类进行注册。这样,用户正常情况下将不会直接调用DriverManager.registerDriver;而是在加载驱动程序时由驱动程序自动调用。加载 Driver 类,然后自动在DriverManager 中注册的方式有两种:

  其中之一:通过调用方法 Class.forName。这将显式地加载驱动程序类。由于这与外部设置无关,因此推荐使用这种加载驱动程序的方法。以下代码加载类
    Class.forName ( "oracle.jdbc.driver.OracleDriver" ) ;

    现在回过来理解Class.forName这个方法:该方法返回的是一个类,要求JVM查找并加载指定的类。我们知道,有两种方式创建对象,一种是使用关键字new,另一种是newInstance方法。
    从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个 类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载 java API的那个加载器。

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

    用最简单的描述来区分new关键字和newInstance()方法的区别:
    newInstance: 弱类型。低效率。只能调用无参构造。
    new: 强类型。相对高效。能调用任何public构造。

先写到这,后面再说Statement,ResultRest等

你可能感兴趣的:(jvm,oracle,Hibernate,jdbc)