Java8 JDBC改进
 
 
 在Java 8中,Java在JDBC API中进行了两项重大更改。
 
  1、JDBC-ODBC桥已被删除。Oracle不支持JDBC-ODBC桥。 Oracle建议您使用数据库供应商提供的JDBC驱动程序,而不要使用JDBC-ODBC Bridge。
 
 2、在JDBC 4.2中添加了一些新功能。 Java JDBC 4.2引入了以下功能: 
 
添加了REF_CURSOR支持。 
添加java.sql.DriverAction接口 
对DriverManager类中的deregisterDriver方法进行安全检查 
添加java.sql.SQLType接口 
添加java.sql.JDBCType枚举 
添加对大量更新的支持 
更改现有接口 
行集1.2: 列出了JDBC RowSet的增强功能。 
 
 
 Java JDBC DriverAction 
 
 当要通过DriverManager通知驱动程序时,必须实现此接口。它添加到java.sql程序包中,并且仅包含一个抽象方法。
 
 DriverAction方法
 
 
 
   
   | 方法 | 说明 | 
 
   
   | void deregister() | DriverManager.deregisterDriver(Driver)调用此方法以通知JDBC驱动程序已注销。 | 
 
 
 
  deregister方法仅应由JDBC驱动程序使用,而不能由应用程序使用。
 
 建议JDBC驱动程序不要在公共类中实现DriverAction。
 
 如果在调用deregister方法时存在到数据库的活动连接,则具体取决于连接是关闭还是允许继续。调用此方法后,驱动程序是否会限制其创建与数据库的新连接,调用其他Driver方法或引发SQLException的能力是特定于实现的。
 
 
 Java JDBC4.2 DriverAction示例
 
 
  
  
import java.sql.*;  
// implementing DriverAction interface
class JdbcExample implements DriverAction{  
  // implementing deregister method of DriverAction interface
  @Override
  public void deregister() {
    System.out.println("Driver deregistered");
  }
  public static void main(String args[]){
    try{
      // Creating driver instance
      Driver driver = new com.mysql.jdbc.Driver();
      // Creating Action Driver
      DriverAction da = new JdbcExample();
      // Registering driver by passing driver and driverAction
      DriverManager.registerDriver(driver, da);
      // Creating connection
      Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/student","root","mysql");
      //Here student is database name, root is username and password is mysql
      Statement stmt=con.createStatement(); 
      // Executing SQL query
      ResultSet rs=stmt.executeQuery("select * from user");  
      while(rs.next()){  
        System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getString(3));  
      }
      // Closing connection
      con.close();  
      // Calling deregisterDriver method
      DriverManager.deregisterDriver(driver);
    }catch(Exception e){ System.out.println(e);}  
  }  
  
}  
 
   
  
 输出: 
 
 
  
  
1  Arun  25
2  irfan  22
3  Neraj kumar  25
Driver deregistered
 
   
  
 
 Java JDBC SQLType 
 
 此接口用于标识通用SQL类型,JDBC类型或供应商特定的数据类型。
 
 它提供了以下方法。
 
 
 
   
   | 方法 | 说明 | 
 
   
   | String getName() | 它返回代表SQL数据类型的SQLType名称。 | 
 
   
   | String getVendor() | 它返回支持此数据类型的供应商的名称。通常返回的值是该供应商的软件包名称。 | 
 
   
   | Integer getVendorTypeNumber() | 它返回数据类型的供应商特定类型编号。 | 
 
 
 
 
 Java JDBCType 
 
 它是一个枚举,它定义用于标识通用SQL类型(称为JDBC类型)的常量。它扩展了java.lang.Enum并实现了java.sql.SQLType。
 
 JDBCType字段
 
 下表包含在JDBCType中定义的常量。
 
 
 
   
   | 枚举常量 | 说明 | 
 
   
   | public static final JDBCType ARRAY | 它标识通用SQL类型ARRAY。 | 
 
   
   | public static final JDBCType BIGINT | 它标识通用SQL类型BIGINT。 | 
 
   
   | public static final JDBCType BIT | 它标识通用SQL类型BIT。 | 
 
   
   | public static final JDBCType BLOB | 它标识通用SQL类型BLOB。 | 
 
   
   | public static final JDBCType BOOLEAN | 它标识通用SQL类型BOOLEAN。 | 
 
   
   | public static final JDBCType CHAR | 它标识通用SQL类型CHAR。 | 
 
   
   | public static final JDBCType CLOB | 它标识通用SQL类型CLOB。 | 
 
   
   | public static final JDBCType DATALINK | 它标识通用SQL类型DATALINK。 | 
 
   
   | public static final JDBCType日期 | 它标识通用SQL类型DATE。 | 
 
   
   | public static final JDBCType DECIMAL | 它标识通用SQL类型DECIMAL。 | 
 
   
   | public static final JDBCType DISTINCT | 它标识通用SQL类型DISTINCT。 | 
 
   
   | public static final JDBCType DOUBLE | 它标识通用SQL类型DOUBLE。 | 
 
   
   | public static final JDBCType FLOAT | 它标识通用SQL类型FLOAT。 | 
 
   
   | public static final JDBCType INTEGER | 它标识通用SQL类型INTEGER。 | 
 
   
   | public static final JDBCType JAVA_OBJECT | 它表示SQL类型是特定于数据库的,并且已映射到可以通过getObject和setObject方法访问的Java对象。 | 
 
   
   | public static final JDBCType LONGNVARCHAR | 它标识通用SQL类型LONGNVARCHAR。 | 
 
   
   | public static final JDBCType NCHAR | 它标识通用SQL类型NCHAR。 | 
 
   
   | public static final JDBCType NCLOB | 它标识通用SQL类型NCLOB。 | 
 
   
   | public static final JDBCType NULL | 它标识通用SQL值NULL。 | 
 
   
   | public static final JDBCType NUMERIC | 它标识通用SQL类型NUMERIC。 | 
 
   
   | public static final JDBCType NVARCHAR | 它标识通用SQL类型NVARCHAR。 | 
 
   
   | public static final JDBCType OTHER | 它表示SQL类型是特定于数据库的,并且已映射到可以通过getObject和setObject方法访问的Java对象。 | 
 
   
   | public static final JDBCType REAL | 它标识通用SQL类型REAL。标识通用SQL类型VARCHAR。 | 
 
   
   | public static final JDBCType REF | 它标识通用SQL类型REF。 | 
 
   
   | public static final JDBCType REF_CURSOR | 它标识通用SQL类型REF_CURSOR。 | 
 
   
   | public static final JDBCType ROWID | 它标识SQL类型ROWID。 | 
 
   
   | public static final JDBCType SMALLINT | 它标识通用SQL类型SMALLINT。 | 
 
   
   | public static final JDBCType SQLXML | 它标识通用SQL类型SQLXML。 | 
 
   
   | public static final JDBCType STRUCT | 它标识通用SQL类型STRUCT。 | 
 
   
   | public static final JDBCType TIME | 它标识通用SQL类型TIME。 | 
 
   
   | public static final JDBCType TIME_WITH_TIMEZONE | 它标识通用SQL类型TIME_WITH_TIMEZONE。 | 
 
   
   | public static final JDBCType TIMESTAMP | 它标识通用SQL类型TIMESTAMP。 | 
 
   
   | public static final JDBCType TIMESTAMP_WITH_TIMEZONE | 它标识通用SQL类型TIMESTAMP_WITH_TIMEZONE。 | 
 
   
   | public static final JDBCType TINYINT | 它标识通用SQL类型TINYINT。 | 
 
   
   | public static final JDBCType VARBINARY | 它标识通用SQL类型VARBINARY。 | 
 
   
   | public static final JDBCType VARCHAR | 它标识通用SQL类型VARCHAR。 | 
 
 
 
 JDBCType方法
 
 
 
   
   | 方法 | 说明 | 
 
   
   | public String getName() | 它返回代表SQL数据类型的SQLType名称。 | 
 
   
   | public String getVendor() | 它返回支持此数据类型的供应商的名称。 | 
 
   
   | public Integer getVendorTypeNumber() | 它返回数据类型的供应商特定类型编号。 | 
 
   
   | public static JDBCType valueOf(int type) | 它返回与指定的Types值相对应的JDBCType。如果此枚举类型不包含具有指定Types值的常量,则抛出IllegalArgumentException。 | 
 
   
   | public static JDBCType valueOf(String name) | 它返回带有指定名称的该类型的枚举常量。该字符串必须与用于声明此类型的枚举常量的标识符完全匹配。如果此枚举类型没有指定名称的常量,则抛出IllegalArgumentException。如果参数为null,则抛出NullPointerException。 | 
 
   
   | public static JDBCType[] values() | 它按声明顺序返回包含此枚举类型的常量的数组。此方法可用于遍历常量。 |