JDBC中常用的类和接口
java.sql包中提供了丰富的接口、类,还有一些Enum枚举对象和Exception常见异常用于数据库编程。利用这些类和接口可以放拜年的访问并处理存储在数据库中的数据。本节将介绍一些常用的JDBC接口和类,这些接口和类都在java.sql包中。
一、DriverManager类
DriverManager类是JDBC的管理层,用来管理数据库中的驱动程序。在使用Java操作数据库之前,必须使用Class类的静态方法forName(String className)加载能够连接数据库的驱动程序。
1、加载MySQL数据库驱动程序
加载MySQL数据库驱动程序(包名为mysql-connector-java-8.0.22.jar)的代码如下:
try{
Class.forName("com.mysql.cj.jdbc.Driver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
2、加载Oracle数据库驱动程序
加载Oracle数据库驱动程序(包名为ojdbc6.jar)的代码如下:
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
3、加载SQL Server 2000数据库驱动程序
加载SQL Server 2000数据库驱动程序(包名为msbase.jar、mssqlserver.jar、mustily.jar)的代码如下:
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
4、加载SQL Server 2005以上版本的数据库驱动程序
加载SQL Server 2005以上版本数据库驱动程序(包名为sqljdbc4.jar)的代码如下:
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
加载要连接的数据库驱动程序后,Java会自动将驱动程序的实例注册到Drivermanager类中,这时可以通过DriverManager类的getConnection()方法与指定的数据库建立连接,getConnection()方法的语法如下:
getConnection(String url,String user,String password)
- url:要连接的数据库的URL;
- user:连接数据库的用户名;
- password:连接数据库的密码;
例如,使用DriverManager类的getConnection()方法,与本地的MySQL数据库建立连接:
Drivermanager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","password");
- 本地的Ip地址:127.0.0.1
- MySQL默认端口:3306
- 数据库名称:test
- 用户名:root
- 密码:password
例如,使用DriverManager类的getConnection()方法,与本地的SQLServer 2000数据库建立连接:
Drivermanager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test","sa","password");
例如,使用DriverManager类的getConnection()方法,与本地的SQLServer 2005以上版本数据库建立连接:
Drivermanager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=test","sa","password");
例如,使用DriverManager类的getConnection()方法,与本地的Oracle数据库建立连接:
Drivermanager.getConnection("jdbc:oracle:thin:@//127.0.0.1:1521/test","system","password");
二、Connection接口
Connection接口代表Java端口与指定的数据库之间的连接。在连接的上下文中执行SQL语句并返回结果。
1、继承关系与子接口
|--- java.sql
|--- Wrapper
|--- Connection
2、Connection概述
官方API是这样描述Connection接口的:
一个连接对象的数据库,需要能够提供其表的描述、其支持的SQL语法、其存储过程、其功能等的信息。该信息是通过getMetaData方法获得的。
在配置连接时,JDBC应用程序应该使用合适的连接方法,如setAutoCommit
或setTransactionIsolation
。当有JDBC方法可用时,应用程序不应该直接调用SQL命令来更改连接的配置。默认情况下,连接对象处于自动提交模式,这意味着它在执行每个语句后自动提交更改。如果自动提交模式已被禁用,则必须显式调用commit
方法以提交更改;否则,将不会保存数据库更改。
使用JDBC 2.1核心API创建的新连接对象最初有一个与之关联的空类型映射。用户可以在此类型映射中为UDT输入自定义映射。当使用ResultSet
方法从数据源检索UDT时。getObject
方法将检查连接的类型映射,以查看是否有该UDT的条目。如果是,getObject
方法将UDT映射到指定的类。如果没有条目,UDT将使用标准映射进行映射。
用户可以创建一个新的类型映射,它是一个java.util.Map对象,在其中进行输入,并将其传递给可执行自定义映射的java.sql方法。 在这种情况下,该方法将使用给定的类型映射,而不是与连接关联的类型映射。
例如,以下代码片段指定将SQL类型ATHLETES映射为Java编程语言中的Athletes类。 该代码段为Connection对象con检索类型映射,将条目插入其中,然后将具有新条目的类型映射设置为连接的类型映射。
3、Connection关键字
Connection接口的关键字如下:
修饰符/类型 | 关键字 | Field and Description |
---|---|---|
static int | TRANSACTION_NONE |
表示不支持事务的常量。 |
static int | TRANSACTION_READ_COMMITTED |
指示防止脏读的常量;可能会发生不可重复读取和幻像读取。 |
static int | TRANSACTION_READ_UNCOMMITTED |
指示可能发生脏读、不可重复读和幻像读的常数。 |
static int | TRANSACTION_REPEATABLE_READ |
一个常数,指示防止脏读和不可重复读;可能会发生幻像读取。 |
static int | TRANSACTION_SERIALIZABLE |
一个常数,表示防止脏读、不可重复读和幻影读。 |
4、Connection接口方法
(1)常用的方法
- createStatement():创建一个语句对象,用于向数据库发送SQL语句。
- createStatement(int resultSetType,int resultSetConcurrency):创建一个语句对象,该对象将生成具有给定类型和并发性的ResultSet对象。
- prepareStatement():创建用于向数据库发送参数化SQL语句的PreparedStatement对象。
- prepareCall(String sql):创建用于调用数据库存储过程的CallableStatement对象。
- isReadOnly():检索此连接对象是否处于只读模式。
- setReadOnly():将此连接置于只读模式,作为对驱动程序启用数据库优化的提示。
- commit():永久保存自上次提交/回滚以来所做的所有更改,并释放此连接对象当前持有的任何数据库锁。
- roolback():撤销在当前事务中所做的所有更改,并释放此连接对象当前持有的任何数据库锁。
- close():立即释放这个连接对象的数据库和JDBC资源,而不是等待它们被自动释放。
(2)所有方法概述*
修饰符/类型 | 描述 | |
---|---|---|
void | abort(Executor executor) |
终止打开的连接。 |
void | clearWarnings() |
清除为此连接对象报告的所有警告。 |
void | close() |
立即释放这个连接对象的数据库和JDBC资源,而不是等待它们被自动释放。 |
void | commit() |
永久保存自上次提交/回滚以来所做的所有更改,并释放此连接对象当前持有的任何数据库锁。 |
Array | createArrayOf(String typeName, Object[] elements) |
用于创建数组对象的工厂方法。 |
Blob | createBlob() |
构造一个实现Blob接口的对象。 |
Clob | createClob() |
构造实现Clob接口的对象。 |
NClob | createNClob() |
构造一个实现NClob接口的对象。 |
SQLXML | createSQLXML() |
构造一个实现SQLXML接口的对象。 |
Statement | createStatement() |
创建一个语句对象,用于向数据库发送SQL语句。 |
Statement | createStatement(int resultSetType, int resultSetConcurrency) |
创建一个语句对象,该对象将生成具有给定类型和并发性的ResultSet对象。 |
Statement | createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) |
创建一个语句对象,该对象将生成具有给定类型、并发性和可持有性的ResultSet对象。 |
Struct | createStruct(String typeName, Object[] attributes) |
用于创建结构对象的工厂方法。 |
boolean | getAutoCommit() |
检索此连接对象的当前自动提交模式。 |
String | getCatalog() |
检索此连接对象的当前目录名。 |
Properties | getClientInfo() |
返回一个列表,其中包含驱动程序支持的每个客户端信息属性的名称和当前值。 |
String | getClientInfo(String name) |
返回由名称指定的客户端信息属性的值。 |
int | getHoldability() |
检索使用此连接对象创建的ResultSet对象的当前可持有性。 |
DatabaseMetaData | getMetaData() |
检索DatabaseMetaData对象,该对象包含关于此连接对象表示连接的数据库的元数据。 |
int | getNetworkTimeout() |
获取驱动程序等待数据库请求完成的毫秒数。 |
String | getSchema() |
检索此连接对象的当前架构名称。 |
int | getTransactionIsolation() |
检索此连接对象的当前事务隔离级别。 |
Map<String,Class<?>> | getTypeMap() |
检索与此连接对象关联的映射对象。 |
SQLWarning | getWarnings() |
检索调用此连接对象时报告的第一个警告。 |
boolean | isClosed() |
检索此连接对象是否已关闭。 |
boolean | isReadOnly() |
检索此连接对象是否处于只读模式。 |
boolean | isValid(int timeout) |
如果连接没有关闭且仍然有效,则返回true。 |
String | nativeSQL(String sql) |
将给定的SQL语句转换为系统的本机SQL语法。 |
CallableStatement | prepareCall(String sql) |
创建用于调用数据库存储过程的CallableStatement对象。 |
CallableStatement | prepareCall(String sql, int resultSetType, int resultSetConcurrency) |
创建一个CallableStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象。 |
CallableStatement | prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) |
创建一个CallableStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象。 |
PreparedStatement | prepareStatement(String sql) |
创建用于向数据库发送参数化SQL语句的PreparedStatement对象。 |
PreparedStatement | prepareStatement(String sql, int autoGeneratedKeys) |
创建一个默认的PreparedStatement对象,该对象能够检索自动生成的键。 |
PreparedStatement | prepareStatement(String sql, int[] columnIndexes) |
创建一个默认的PreparedStatement对象,该对象能够返回由给定数组指定的自动生成的键。 |
PreparedStatement | prepareStatement(String sql, int resultSetType, int resultSetConcurrency) |
创建一个PreparedStatement对象,该对象将生成具有给定类型和并发性的ResultSet对象。 |
PreparedStatement | prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) |
创建一个PreparedStatement对象,该对象将生成具有给定类型、并发性和可持有性的ResultSet对象。 |
PreparedStatement | prepareStatement(String sql, String[] columnNames) |
创建一个默认的PreparedStatement对象,该对象能够返回由给定数组指定的自动生成的键。 |
void | releaseSavepoint(Savepoint savepoint) |
从当前事务中删除指定的保存点和后续的保存点对象。 |
void | rollback() |
撤销在当前事务中所做的所有更改,并释放此连接对象当前持有的任何数据库锁。 |
void | rollback(Savepoint savepoint) |
撤销在设置了给定的保存点对象之后所做的所有更改。 |
void | setAutoCommit(boolean autoCommit) |
将此连接的自动提交模式设置为给定状态。 |
void | setCatalog(String catalog) |
设置给定的目录名,以选择此连接对象的数据库的子空间,并在其中工作。 |
void | setClientInfo(Properties properties) |
设置连接的客户机信息属性的值。 |
void | setClientInfo(String name, String value) |
将由名称指定的client info属性的值设置为由值指定的值。 |
void | setHoldability(int holdability) |
将使用此连接对象创建的ResultSet对象的默认持有性更改为给定的持有性。 |
void | setNetworkTimeout(Executor executor, int milliseconds) |
设置连接或从连接创建的对象等待数据库响应任何请求的最长时间。 |
void | setReadOnly(boolean readOnly) |