目录
一.实现删除功能
1.1 url如何传参?
xx.do?参数=参数值&参数名=参数值
1.2 servlet如何拿对应值?
//根据参数名拿到对应的参数值
String str = req.getParameter("参数名")
1.3 如何询问?
οnclick="return confirm('确定要删除嘛?')"
1.4 代码分析
1.4.1 前端传参
删除 >
1.4.2 后台业务处理
二.实现增加功能
2.1 效果预览
2.2 代码实现
2.2.1 前端实现
2.2.2 标识列实现
①触发器+序列
--序列
create sequence seq_goods;
--触发器:前触发
create or replace trigger t_goods
before insert
on tb_goods
for each row
begin
:new.gid:=seq_goods.nextval;---插入之前给商品编号列赋值
end;
②取表的最大序号+1
三.实现修改功能
3.1 总思路
3.2 效果预览
3.3 核心代码分析
3.3.1 修改前业务处理(servlet:preupdate.do)
//实例化dao对象 GoodsDao gd = new GoodsDao();
//接收修改的id String gid=req.getParameter("gid");
//调用单个查询的方法(根据gid拿到商品对象=单个查询) Goods goods = gd.getGoods(gid);//存起来 req.setAttribute("goods", goods);
//转发到修改界面进行绑值 req.getRequestDispatcher("update.jsp").forward(req, resp);
3.3.2 前端页面处理(update.jsp)
①页面显示编号 但不可编辑
商品编号:
商品名称:
②页面不显示编号 隐藏域传值
3.3.3 修改后业务处理(servlet:update.do)
//重定向跳转去加载并展示数据 resp.sendRedirect("goods.do"); } else { out.print(""); }
一.实现删除功能
1.1 url如何传参?
xx.do?参数=参数值&参数名=参数值
1.2 servlet如何拿对应值?
//根据参数名拿到对应的参数值
String str = req.getParameter("参数名")
1.3 如何询问?
onclick="return confirm('确定要删除嘛?')"
1.4 代码分析
1.4.1 前端传参
<a href="delete.do?gid=${g.gid }" >删除 ></a>
1.4.2 后台业务处理
//实例化dao对象
GoodsDao gd = new GoodsDao();
//接收删除的id
String gid=req.getParameter("gid");
//调用dao方法 连接数据库进行判断
/**
* 删除商品
* @param gid 商品编号
* @return 影响行数
*/
public int delete(String gid) {
int n = 0;
try {
con=DBHelper.getCon();
String sql="delete from tb_goods where gid="+gid;
ps=con.prepareStatement(sql);
n=ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return n;
}
//运用
//调用删除的dao方法
int n = gd.delete(gid);
if(n>0) {//删除成功
resp.sendRedirect("goods.do");
}
else {
out.print("<script>alert('删除失败');location.href='goods.do';</script>");
}
二.实现增加功能
2.1 效果预览
2.2 代码实现
2.2.1 前端实现
//实例化dao对象
GoodsDao gd = new GoodsDao();
//设置编码方式
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
//获取session和out
HttpSession session = req.getSession();
PrintWriter out = resp.getWriter();
//接收表单提交过来的数据(增加)
String gname=req.getParameter("gname");
String s=req.getParameter("gprice");
double gprice=Double.parseDouble(s);
String ginfo=req.getParameter("ginfo");
//实例化一个对象
Goods g = new Goods(gname, gprice, ginfo);
//调用增加的dao方法
int n = gd.addGoods(g);
if(n>0) {//增加成功
resp.sendRedirect("goods.do");
}
else {
out.print("<script>alert('增加失败');location.href='add.jsp';</script>");
}
//dao方法
/**
* 增加商品
* @param g 商品对象
* @return 返回影响行数
*/
public int addGoods(Goods g) {
int n = 0;
int gid = getID("gid", "tb_goods");
g.setGid(gid);
try {
con=DBHelper.getCon();
String sql="insert into tb_goods(gid,gname,gprice,ginfo) values(?,?,?,?)";
ps=con.prepareStatement(sql);
//给占位符赋值4个
ps.setInt(1, g.getGid());
ps.setString(2, g.getGname());
ps.setDouble(3, g.getGprice());
ps.setString(4, g.getGinfo());
n=ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return n;
}
2.2.2 标识列实现
①触发器+序列
--序列
create sequence seq_goods;
--触发器:前触发
create or replace trigger t_goods
before insert
on tb_goods
for each row
begin
:new.gid:=seq_goods.nextval;---插入之前给商品编号列赋值
end;
②取表的最大序号+1
/**
* 获取id
* @param colName 列名
* @param tabName 表名
* @return
*/
public int getID(String colName,String tabName) {//uuid tb_user
int n = 0;
try {
con=DBHelper.getCon();
String sql="select nvl(max("+colName+"),0)+1 from "+tabName;
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
if(rs.next()) {
n=rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return n;
}
三.实现修改功能
3.1 总思路
3.2 效果预览
3.3 核心代码分析
3.3.1 修改前业务处理(servlet:preupdate.do)
//实例化dao对象
GoodsDao gd = new GoodsDao();//接收修改的id
String gid=req.getParameter("gid");//调用单个查询的方法(根据gid拿到商品对象=单个查询)
Goods goods = gd.getGoods(gid);
//存起来
req.setAttribute("goods", goods);//转发到修改界面进行绑值
req.getRequestDispatcher("update.jsp").forward(req, resp);
3.3.2 前端页面处理(update.jsp)
①页面显示编号 但不可编辑
商品编号:<input name="gid" value="${goods.gid }" readonly="readonly"/><br/><br/>
商品名称:<input name="gname" value="${goods.gname }"/><br/><br/>
②页面不显示编号 隐藏域传值
<!-- 隐藏域传值:会随着表单的提交而提交 根据name值拿value值 必须写在表单 -->
<input type="hidden" name="gid" value="${goods.gid}"/>
3.3.3 修改后业务处理(servlet:update.do)
//实例化dao对象
GoodsDao gd = new GoodsDao();
//设置编码方式
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=UTF-8");
//获取session和out
HttpSession session = req.getSession();
PrintWriter out = resp.getWriter();
//接收表单提交过来的数据(增加)
String gid=req.getParameter("gid");
String gname=req.getParameter("gname");
String s=req.getParameter("gprice");
double gprice=Double.parseDouble(s);
String ginfo=req.getParameter("ginfo");
//实例化一个对象
Goods g = new Goods(gname, gprice, ginfo);
//调用修改的dao方法 连接数据库进行判断
int n = gd.updateGoods(g, gid);
if(n>0) {//修改成功//重定向跳转去加载并展示数据
resp.sendRedirect("goods.do");
}
else {
out.print("<script>alert('修改失败');location.href='preupdate.do?gid="+gid+"';</script>");
}