传智播客---什么是JDBC 什么是DAO模式

来源:互联网 发布:网络监控能看到密码吗 编辑:程序博客网 时间:2024/05/21 07:55

在咱们传智播客日子一天天的在过,我的能力也在一天天中增长,我现在都能感觉到我能力的很大改变了,以前在别的学校培训的朋友见我的能力提升这么快,有的都从新来我们传智播客培训了,识时务者为俊杰,我觉得能来我们传智播客培训是一个最正确的选择!!!别在犹豫了,来吧和我们一起学习吧,一起从传智播客改变吧!!!

老样子继续给你们晒我学到的技术,不要羡慕哦!来了传智播客你也是这样哦!!!

学习JDBC 技术目的,使用Java技术操作数据库中数据记录

什么是驱动? 如果两个设备要进行通信,就需要满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信
如果没有JDBC,Java程序员需要面向各个数据库驱动接口编程,开发会很复杂 ; 因此sun
公司提供了一套统一JDBC接口规范,Java程序只需要使用JDBC就可以操作任何数据库,JDBC实现类由各个数据库厂商提供。
学习JDBC
1、jdbc就是使用java操作数据库接口规范;
 JDK中自带JDBC接口规范  java.sql
 数据库都需要驱动
 DriverManager 驱动管理类,用来加载驱动
 Connection 连接接口,连接到数据库
 Statement (PreparedStatement、CallableStatement) 数据库操作
 ResultSet 结果集接口,封装了sql语句执行后的结果
2、必须在工程中引入不同数据库驱动实现
JDBC API 详解
 1,DriverManager 类
 static void registerDriver(Driver driver) //传入一个Driver对象,注册一个JDBC驱动程序
 注意:DriverManager中可以同时注册多个JDBC驱动 例如:同时注册 mysql、oralce、db2 驱动 ,通过对JDBC URL分析,决定采用哪个驱动
 static Connection getConnection(String url, String user, String password) //根据jdbc url 和 用户名、密码获得一个数据库连接
 //url:连接数据库的地址基本写法是:"jdbc:mysql://localhost:3306/数据库名字"
 //user:连接数据库的名字
 //password:连接数据库的密码
 实际开发中,不推荐使用DriverManager.registerDriver 会导致驱动注册两次、会使得程序依赖 具体数据库API
 推荐使用 :Class.forName("com.mysql.jdbc.Driver"); 加载Driver类时完成驱动注册,使得程序不依赖MySQL的API
 URL:的解释
  jdbc:mysql://localhost:3306/dataBase
  这里 jdbc: 是JDBC连接协议
  这里 mysql:// 是mysql数据库连接协议,JDBC子协议
  localhost:3306 主机和端口
  dataBase 数据库
3.MySQL数据库与Oracle数据库URL写法:
 MYSQL jdbc:mysql://localhost:3306/day13
 ORACLE jdbc:oracle:thin:@localhost:1521:sid
4.使用JDBC连接Oracle数据库:
 1) 安装Oracle
 2) 启动 Oracle服务 (必须开启 TNSListener、service)
 3) 通过命令行 连接Oracle
 cmd> sqlplus system/123
 *** Oracle 里面没有数据库概念,一个数据库就是一个服务service
 和mysql不同,不用创建数据库,每个用户具有单独表空间(相当于数据库)
 system 就是oracle 超级管理员 相当于 mysql数据库的root用户
 123就是管理员的密码
5.在工程引入oracle的jdbc驱动:
 Oracle的驱动是跟着安装包的
 安装目录\app\oracle\product\10.2.0\server\jdbc\lib\ojdbc14.jar
 Oracle驱动类 oracle.jdbc.driver.OracleDriver
 和URL地址的写法 jdbc:oracle:thin:@localhost:1521:数据库名
 Statement 用于将SQL语句发送给数据库获得操作结果
6.发送单条SQL
 executeUpdate 用于向数据库发送 insert update delete 语句,返回int 类型参数,代表影响记录行数
 executeQuery  用于向数据库发送 select 语句,返回ResultSet 结果集对象
 execute 用于数据库发送任何SQL语句(包括 DDL DML DCL) 返回boolean ,SQL执行结果是ResultSet 返回true,否则 false
7.发送多条SQL
 addBatch(sql) 将SQL加入批处理队列
 executeBatch() 执行队列中所有SQL语句 ,一次性向数据库发送多条SQL
8.使用ResultSet 遍历结果集
 while(rs.next())
 {
    // 根据数据库内部 列类型,选择相应 getXXX方法
    int ---- getInt//获得int类型的值
    varchart ---- getString//获得varchar类型的值
    date ----- getDate//获得date类型的值
 } 
9、ResultSet 高级应用 ---- 滚动结果集
 Connection 接口的 createStatement()  返回Statement对象,操作SQL后 产生ResultSet
 默认执行next向前滚动,不支持在滚动中对数据进行修改 (只读不执行滚动)
 Connection 接口还提供 createStatement(int resultSetType, int resultSetConcurrency) 在创建Statement对象
 设置结果集类型,并发策略
 结果集类型
 ResultSet.TYPE_FORWARD_ONLY 只能向前,只能调用next 不能向回滚动
 ResultSet.TYPE_SCROLL_INSENSITIVE 支持结果集向回滚动,不能查看修改结果
 ResultSet.TYPE_SCROLL_SENSITIVE  支持结果集向回滚动,查看修改结果
 结果集并发策略
 ResultSet.CONCUR_READ_ONLY 只读
 ResultSet.CONCUR_UPDATABLE 支持修改
 常见三种组合
 ResultSet.TYPE_FORWARD_ONLY 和 ResultSet.CONCUR_READ_ONLY  (默认) 只读不支持向回滚动
 ResultSet.TYPE_SCROLL_INSENSITIVE 和 ResultSet.CONCUR_READ_ONLY  只读,支持向回滚动
 ResultSet.TYPE_SCROLL_SENSITIVE 和 ResultSet.CONCUR_UPDATABLE 支持向回滚动,支持对数据修改
10.JavaEE 经典三层结构 :web层、业务层和持久层,也叫软件三层
 1)DAO模式(Data Access Object 数据访问对象):
  在持久层通过DAO将数据源操作完全封装起来,业务层通过操作Java对象,完成对数据源操作
  * 业务层无需知道数据源底层实现 ,通过java对象操作数据源
  编写DAO模式 :
  1、数据源(MySQL数据库)
  2、Business Object 业务层代码,调用DAO完成 对数据源操作
  3、DataAccessObject 数据访问对象,持久层DAO程序,封装对数据源增删改查,提供方法参数都是Java对象
  4、TransferObject 传输对象(值对象) 业务层通过向数据层传递 TO对象,完成对数据源的增删改查
11.SQL注入:由于没有对用户输入进行充分检查,而SQL又是拼接而成,在用户输入参数时,在参数中添加一些SQL
 关键字,达到改变SQL运行结果的目的,也可以完成恶意攻击。
 解决SQL注入:使用PreparedStatement 取代 Statement
 PreparedStatement 解决SQL注入原理,运行在SQL中参数以?占位符的方式表示
 select * from user where username = ? and password = ? ;
 将带有?的SQL 发送给数据库完成编译 (不能执行的SQL 带有?的SQL 进行编译 叫做预编译),在SQL编译后发现缺少两个参数
 PreparedStatement 可以将? 代替参数
 发送给数据库服务器,因为SQL已经编译过,参数中特殊字符不会当做特殊字符编译,无法达到SQL注入的目的