Java笔记(15)

来源:互联网 发布:淘宝网是如何盈利的 编辑:程序博客网 时间:2024/06/05 00:30
人们直接使用JDBC开发,非常麻烦 ----- 企业中开发web程序,连接数据库 通过JDBC框架
1、JDBC元数据API (编写JDBC框架基础)
2、编写自己JDBC框架(重点理解框架编写思想,代码不做要求)
3、Apache DBUtils 框架


什么是数据库元数据(MetaData):数据库存储结构定义信息 (库、表、列 定义信息)
学习元数据API 获得 数据库、表、列定义信息


1、DatabaseMetaData 数据库元数据 ----- 获得数据库结构信息
新建web工程
将mysql驱动 c3p0的jar包 复制WEB-INF/lib
将c3p0-config.xml 复制 src目录下 (修改数据库连接参数)
编写JDBCUtils (用c3p0连接池获得一个连接)


create table users(
  id int primary key not null auto_increment,
  username varchar(40) unique not null,
  password varchar(40) not null,
  email varchar(100)
);


insert into users values(null,'zs','123','zs@itcast.cn');
insert into users values(null,'lisi','123456','lisi@itcast.cn');
insert into users values(null,'wu','123','wangwu@itcast.cn');


* 获得JDBC连接参数 、获得主键、外键信息 、获得数据表、获得数据列信息


2、ParameterMetaData 参数元数据 ---- 获得预编译SQL语句中 ? 信息
getParameterCount()  参数个数 ---- ? 个数
getParameterType(int param)  ----- 参数类型
getParameterTypeName(int param)  --- 参数类型名称


获得类型时:
java.sql.SQLException: Parameter metadata not available for the given statement


3、ResultSetMetaData 结果集元数据 ---- 获得结果集列名称、数量、类型
getColumnCount() 返回resultset对象的列数
getColumnName(int column)  获得指定列的名称
getColumnTypeName(int column) 获得指定列的类型 


* 学习JDBC元数据API ---- 编写通用JDBC程序(JDBC框架)


------------------------------------------------------------------------------------
每次编写JDBC程序都发现存在好多重复代码 ---- 通过通用程序进行简化
1、通过CUD方法设计
create table account(
  id int primary key not null auto_increment,
  name varchar(40),
  money double
);
insert into account values(null,'aaa',1000);
insert into account values(null,'bbb',1000);
insert into account values(null,'ccc',1000);


为两张表 编写DAO程序 insert 方法(update方法和delete方法 和插入方法类似)


public static void update(String sql, Object... args) {} ---- 参数传入SQL 和 SQL中?对应数据


2、通用R方法设计
public static Object query(String sql, MyResultSetHandler handler,Object... args) {}




Apache DBUtils (轻量级) ---- 使用方便
只是对JDBC程序进行简单封装,从而简化开发者 创建连接、结果集封装、释放资源


QueryRunner 是DBUtils 核心操作类
ResultSetHandler 结果集封装处理器
DbUtils 工具类


DbUtils 工具类 : 加载驱动、关闭、事务提交、回滚


QueryRunner
QueryRunner()  ---- 空参数构造器
QueryRunner(DataSource ds)  --- 接收数据库连接池构造器


batch(Connection conn, String sql, Object[][] params)  ---- 传递连接批处理
batch(String sql, Object[][] params)  ---- 不传递连接批处理


query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
query(String sql, ResultSetHandler<T> rsh, Object... params) 


update(Connection conn, String sql, Object... params) 
update(String sql, Object... params) 


1、如果使用 QueryRunner(DataSource ds) 构造QueryRunner 对象,数据库事务交给DBUtils框架进行管理 ---- 默认情况下每条sql 单独一个事务
batch(String sql, Object[][] params)
query(String sql, ResultSetHandler<T> rsh, Object... params) 
update(String sql, Object... params) 


2、如果使用 QueryRunner() 构造QueryRunner , 需要自己管理事务,因为框架没有连接池无法获得数据库连接
batch(Connection conn, String sql, Object[][] params) 
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
update(Connection conn, String sql, Object... params) 


学习QueryRunner 通用insert 、update 、delete操作方法 -----  update(String sql, Object... params) 
* sql中?顺序、数量和可变参数params 对应


学习query方法 完整数据表查询 ----- 需要将ResultSet 结果集 封装为一个对象 
* 在DBUtils框架中 提供 九个ResultSetHandler 实现类 
* 如果想将结果集封装为一个指定的对象,可以直接使用九个实现类


九个默认Handler : ArrayHander 、ArrayListHandler 、BeanHander、BeanListHandler、ColumnListHandler、MapHandler、MapListHandler、KeyedHander、ScalarHandler
* 最常用 BeanHander、BeanListHandler、ColumnListHandler、ScalarHandler


--------------------------------------------------------------------------------------------------
客户信息增删改查系统 


软件工程开发流程:1、瀑布模型 2、螺旋模型 


RUP (Rational Unified Process,统一软件开发过程 ) 采用瀑布模型: 需求 --- 需求分析 --- 系统设计(概要、详细设计)---- 编码 --- 测试 --- 实施 --- 维护
* 瀑布模型 缺陷在编码结束之前,客户看不到最终软件产品 ,如果需求、设计出现明显错漏,导致软件后期无法维护,存在重大缺陷 
* 瀑布模型对于 新型软件,需求不定软件 风险较大


敏捷开发理念:迭代开发模式 ,将系统功能分成若干批次 ,对每部分功能实施瀑布模型流程 ,系统随时看到开发结果,始终存在可用软件产品
* 增量开发 ,中途发现设计错误,很容易调整 


1、需求 客户信息增删改查
2、系统设计
数据库设计 E-R图


创建数据库 create database customersystem;
* 每个软件都会为数据库创建单独用户并授权 


创建用户:create user flower identified by 'flower';
授权:grant all on customersystem.* to flower;


创建数据表
create table customer (
   id varchar(40) primary key not null,
   name varchar(20) unique not null,
   gender varchar(10) not null,
   birthday date not null,
   cellphone varchar(20) not null,
   email varchar(40) unique not null,
   preference varchar(100),
   type varchar(40),
   description varchar(255)
);


----------------------------------------------------
启动navicat lite ---- 创建Connection(name随意写,填写用户名、密码)
双击打开连接
在连接上右键点击 new Database --- 创建数据库 customersystem
双击数据库 开发数据库
在数据库/Table右键 new Table ---- 创建数据表 customer


在工具上方点击manager users --- Add User 创建 flower用户
点击用户展开后 具体数据库 ---- select All 为用户flower 授予 customersystem 所有权限


----------------------------------------------------
系统功能设计 
1) 技术选型 mysql + Servlet + JSP + EL +JSTL + BeanUtils + c3p0 + DBUtils 
2) 搭建工程环境 
创建customermanager 工程 ,将jar包复制 WEB-INF/lib 
准备c3p0配置文件
3) 创建package 结构 (javaee三层结构)
cn.itcast.customer.web
cn.itcast.customer.service
cn.itcast.customer.dao
cn.itcast.customer.domain
cn.itcast.customer.utils


使用c3p0、DBUtils ---- 需要工具类
实体类 Customer 


4) 发布客户管理系统 ----- 虚拟主机方式
配置tomcat/conf/server.xml 添加虚拟主机 www.customer.com  ---- 路径指向工程根目录
<Host name="www.customer.com"  appBase="D:\work\myclipse\work20120605\customermanager" ...>
修改本地hosts文件 添加域名解析  ---- 127.0.0.1   www.customer.com
将工程下发WebRoot 配置缺省虚拟目录 <Context path="" docBase="WebRoot" />


5) 设计 增加、查询、删除、修改 四个功能 --- UML Unified Modeling Language (UML)又称统一建模语言或标准建模语言
绘制UML工具 很多:Rantional Rose、Microsoft Visio、starUML 、jude(纯java开发)
* UML 做软件 建模(分析设计) : 用例图、类图、时序图




总结:
JDBC元数据API(框架开发基础) ------- 自定义JDBC框架(不要求掌握、理解框架编写过程) ------- Apache DBUtils
* DBUtils 增删改查 、事务处理


三层结构编写java项目
1、客户端:请求是否需要数据 (form / 链接) ---- 提交数据 form action 、 a href
2、web层:获得客户端提交数据,封装JavaBean --- 传递业务层 (BeanUtils)
3、业务层获得客户端数据后,编写程序业务逻辑,如果需要对数据库增删改查 --- 调用DAO 
4、DAO 对表增删改查 (DBUtils/C3P0)
5、业务层处理数据结果返回web层 ---- web层根据结果,传递结果数据给JSP显示 ---- request.setAttribute request.getRequestDispatcher.forward


完成客户信息增加、查询





















































































































































































0 0
原创粉丝点击