一、JDBC概述
1、Java Data Base Connectivity(java数据库连接)
2、组成包:java.sql.*;javax.sql.*;这两个包都包含在了JDK中。
3、还需要数据库的驱动,这些驱动就相当于对JDBC规范的实现
二、JDBC的编码步骤
1、把数据库的驱动加入到classpath中
2、开发步骤:
* 开发步骤:(必须记住的)
* 1、注册驱动
* 2、获取与数据库的链接
* 3、得到代表发送和执行SQL语句的对象 Statement
* 4、执行语句
* 5、如果执行的是查询语句,就会有结果集,处理
* 6、释放占用的资源
3、具体代码
三、JDBC中的主要接口或类
1、DriverManger类详解
1.1作用:a、注册驱动b、获取与数据库的链接
1.2改进注册驱动:(不能依赖具体的数据库驱动)
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
缺点:严重依赖具体的驱动类;会导致驱动被注册2次。
替代方案:Class.forName("com.mysql.jdbc.Driver");
1.3获取与数据库的链接
l 方式一:(推荐)
DriverManager.getConnection("jdbc:mysql://localhost:3306/day17", "root", "sorry");
jdbc:mysql://localhost:3306/day17 :SUN和数据库厂商定义的协议,具体的参考数据库的文档。
jdbc:mysql:///day17 (链接本机的默认端口3306)= jdbc:mysql://localhost:3306/day17
u 方式二:
l 方式三:
2、Connection简介
所有的与数据库的交互都是基于链接的基础之上的,因此该对象相当重要。
Statement stmt = conn.createStatement():创建向数据库发送sql的statement对象
3、Statement详解
作用:代表SQL语句;向数据库发送并执行SQL语句
常用方法:
ResultSet executeQuery(String sql):只适合查询,返回的是查询的结果集
int executeUpdate(String sql):适合DML,或者没有返回结果集的DDL,返回的是影响的记录行数
boolean execute(String sql):执行任何的SQL语句,返回的不是成功与否。有结果集的返回true,没有返回false。
4、ResultSet详解
作用:代表者查询语句的查询结果集
4.1遍历过程:有一个游标,如何遍历结果集,请看图
4.2如何获取列的数据
方式一:(推荐)
方式二:了解
4.3常用的方法:(改变游标位置的)
l boolean next():向后移动游标,同时返回该位置上有木有记录
l boolean previous():向前移动游标,同时返回该位置上有木有记录
l boolean absolute(int rowNum):定位到某行(第一行是1),同时返回该位置上有木有记录
l void beforeFirst():游标定位在第一行的前面
l void afterLast():游标定位在最后一行的后面
l last():直接定位到最后一行
小练习:取出最后一条记录
4.4遍历结果集打印到控制台木个鸟用,应该封装到JavaBean中
5、释放占用的资源
按照打开的顺序,以相反的方向进行释放。
Connection要尽量晚的创建和尽量早的释放。
为了保障资源能被释放,应该放到finally代码块中
四、JDBC的编码规范和工具类的提取
1、编写配置文件:
2、抽取了工具类
3、以后代码的编写
五、JDBC进行CRUD
六、利用JDBC改写用户注册案例
1、更改JavaWeb项目的访问路径(由其是拷贝的整个项目)
2、SQL注入的问题
3、解决:使用PreparedStatement
七、JDBC中的PreparedStatement
1、特点和作用
a、指示SQL语句的预编译。提高数据库的执行效率
b、防止SQL注入。给数据库的已经不是字符串了
c、语句中的参数可以使用占位符(?)
结论:能用PreparedStatement就不要使用Statement
八、理解Dao解耦的好处(很关键)
九、客户信息管理系统
用之前所学完成一个对单表的CRUD的JavaWeb项目
1、搭建开发环境:写配置文件,考jar包
2、建立JavaBean,建立业务接口
3、编写业务实现和dao接口及dao实现
4、对业务层和dao层进行测试
5、表现层