JDBC
//////////2016-12-5 ~ 2016-12-6///////////
int study_data(){
JDBC(Java DataBase Connectivity):
一种执行SQL语句的Java API
JDBC三件事:建立数据库连接,发送SQL语句,返回处理结果
JDBC模型:
JDBC API:提供了应用程序对JDBC的管理连接
JDBC Driver API:支持JDBC管理到驱动器连接
JDBC常见组件:
DriverManager(类):管理数据库驱动程序的列表
Driver(接口):处理与数据库服务器通信
Connection(接口):接触数据库的所有方法
Statement:可以使用这个接口常见的对象的SQL语句提交到数据库
ResultSet:这些对象保存到数据库后,执行使用上对象的SQL查询中检索数据
SQLException:发生在一个数据库应用程序的任何错误
Driver Manager:
管理JDBC的基本服务,注册数据库驱动程序,建立连接等
内部维护一个Driver队列
任何数据库驱动程序需要实现向驱动管理器注册自身的静态代码块
Class.forName(driver_class)加载驱动
Connection:
实例通过启动管理器获得
连接数据库管理系统提供应用程序基本的操作数据的方法
Statement:
用于把SQL语句发送到DBMS
由Connection对象汇总的creatStatement方法所创建
对查询语句来说,可以使用executeQuery()
对于创建,删除,修改语句,使用的方法是executeUpdate()
execute(),executeQuery(),executeUpdate()的区别:
executeQuery():
用于产生单个结果集的语句,例如 SELECT 语句
executeUpdate():
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
execute():
用于执行返回多个结果集、多个更新计数或二者组合的语句。
execute方法应该仅在语句能返回多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组合时使用。
ResultSet:
数据库结果集的数据表,通常通过执行查询数据库的语句生成
ResultSet对象生命依赖于创建他的Statement
ResultSet提供一个可向前或向后移动的游标
ResultSet接口提供用于从当前检索列值的获取方法检索列编号从1开始
ResultSet可用于更新或插入塑聚,但不建议使用
PreparedStatement:
继承自Statement接口,每一个实例中包含已编译的SQL语句
由Connection实例的prepareStatement()创建
对于Statement对象拥有更快的执行效率
提供参数化查询方法,避免发生SQL注入攻击
SQL注入攻击(SQL Injection):
源自程序当中的SQL语句拼接
拼接特定的字符串时SQL语句当中的条件查询失效
CallableStatement:
对象为所有的饿DBMS提供了一种以标准行事调用存储过程的方法
继承自PreparedStatement,同样含有预编译的SQL
由Connection实例的prepareCall()方法长生实例对象
提供结果参数(OUT类型的输出参数)
JDBC批处理:
JDBC批处理是JDBC性能改进的主要手段
Statement.addBatch():
Statement.addBatch(String sql):将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。通过调用方 法 executeBatch 可以批量执行此列表中的命令。
Statement.executeBatch():将一批命令提交给数据库来执行,如果全部命令执行成功, 则返回更新计数组成的数组。
JDBC驱动就是JDBC API吗?
API 是一个标准的功能列表或参考实现方法,它是接口。
JDBC 驱动则是实现这些功能的类库,它是实现。
比如 API 会说 statement.executeQuery("select 1 from dual");
而驱动程序则要求把用户期望的功能实现它,
这时 oracle 和 DB2 或 mysql 驱动程序实现的方法就会不一样。
}