JDBC
JDBC是连接Java程序和数据库的纽带,JDBC的实现封装了与各种数据库服务器通信的细节。Java程序通过JDBC API来访问数据库。其中JDBC API位于java.sql包中,javax.sql包中包含了一些提供高级特性的API。
JDBC的实现包含三个部分:
JDBC驱动管理器:java.sql.DriverManager类。由Oracle公司实现,负责注册特定JDBC驱动器,以及根据特定驱动器建立与数据库的连接。
JDBC驱动器API:由Oracle公司制定,其中最主要的的接口是java.sql.Deriver接口。
JDBC驱动器:由数据库供应商或者其他第三方工具提供商创建,也称为JDBC驱动程序。JDBC驱动器实现了JDBC驱动器API负责与特定的数据库连接,以及处理通讯细节。JDBC驱动器可以注册到JDBC驱动管理器中。
两套API:
JDBC API:Java应用程序通过它来访问各种数据库
JDBC驱动器API:当数据库供应商为特定数据库创建JDBC驱动时,该驱动必须是按JDBC驱动器API
Java应用程序如果希望访问某种数据库,必须先获得相应的JDBC驱动器的类库。然后把它注册到JDBC驱动管理器中。Java应用程序必须通过JDBC驱动器来访问数据库,Java应用程序通过java.sql.DriverManager类与JDBC驱动器进行通信。应用程序只需要和JDBC API打交道,JDBC API依赖DriverManager来管理JDBC驱动程序。假如应用程序需要向一个Mysql数据库提交一条Sql语句,DriverManager类就会委派特定的MySql的驱动来执行这个任务;同理,假如应用程序需要向一个Oracle数据库提交,则会委派Oracle的驱动执行这个任务。
当Java应用程序希望访问某种数据库时,需要先向DriverManager类注册该数据库的驱动器类。
Java.sql包中的接口和类
JDBC API主要位于java.sql包中,关键的接口与类包括:
Driver接口和DriverManager类:前者表示驱动,后者表示驱动管理器。
Connection接口:表示数据库连接。
Statement接口:负责执行SQL语句
PreparedStatement接口:负责执行预准备的SQL语句
CallableStatement接口:负责执行SQL存储过程
ResultSet接口:表示SQL查询语句返回的结果集
1.Driver接口和DriverManager类
所有JDBC驱动器都必须实现Driver接口,在编写访问数据库的Java程序时,必须把特定数据库的JDBC驱动器类库加入到classpath中。
DriverManager类用来建立和数据库的连接和管理JDBC驱动器,DriverManager类的方法都是静态的。主要包括:
registerDriver(Driverdriver):在DriverManager中注册JDBC驱动
deregisterDriver(Driverdriver): 在DriverManager中注销JDBC驱动
getConnection(Stringurl,String user,String pwd):建立数据库连接,并返回表示数据库连接的Connection对象。
2.Connection接口
connecton接口代表Java程序和数据库的连接,Connection接口主要包括以下方法:
createStatement():创建并返回Satement对象
prepareStatement(Stringsql):创建并返回PreparedStatement对象
3.Statement接口
Statement接口提供了三个执行SQL语句的方法:
execute(String sql):执行各种SQL。该方法返回boolean类型的值。
executeUpdate(Stringsql):执行SQL的 insert\update\delete语句。该方法返回一个int类型,表示数据库中受影响的行数。
excuteQuery(Stringsql):执行SQL的select语句。该方法返回一个表示查询结果的ResultSet对象。
4. PreparedStatement接口
PreparedStatement接口继承了Statement接口,PreparedStatement用来执行预准备的SQL语句。在访问数据库的时候可能遇见这种情况,某条SQL 语句被多次执行,其中仅有参数不同:
以上SQL语句的格式为:
这种情况下使用PreparedStatement来执行SQL有以下优点:
简化程序
提高访问数据库的性能。PreparedStatement执行预准备的SQL语句,数据库只需要对这种SQL语句编译一次,然后就可以多次执行,
5. ResultSet接口
ResultSet接口表示select查询语句的得到的结果集。调用ResultSet对象的next()方法可以使游标定位到下一条记录。调用getXXX()方法,可以获得记录中某个字段的值。
事务处理
在Connection接口中提供了3个控制事务的方法:
setAutoCommit(boolean autoCommit):设置是否自动提交事务
commit():提交事务
rollback():回滚事务
在JDBC API 中,默认情况下为自动提交事务。也就是说,每一条操作数据库的SQL语句代表一个事务,如果操作成功,数据库将自动提交事务,否则就自动撤销事务。