增删查改的大概安排
写增删查改分别 由三张表组成 ,由学生表,教师表,班级表, 有util entity dao biz Servlet 等包
第一步写util包先连接数据库里
面有DBAccess.java
/**
* 提供了一组获得或关闭数据库对象的方法
*
*/
public class DBAccess {
private static String driver;
private static String url;
private static String user;
private static String password;
static {// 静态块执行一次,加载 驱动一次
try {
InputStream is = DBAccess.class
.getResourceAsStream("config.properties");
Properties properties = new Properties();
properties.load(is);
driver = properties.getProperty("driver");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("pwd");
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 获得数据连接对象
*
* @return
*/
public static Connection getConnection() {
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void close(ResultSet rs) {
if (null != rs) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(PreparedStatement ps) {
if (null != ps) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Connection conn) {
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Connection con, PreparedStatement ps, ResultSet rs) {
close(rs);
close(ps);
close(con);
}
public static boolean isOracle() {
return "oracle.jdbc.driver.OracleDriver".equals(driver);
}
public static boolean isSQLServer() {
return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(driver);
}
public static boolean isMysql() {
return "com.mysql.cj.jdbc.Driver".equals(driver);
}
public static void main(String[] args) {
Connection conn = DBAccess.getConnection();
DBAccess.close(conn);
System.out.println("isOracle:" + isOracle());
System.out.println("isSQLServer:" + isSQLServer());
System.out.println("isMysql:" + isMysql());
System.out.println("数据库连接(关闭)成功");
}
}
连接数据库还需要config.properties:
#mysql5
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost/mysql?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
user=root
pwd=123
第二步定义一个Student实体类
**
public class student {
private int sid;
private String sname;
private String sjy;
private String sbj;
private String sah;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSjy() {
return sjy;
}
public void setSjy(String sjy) {
this.sjy = sjy;
}
public String getSbj() {
return sbj;
}
public void setSbj(String sbj) {
this.sbj = sbj;
}
public String getSah() {
return sah;
}
public void setSah(String sah) {
this.sah = sah;
}
public student() {}
public student(int sid, String sname, String sjy, String sbj, String sah) {
this.sid = sid;
this.sname = sname;
this.sjy = sjy;
this.sbj = sbj;
this.sah = sah;
}
public student(String sname, String sjy, String sbj, String sah) {
this.sname = sname;
this.sjy = sjy;
this.sbj = sbj;
this.sah = sah;
}
}
后面还需要教师实体类,和班级实体类
public class sbj {
private int bid;
private String bname;
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public sbj(int bid, String bname) {
super();
this.bid = bid;
this.bname = bname;
}
public sbj() {}
}
public class sjy {
private int jid;
private String jname;
private String jsex;
public int getJid() {
return jid;
}
public void setJid(int jid) {
this.jid = jid;
}
public String getJname() {
return jname;
}
public void setJname(String jname) {
this.jname = jname;
}
public String getJsex() {
return jsex;
}
public void setJsex(String jsex) {
this.jsex = jsex;
}
public sjy() {}
public sjy(int jid, String jname, String jsex) {
super();
this.jid = jid;
this.jname = jname;
this.jsex = jsex;
}
public sjy(String jname, String jsex) {
this.jname = jname;
this.jsex = jsex;
}
}
第三步写dao包
先写一个student接口
public interface IbjDao {
public List<sbj> getAll();
public List<sbj> getAll(String colName,String str);
public sbj getAllByBid(String bid);
public int addbj(sbj s);
public int deletebj(String bid);
public int updatebj(sbj s,String bid);
}
在写一个student的dao方法
public class StuDao implements IstuDao {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
@Override
public List<student> getAll() {
List<student> ls = new ArrayList<>();
try {
con = DBAccess.getConnection();
ps=con.prepareStatement("select * from tb_stu");
rs = ps.executeQuery();
while(rs.next()){
student stu = new student();
stu.setSid(rs.getInt(1));
stu.setSname(rs.getString(2));
stu.setSjy(rs.getString(3));
stu.setSbj(rs.getString(4));
stu.setSah(rs.getString(5));
ls.add(stu);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return ls;
}
@Override
public List<student> getAll(String colName, String str) {
List<student> ls = new ArrayList<>();
try {
con = DBAccess.getConnection();
ps = con.prepareStatement("select * from tb_stu where "+colName+" like '%"+str+"%'");
rs = ps.executeQuery();
while(rs.next()){
student stu = new student();
stu.setSid(rs.getInt(1));
stu.setSname(rs.getString(2));
stu.setSjy(rs.getString(3));
stu.setSbj(rs.getString(4));
stu.setSah(rs.getString(5));
ls.add(stu);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return ls;
}
@Override
public student getAllBySid(String sid) {
student stu = new student();
try {
con = DBAccess.getConnection();
ps=con.prepareStatement("select * from tb_stu where sid=?");
ps.setInt(1, Integer.parseInt(sid));
rs = ps.executeQuery();
if(rs.next()){
stu.setSid(rs.getInt(1));
stu.setSname(rs.getString(2));
stu.setSjy(rs.getString(3));
stu.setSbj(rs.getString(4));
stu.setSah(rs.getString(5));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return stu;
}
@Override
public int addstu(student stu) {
int n = 0;
try {
con =DBAccess.getConnection();
ps = con.prepareStatement("insert into tb_stu(sid,sname,sjy,sbj,sah) values(?,?,?,?,?)");
ps.setInt(1, stu.getSid());
ps.setString(2, stu.getSname());
ps.setString(3, stu.getSjy());
ps.setString(4, stu.getSbj());
ps.setString(5, stu.getSah());
n = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return n;
}
@Override
public int deletestu(String sid) {
int n = 0;
try {
con =DBAccess.getConnection();
ps = con.prepareStatement("delete from tb_stu where sid=?");
ps.setInt(1, Integer.parseInt(sid));
n = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return n;
}
@Override
public int updatestu(student stu, String sid) {
int n = 0;
try {
con =DBAccess.getConnection();
ps = con.prepareStatement("update tb_stu set sname=?,sjy=?,sbj=?,sah=? where sid=?");
ps.setString(1, stu.getSname());
ps.setString(2, stu.getSjy());
ps.setString(3, stu.getSbj());
ps.setString(4, stu.getSah());
ps.setInt(5, Integer.parseInt(sid));
n = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return n;
}
//获取新闻表最大Nid
@Override
public int getMaxNid() {
int n=0;
try {
con=DBAccess.getConnection();
ps = con.prepareStatement("select nvl(max(sid),0) from tb_stu");
ResultSet rs = ps.executeQuery();
if(rs.next()){
n = rs.getInt(1)+1;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return n;
}
@Override
public int getRows(String str) {
int n = 0 ;
try {
con = DBAccess.getConnection();
ps=con.prepareStatement("select count(*) from "+str);
rs=ps.executeQuery();
if(rs.next()){
n=rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBAccess.close(con, ps, rs);
}
return n;
}
}
同理:写一个biz层,先写一个接口
public interface IbjBiz {
public List<sbj> getAll();
public List<sbj> getAll(String colName,String str);
public sbj getAllByBid(String bid);
public int addbj(sbj s);
public int deletebj(String bid);
public int updatebj(sbj s,String bid);
}
bizDao
public class StuBiz implements IstuBiz {
IstuDao id = new StuDao();
@Override
public List<student> getAll() {
// TODO Auto-generated method stub
return id.getAll();
}
@Override
public List<student> getAll(String colName, String str) {
// TODO Auto-generated method stub
return id.getAll(colName, str);
}
@Override
public student getAllBySid(String sid) {
// TODO Auto-generated method stub
return id.getAllBySid(sid);
}
@Override
public int addstu(student stu) {
// TODO Auto-generated method stub
return id.addstu(stu);
}
@Override
public int deletestu(String sid) {
// TODO Auto-generated method stub
return id.deletestu(sid);
}
@Override
public int updatestu(student stu, String sid) {
// TODO Auto-generated method stub
return id.updatestu(stu, sid);
}
@Override
public int getMaxNid() {
// TODO Auto-generated method stub
return id.getMaxNid();
}
@Override
public int getRows(String str) {
// TODO Auto-generated method stub
return id.getRows(str);
}
@Override
public List<student> getAllByPage(int pageIndex, int pageSize) {
List<student> ls = id.getAll();
List<student> newls = new ArrayList<student>();
int start = (pageIndex-1)*pageSize;
int end = pageIndex*pageSize-1;
for(int i=start;i<=end;i++){
if(end>=ls.size()){
end = ls.size()-1;
}
student s = ls.get(i);
newls.add(s);
}
return newls;
}
}
第四步,写servlet包
分别有增删查改的Servlet
AddServlet.java
public class AddServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
IstuBiz i = new StuBiz();
String sid = req.getParameter("sid");
String sname = req.getParameter("sname");
String sjy = req.getParameter("sjy");
String sbj = req.getParameter("sbj");
String sah = req.getParameter("sah");
student stu = new student(Integer.parseInt(sid), sname, sjy, sbj, sah);
int n = i.addstu(stu);
if(n>0){
resp.sendRedirect("index.jsp");
}
else{
out.print("<script>alert('增加失败');location.href='index.jsp';</script>");
}
}
}
DeleteServlet.java
public class DeleteServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
IstuBiz ib = new com.biz.impl.StuBiz();
String sid = req.getParameter("sid");
int n = ib.deletestu(sid);
if(n>0) {
resp.sendRedirect("index.jsp");
}
else {
out.print("<script>alert('删除失败');location.href='index.jsp';</script>");
}
}
}
IndexServlet.java
public class IndexServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
IstuBiz ib = new StuBiz();
List<student> ls = ib.getAll();
req.setAttribute("myls", ls);
if(ls.size()!=0) {
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
else {
System.out.println("集合为空");
}
}
}
PreupdateServlet.java
public class PreupdateServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding(“utf-8”);
resp.setContentType(“text/html;charset=utf-8”);
IstuBiz i = new StuBiz();
String sid = req.getParameter("sid");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~sid");
student s = i.getAllBySid(sid);
req.setAttribute("myll", s);
if(s!=null){
req.getRequestDispatcher("update.jsp").forward(req, resp);
}
}
}
UpdateServlet.java
public class UpdateServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
IstuBiz i = new StuBiz();
String sid = req.getParameter("sid");
String sname = req.getParameter("sname");
String sjy = req.getParameter("sjy");
String sbj = req.getParameter("sbj");
String sah = req.getParameter("sah");
student stu = new student(sname, sjy, sbj, sah);
int n = i.updatestu(stu, sid);
if(n>0){
resp.sendRedirect("index.jsp");
}
else{
out.print("<script>alert('修改失败');location.href='index.jsp';</script>");
}
}
}
第五步配置 (web.xml)
当然写完只好我们需要配置一下:(web.xml)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>t3</display-name>
<servlet>
<servlet-name>indexServlet</servlet-name>
<servlet-class>com.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>indexServlet</servlet-name>
<url-pattern>/index.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>deleteServlet</servlet-name>
<servlet-class>com.servlet.DeleteServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>deleteServlet</servlet-name>
<url-pattern>/delete.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>bjIndexServlet</servlet-name>
<servlet-class>com.servlet.BjIndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bjIndexServlet</servlet-name>
<url-pattern>/bjindex.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>addServlet</servlet-name>
<servlet-class> com.servlet.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addServlet</servlet-name>
<url-pattern>/add.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>preupdateServlet</servlet-name>
<servlet-class> com.servlet.PreupdateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>preupdateServlet</servlet-name>
<url-pattern>/preupdate.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>updateServlet</servlet-name>
<servlet-class> com.servlet.UpdateServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>updateServlet</servlet-name>
<url-pattern>/update.do</url-pattern>
</servlet-mapping>
</web-app>
第六步界面排布
最后一步就到了我们的界面了:
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align="center">
教员下拉列表:
<select name="aa">
<option value="jname">教员名字</option>
<option value="jname">杰哥</option>
<option value="jname">晓哥</option>
<option value="jname">潘哥</option>
</select>
班级下拉列表:
<select>
<option value="bname">班级名字</option>
<option value="bname">t224</option>
<option value="bname">t234</option>
<option value="bname">t242</option>
</select>
</div>
<div align="center">
<a href="add.jsp">增加</a>
</div>
<table border="1px" align="center">
<tr>
<td>编号</td>
<td>姓名</td>
<td>教员</td>
<td>班级</td>
<td>爱好</td>
<td>操作</td>
</tr>
<c:if test="${empty myls}">
<jsp:forward page="index.do"></jsp:forward>
</c:if>
<c:forEach items="${myls}" var="s">
<tr>
<td>${s.sid }</td>
<td>${s.sname }</td>
<td>${s.sjy }</td>
<td>${s.sbj }</td>
<td>${s.sah }</td>
<td><a href="delete.do?sid=${s.sid }" onclick="return confirm('你确定要删除吗')">删除</a>
<a href="preupdate.do?sid=${s.sid }">修改</a>
</td>
</tr>
</c:forEach>
</table>
<p align="right"> 当前页数:${pageIndex }/${max }
<a href="index.jsp?sid=1">首页</a>
<a href="index.jsp?sid=${pageIndex>1?pageIndex-1:1 }">上一页</a>
<a href="index.jsp?sid=${pageIndex<max?pageIndex+1:max }">下一页</a>
<a href="index.jsp?sid=${max }">末页</a>
</p>
</body>
</html>
输出结果为:
add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'add.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<div>
<form action="add.do" method="post">
学号:<input type="text" name="sid"/></br>
姓名:<input type="text" name="sname"/></br>
<select name="sjy">
<option value="sjy">教员名字</option>
<option value="杰哥">杰哥</option>
<option value="晓哥">晓哥</option>
<option value="潘哥">潘哥</option>
</select>
<select name="sbj">
<option value="sbj">班级名字</option>
<option value="t224">t224</option>
<option value="t234">t234</option>
<option value="t242">t242</option>
</select></br>
爱好:<input type="checkbox" value="吃饭" name="sah"/>吃饭
<input type="checkbox" value="睡觉" name="sah"/>睡觉
<input type="checkbox" value="打豆豆" name="sah"/>打豆豆
<input type="submit" value="增加"/>
</form>
</div>
</body>
</html>
输出结果为:
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'add.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<script type="text/javascript">
var tm=mydata.movie.tmovie;
var n=tm.split('、');
$.each(n, function(index,elem) {
$("input[value='"+elem+"']").prop("checked",true);
});
</script>
<body>
<div>
<form action="update.do" method="post">
姓名:<input type="text" name="sname" value="${myll.sname }"/></br>
<select name="sjy">
<option value="${myll.sjy }">教员名字</option>
<option id="id" selected="selected">杰哥</option>
<option value="${myll.sjy }">晓哥</option>
<option value="${myll.sjy }">潘哥</option>
</select>
<select name="sbj" >
<option value="${myll.sbj }">班级名字</option>
<option value="${myll.sbj }">t224</option>
<option value="${myll.sbj }">t234</option>
<option value="${myll.sbj }">t242</option>
</select></br>
爱好:<input type="checkbox" name="sah" value="${myll.sah }" checked="checked"/>吃饭
<input type="checkbox" name="sah" value="${myll.sah }"/>睡觉
<input type="checkbox" name="sah" value="${myll.sah }"/>打豆豆</br>
<input type="hidden" name="sid" value="${myll.sid }"/>
<input type="submit" value="修改"/>
</form>
</div>
</body>
</html>
输出结果为: