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() |
它按声明顺序返回包含此枚举类型的常量的数组。此方法可用于遍历常量。 |