一、概述
JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构造的API
Jdbc从物理结构上说就是Java语言访问数据库的一套接口集合
从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。
驱动程序按照工作方式分为四类:
1、JDBC-ODBC bridge + ODBC 驱动
JDBC-ODBC bridge 桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译成访问数据库命令。
优点:可以利用现存的ODBC数据源来访问数据库
缺点:从效率和安全性的角度来说比较差。不适合用于实际项目。
2、基本于本地API的部分Java驱动
应用程序通过本地协议跟数据库打交道。然后将数据库执行的结果通过驱动程序中的Java部分返回给客户端程序。
优点:效率较高
缺点:安全性较差
3、纯Java的网络驱动
(中间协议) (本地协议)
app JDBC 中间服务器 DB
缺点:两段通信,效率比较差
优点:安全性较好
4、纯Java本地协议:通过本地协议用纯Java直接访问数据库。
特点:效率高,安全性好
二、Jdbc几个重要的接口
在Jdbc中包括了两个包:java.sql和javax.sql
(1)java.sql包:提供访问数据基本的功能。
这个包中的类和接口主要针对基本的数据库编程,如生成连接、执行语句以及准备语句和运行批处理查询等。同时
也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。
(2)javax.sql包:提供扩展功能
这个包中的类和接口主要为数据方面的高级操作提供接口和类。如连接管理、分布式事务和旧有的连接提供了更好
的抽象,它引入了容器管理的连接池,分成式事务和行集等。
API 说明
Connection 与特定数据库的连接(会话)。能够通过getMetaDate方法获得数据库提供的信息。
所支持的SQL语法、存储过程和此的功能等信息。代表了数据库。
Driver 每人驱动程序类必须实现的接口,每个数据库驱动程序也都应该提供一个实现Driver接口的实现
DriverManager(Class)管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载在
“jdbc.drivers"系统属性中引用的驱动程序。只是一个辅助类,是工具。
Statement 用于执行静态SQL语句并返回其生成结果的对象
PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句预编译并且存储在
PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。
CallableStatement 用来访问数据库中存储过程。它提供了一些方法来指定语句所使用的输入/输出参数。
ResultSet 指的查询返回的数据库结果集。
ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象。
注:除了标出的Class,其它均为接口,每个都是‘java.sql.'包下的
三、JDB编程步骤
(1)注册驱动(只做一次)
(2)建立连接(Connectio)
(3)创建执行SQL的语句(Statement或PreparedStatement)
(4)执行SQL语句
(5)处理执行结果(ResultSet)
(6)释放资源
(一)注册驱动
A。Class.forName("com.mysql.Driver");
推荐这种方式,不会对具体的驱动类产生依赖。
B。DriverManager.registerDriver(com.mysql.jdbc.Drver");
会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
C。System.setPoroperty("jdbc.drivers","driver1:drvier2");
虽然不会对具体的驱动类产生依赖;但注册不太方便,很少使用。
(二)建立连接(Connection)
Connection conn = DriverMager.getConnection(url,user,passwor);
url格式:
JDBC:子协议:子名称//主机名:端口/数据库名?属性=属性值&
User,password可以用"属性=属性值"方式告诉数据库;
其他参数如:
userUnicode=true&characterEncoding=GBk
(三)创建执行SQL的语句(Statement)
A:Statement
Statement st = conn.createStatement();
st.executeQuery(sql);
B:PreparedStatement
String sql = "select * from table_name where col_name=?";
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1,"col_value");
ps.executeQuery();
四、处理执行结果(ResultSet)
ResultSet rs = statement.executeQuery(sql);
while(rs.next){
rs.getString("col_name");
rs.geInter("col_name");
}
五、释放资源
释放ResultSet,Statement,Connection
数据库连接(Connection)非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭
将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。