数据库信息传输到页面实现。

先进行学生信息页面展示:

接口IStudentDao

public interface IStudentDao {
/**
* 保存操作
* @param stu 学生对象,封装了需要保存的对象
*/
void save(Student stu); /**
* 删除操作
* @param id 被删除学生的主键操作
*/
void delete(Long id);
/**
*
* @param id 被更改学生的主键值
* @param newStu 学生新的信息
*/
void update(Student newStu);
/**
* 查询指定id的学生对象
* @param id 被查询学生的主键值
* @return 如果id存在,返回学生对象,否则为null
*/
Student get(Long id);
/**
* 查询并返回所有学生对象
* @return 如果结果集为空,返回一个空的list对象
*/
List<Student> listall();
}

IStudentDaoImpl

public class IStudentDaoImpl implements IStudentDao{

    public void save(Student stu) {
String sql ="insert into t_student (name,age) values (?,?)";
PreparedStatement ps = null;
//贾琏
Connection conn = null;
try {
conn = JDBCUtil.getConn();
ps = conn.prepareStatement(sql);//欲
ps.setString(1, stu.getName());
ps.setInt(2, stu.getAge());
ps.executeUpdate();//执行
} catch (SQLException e) {
e.printStackTrace();
}
JDBCUtil.close(conn, ps, null);//事务 } @Override
public void delete(Long id) {
String sql ="delete from t_student where id = ?";
PreparedStatement ps =null;
//贾琏
Connection conn = null;
try {
conn = JDBCUtil.getConn();
ps =conn.prepareStatement(sql);
ps.setLong(1, id);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
JDBCUtil.close(conn, ps, null);
}
//update t_student set name='xx',age=17 where id=12
@Override
public void update(Student stu) {
String sql="update t_student set name =? ,age=? where id=?";
PreparedStatement ps =null;
//贾琏
Connection conn =null;
try { conn = JDBCUtil.getConn();
ps=conn.prepareStatement(sql);
ps.setString(1, stu.getName());
ps.setInt(2, stu.getAge());
ps.setLong(3, stu.getId());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
JDBCUtil.close(conn, ps, null);
} public Student get(Long id) {
String sql ="select * from t_student where id=?";
PreparedStatement ps =null;
//贾琏
Connection conn =null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConn();
ps = conn.prepareStatement(sql);
ps.setLong(1, id);
rs= ps.executeQuery();
if (rs.next()) {
Student stu = new Student();
stu.setId(rs.getLong("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
return stu;
}
} catch (Exception e) {
e.printStackTrace();
}
JDBCUtil.close(conn, ps, rs);
return null;
} @Override
public List<Student> listall() {
List<Student> list = new ArrayList<>();
String sql ="select * from t_student";
PreparedStatement ps = null;
Connection conn = null;
ResultSet rs =null;
try {
conn = JDBCUtil.getConn();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
Student stu = new Student();
stu.setId(rs.getLong("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
list.add(stu);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtil.close(conn, ps, rs);
}
return list; }

domain类

public class Student {
private Long id;
private String name;
private Integer age;
public Student(){}
public Student(String name,Integer age){
this.age=age;
this.name=name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
} }

设计个util类,方便维护

public class JDBCUtil {
private static DataSource ds =null;
static{
//当JDBCUtil执行后,直接加载至JVM就立即执行
try {
Properties p = new Properties();
p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
ds = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConn(){
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void close(Connection conn,Statement st,ResultSet rs){
try {
if (rs!=null) {
rs.close();
}
} catch (Exception e) {
}finally {
try {
if (st!=null) {
st.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if (conn!=null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

在网页展示全部信息,将数据用student传输过去,在前台获取。

@WebServlet("/student/list")
public class ListStudentServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
private IStudentDao dao;
@Override
public void init() throws ServletException {
dao = new IStudentDaoImpl();
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收请求参数封装成对象 //2.调用业务方法处理请求
List<Student> list = dao.listall();
req.setAttribute("students", list); //3.控制界面跳转
req.getRequestDispatcher("/WEB-INF/view/student/list.jsp").forward(req, resp); }
}

${student}获取后端传输过来的数据。然后c:forEach展示。

<h2 align="center"> 学生列表</h2>
<a href="/student/edit">添加学生</a>
<table border="1" width="50%" cellpadding="0" cellspacing="0" align="center">
<tr style="background-color: orange;">
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr> <c:forEach items="${students}" var="s" varStatus="vs">
<tr style='background-color: ${vs.count %2==0 ?"LavenderBlush":"gray"};'>
<td>${s.id }</td>
<td>${s.name }</td>
<td>${s.age }</td>
<td>
<a href="/student/delete?id=${s.id}">删除</a> |
<a href="/student/edit?id=${s.id}">编辑</a>
</td>
</tr>
</c:forEach>
</table>

删除操作传输一个id值,/student/delete?id=${s.id}删除指定的一条数据。然后返回到原来的界面

@WebServlet("/student/delete")
public class DeleteStudentServlet extends HttpServlet{
private static final long serialVersionUID= 1L;
private IStudentDao dao;
@Override
public void init() throws ServletException {
dao=new IStudentDaoImpl();
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收请求参数封装成对象
Long id = Long.valueOf(req.getParameter("id"));
//2.调用业务方法处理请求
dao.delete(id);
//3.控制界面跳转
resp.sendRedirect("/student/list");
} }

增加和删除操作的区别在于传输的数据是否有id值,需要进行判断,当传输的数据没有id的时候,就进行增加操作

@WebServlet("/student/edit")
public class EditStudentServlet extends HttpServlet{
private static final long serialVersionUID=1L;
private IStudentDao dao;
@Override
public void init() throws ServletException {
dao=new IStudentDaoImpl();
} protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收请求参数封装成对象
String sid = req.getParameter("id"); //2.调用业务方法处理请求
if (hasLength(sid)) {
Student stu = dao.get(Long.valueOf(sid));
req.setAttribute("student", stu);//传递给edit.jsp,用于回显被编辑的学生。
}
//3.控制界面跳转
req.getRequestDispatcher("/WEB-INF/view/student/edit.jsp").forward(req, resp);
}
private boolean hasLength(String str){
return str!=null &&!"".equals(str.trim());
}
}

edit.jsp

    <form action="/student/save" method="post">
<input type="hidden" name="id" value="${student.id }">
姓名<input type="text" name="name" required value="${student.name }"/><br/>
年纪<input type="number" name="age" required value="${student.age }"><br/> <input type="submit" value="${student==null ?"保存学生信息":"修改学生信息"}">
</form>

根据id值有无判断进行什么操作

@WebServlet("/student/save")
//保存学生信息
public class SaveStudentServlet extends HttpServlet{
private static final long serialVersionUID =1L;
private IStudentDao dao;
@Override
public void init() throws ServletException {
dao = new IStudentDaoImpl();
} protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收请求参数封装成对象
req.setCharacterEncoding("UTF-8");
String name = req.getParameter("name");
Integer age = Integer.valueOf(req.getParameter("age"));
Student stu = new Student(name, Integer.valueOf(age));
//2.调用业务方法处理请求
String id = req.getParameter("id");
if (hasLength(id)) {//更新保存
stu.setId(Long.valueOf(id));
dao.update(stu);
}else { //新增
dao.save(stu);
}
//3.控制界面跳转
resp.sendRedirect("/student/list"); }
private boolean hasLength(String str){
return str!=null &&!"".equals(str.trim());
}
}

以上就可以进行简单的增删改查操作

JDBC+Servlet+JSP的学生案例增删改查的更多相关文章

  1. JDBC+Servlet+JSP实现基本的增删改查(简易通讯录)

    前言: 最近学习JavaWeb的过程中,自己实践练手了几个小项目,目前已经上传到我的Github上https://github.com/Snailclimb/JavaWebProject.目前只上传了 ...

  2. mysql+servlet+jsp实现数据库的增删改查

    首先,了解数据库目前我们仅仅用来存放数据,在这里我们在数据库中生成一个表,包含id,classname,teacher,location.Tomcat用来配置eclipse,只有这样我们才能使用JSP ...

  3. JavaBean+servlet+jsp——>对数据进行增删改查

    1.开始页面(查询数据) <%@page import="com.zdsofe.work.Student"%> <%@page import="java ...

  4. java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

    1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  5. web项目总结——通过jsp+servlet实现对oracle的增删改查功能

    1.DAO模式 分包:依次建立 entity:实体包,放的是跟oracle数据库中表结构相对应的对象的属性,也就是这个对象有什么 dao:增删改查接口,实现增删改查的具体方法 service:同dao ...

  6. JSP+Servlet+JavaBean实现数据库的增删改查

    基本思想:JSP文件显示页面,使用form或href超链接传值到Servlet中方法,在Servlet方法中调用Dao层的类对象,实现对数据库里的数据的增删改查,之后重新返回到JSP输出操作完的结果. ...

  7. ssm框架(Spring Springmvc Mybatis框架)整合及案例增删改查

    三大框架介绍 ssm框架是由Spring springmvc和Mybatis共同组成的框架.Spring和Springmvc都是spring公司开发的,因此他们之间不需要整合.也可以说是无缝整合.my ...

  8. Spring Boot实现学生信息增删改查

    上一篇博客写了如何初始化一个简单的Spring Boot项目,这次详细记录一下如何连接数据库并实现增删改查基本操作. 我使用的是MySQL 5.5+Navicat,MySQL量级比较轻,当然微软的SQ ...

  9. JDBC【1】-- 入门之增删改查

    目录 1.jdbc是什么 2.使用IDEA开发 2.1 创建数据库,数据表 2.2 使用IDEA创建项目 1.jdbc是什么 JDBC(Java DataBase Connectivity,java数 ...

随机推荐

  1. 使用Razor Generator构建模块化ASP.NET MVC应用程序

    在构建Web应用程序的时候,我们很难做到模块化的开发,这是因为Web应用程序不仅仅包含编译的C#代码,还包含了js.css和aspx等资源. 在ASP.NET MVC中,我们发布应用程序的时候,还会包 ...

  2. 《生命》第一集:Chanllenge of Life (生命的挑战)

    开篇讲的是弗罗里达海岸的海豚用尾巴荡起浑水圈批量捕鱼,肯尼亚的猎豹用集体战术捕猎体积大于自己的鸵鸟,马达加斯加的变色龙用伪装的方式来偷袭昆虫,紧接着讲的是南极洲的食蟹海豹如何从天敌虎鲸的围捕中惊险逃脱 ...

  3. inline-block,一个奇怪的问题:中间div掉下来

    先上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  4. node.js—File System(文件系统模块)

    文件系统模块概述 该模块是核心模块,提供了操作文件的一些API,需要使用require导入后使用,通过 require('fs') 使用该模块 文件 I/O 是由简单封装的标准 POSIX 函数提供的 ...

  5. SQLAlchemy 嵌套事务的解决方案

    sqlachemy 是python的orm框架,在使用一段时间后,我们通常会出现事务嵌套的情况,看到很多人写代码的时候,居然是session到处传递,这无疑是加大了代码之间的耦合度. 案例: def ...

  6. 从零开始的ESP8266探索(1)-使用Server功能搭建Web Server

    https://blog.csdn.net/Naisu_kun/article/details/80398667 文件系统 https://blog.csdn.net/solar_Lan/articl ...

  7. day25 Python四个可以实现自省的函数,反射

    python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) ...

  8. Oracle 11g实时SQL监控 v$sql_monitor

    Oracle 11g实时SQL监控: 前面提到,在Oracle Database 11g中,v$session视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID, ...

  9. SWIG 的应用(一)

    用 C/C++ 扩展 Python. - 如果仅使用标准 C 库函数,则可以使用 Python 自带的 ctypes 模块,或者使用 cffi. - 如果要使用自定义 C/C++ 函数,又不怕写 wr ...

  10. Vim 安装 YouCompleteMe

    Vim 下的自动补全,最好的工具莫过于 YouCompleteMe,官方文档在这里 http://valloric.github.io/YouCompleteMe/ 安装稍显复杂,以下记录我的过程. ...