我的第一个JDBC小项目

引言:以下都是个人学习中的一些总结,本人能力有限,其中存在很多错误与不足,还请阅读者斧正。!并非教程!!并非教程!!并非教程!

JDBC是Java DataBase Connectivity的简称,在我理解看来,它就是Java配合DB用来实现客户增删改查的需求的工具。

JDBC的五个步骤:
1.加载JDBC驱动Class.forName(“com.mysql.jdbc.Driver”);
2.与数据库建立连接DriverManager.getConnection(url,uname,pwd);
3.获取操作对象,发送sql语句得到返回结果
4.处理返回结果
5.释放资源.close()
————————————————
版权声明:本文为CSDN博主「CHANGEXCX」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CHANGEXCX/article/details/80399626

一、项目需求

1.完成数据从前端(页面)成功添加数据到后台数据库中(增)
2.实现数据从前端(页面)成功删除后台数据库中的数据(删)
3.完成数据从前端(页面)成功修改数据并在后台数据库中显示(改)
4.实现从前端(页面)成功查看后台数据库中所有数据(查)

二、构建项目大概框架(MVC)

1.后台数据库(Model)
2.前端JSP块(View)
3.Java代码实现块(Controller)

三、具体实施步骤

1.数据库
1.1建立数据库,创建数据表

2.Java
2.1创建好相应的包与文件夹


2.2编写User包中的User.class

package User;
public class User{private int id;private String uname;private String up;private String sex;public void setId(int id) {this.id= id;}public int getId() {return id;}public void setUname(String uname) {this.uname=uname;}public String getUname() {return uname;}public void setUp(String up) {this.up=up;}public String getUp() {return up;}public void setSex(String sex) {this.sex=sex;}public String getSex() {return sex;}public String toString() {return "User[id="+id+",uname="+uname+",up="+up+",sex="+sex+"]";}
}

2.3架包:mysql-connector-java

没有这个包Java和数据库就不能连接

2.4编写DB包中的有关数据库的一系列操作的DB.class

package DB;
import User.User;
import java.sql.*;
import java.util.ArrayList;
public class DB{private Connection conn = null;//连接对象private PreparedStatement pstmt = null;//执行sql语句对象private ResultSet rs= null;//装载查询结果集//=================数据库连接=======================public Connection getConnection() {Connection con = null;try {Class.forName("com.mysql.jdbc.Driver");//加载驱动con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/testttt?useUnicode=true&characterEncoding=utf-8&useSSL=false","root","root");//与数据库建立连接DriverManager.getConnection(url,uname,pwd);}catch(Exception e){e.printStackTrace();System.out.println("数据库连接失败");}return con;}//=================关闭=======================public void releaseDB(ResultSet rs,PreparedStatement pstmt,Connection conn) {if(rs!=null) {try {rs.close();}catch(SQLException e) {e.printStackTrace();}}if(pstmt!=null) {try {pstmt.close();}catch(SQLException e) {e.printStackTrace();}}if(conn!=null) {try {conn.close();}catch(SQLException e){e.printStackTrace();}}}//====================添加用户数据===================public boolean add(User user) {conn=getConnection();//连接数据库try {String sql = "insert into test (uname,up,sex) values(?,?,?)";//sql插入语句pstmt=conn.prepareStatement(sql);//创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库pstmt.setString(1,user.getUname());//将页面端获取到的用户填入的数据覆盖数据库中原始数据(ps:“1”指第一个问号)pstmt.setString(2, user.getUp());pstmt.setString(3,user.getSex());pstmt.executeUpdate();//此方法用于执行sql语句,返回值为受影响的行数(更新计数),int类型pstmt.close();//关闭return true;}catch(SQLException e) {e.printStackTrace();return false;}}//====================根据id删除用户数据===================public boolean delete(int id) {conn = getConnection();try {String sql = "delete from test where id="+id;//sql删除语句pstmt=conn.prepareStatement(sql);pstmt.executeUpdate();pstmt.close();return true;}catch(SQLException e) {e.printStackTrace();return false;}}//====================根据ID修改用户数据===================public boolean update(User user,int id) {conn = getConnection();try {String sql = "update test set uname=?,up=?,sex=? where id=?";//sql修改语句pstmt = conn.prepareStatement(sql);pstmt.setString(1,user.getUname());pstmt.setString(2,user.getUp());pstmt.setString(3,user.getSex());pstmt.setInt(4,id);//此ID是需要修改的用户IDpstmt.executeUpdate();pstmt.close();}catch(SQLException e) {e.printStackTrace();return false;}return true;} //====================查看所有用户的数据===================public ArrayList<User> Query(){conn = getConnection();ArrayList<User> list = new ArrayList<User>();//用于存储**对象**。与数组不同,数组一旦创建,长度固定,但是ArrayList的长度是动态的,不受限制,可以存储任意多的对象try {String sql = "select * from test";//sql查询语句pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();//此方法用于下达select指令,以查询数据库,它会把数据库响应的查询结果存放在ResultSet类对象中供我们使用while(rs.next()) {//rs是结果集。查询出的记录是一个列表,初始时指针指向的是第一条记录之前的。每rs.next()一次指针都会向后移动一位,指向下一条记录。User user = new User();user.setId(rs.getInt("id"));user.setUname(rs.getString("uname"));user.setUp(rs.getString("up"));user.setSex(rs.getString("sex"));list.add(user);//将每次查询的user对象放到list中储存}}catch(SQLException e) {e.printStackTrace();System.out.println("查询失败");}return list;}//====================根据id查看其中一个用户的数据===================//原理同上public ArrayList<User> QueryOne(int id){conn=getConnection();ArrayList<User> list =new ArrayList<User>();try {String sql = "select * from test where id="+id;pstmt=conn.prepareStatement(sql);rs=pstmt.executeQuery();while(rs.next()) {User user = new User();user.setId(rs.getInt("id"));user.setUname(rs.getString("uname"));user.setUp(rs.getString("up"));user.setSex(rs.getString("sex"));list.add(user);}}catch(SQLException e) {e.printStackTrace();System.out.println("查询失败");}return list;}//================根据uname,up登陆============================public boolean Login(String uname ,String up){conn=getConnection();boolean flag = false;try{String sql ="select * from test where uname=? and up=?";pstmt=conn.prepareStatement(sql);pstmt.setString(1,uname);pstmt.setString(2,up);rs=pstmt.executeQuery();if(rs.next()){flag = ture;}}catch(SQLException e){e.printStackTrace();}return flag;}//====================测试====================================public static void main(String[] args) {DB  db = new DB();User user = new User();user.setUname("a");user.setUp("a");user.setSex("a");db.add(user);System.out.println(db.update(user, 8));;};
}

3.JSP
3.1建立几个必要的JSP前端页面

显示用户信息的主页面:Manage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import = "DB.DB"import = "User.User"import = "java.util.ArrayList"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>管理用户界面</title>
</head>
<body><table align="center" border="1" width="800" >
<tr>
<td align="center" colspan="8">用户管理界面</td>
</tr>
<tr>
<td>id</td>
<td>用户名</td>
<td>密码</td>
<td>性别</td>
<td>删除</td>
<td>修改</td>
<td>查看</td>
</tr>
<%ArrayList<User> list =(ArrayList<User>)request.getAttribute("list");for(User user:list){  %>
<tr><!--request.getAttribute需要返回对象时要强制转换,foreach遍历 -->
<td><%=user.getId()%></td>
<td><%=user.getUname() %></td>
<td><%=user.getUp() %></td>
<td><%=user.getSex() %></td>
<td><a href="<%=basePath %>/controller?id=<%=user.getId()%>&action=delete">删除</a></td>
<td><a href="<%=basePath %>/controller?id=<%=user.getId()%>&action=update">修改</a></td>
<td><a href="<%=basePath %>/controller?id=<%=user.getId()%>&action=detail">查看</a></td>
<td><a href="<%=basePath %>/register.jsp">添加</a></td></tr>
<%} %></table></body>
</html>

注册(添加信息)页面,register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="add" method="post">
用户名:<input type="text" name = uname><br>
密码<input type = "password" name = up><br>
<input type="radio" name=sex value="male">男<input type="radio" name= sex value="female">女<br>
<input type ="submit" value = "注册"> <br></form>
</body>
</html>

查看个人信息,index.jsp

(请无视菜鸟的乱码)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"import ="DB.DB"import ="User.User"import = "java.util.ArrayList"
%><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>查看个人信息</title>
</head>
<body>
<table align="center" border="1">
<tr>
<td>id</td>
<td>用户名</td>
<td>密码</td>
<td>性别</td>
</tr><%ArrayList<User> list =(ArrayList<User>)request.getAttribute("usermessagall") ;for(User user:list){%>
<tr>
<td><%=user.getId() %></td>
<td><%=user.getUname() %></td>
<td><%=user.getUp() %></td>
<td><%=user.getSex() %></td>
</tr>
<%} %>
</table>
</body>
</html>

修改数据,update.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"import ="java.util.ArrayList"import ="User.User"import ="DB.DB"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>修改信息</title>
</head>
<body>
<form action="update" method="post">
<%int id=Integer.parseInt(request.getParameter("id"));
session.setAttribute("id",id);%>
<%ArrayList<User> list= (ArrayList<User>)request.getAttribute("list");for(User user:list){%><br>
Username:<input type="text" name = "uname" value ="<%=user.getUname()%>" ><br>
Password<input type = "text" name ="up" value="<%=user.getUp()%>"><br>
<%if(user.getSex().equals("male")){ %>
<input type="radio" name="sex" value="male" checked="male">Male
<input type="radio" name= "sex" value="female">Female<br>
<%}else{ %>
<input type="radio" name="sex" value="male" >Male
<input type="radio" name= "sex" value="female" checked="female">Female<br>
<% }}%>
<%-- <%=request.getParameter("id") %>
<%request.getParameter("id");request.setAttribute("id",id) ;%> --%><input type ="submit" value = "Update"> <br></form>
</body>
</html>

登陆,login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" name = uname><br>
密码<input type = "password" name = up><br>
<input type="submit" value="登陆">
</form>
</body>
</html>

4.Servlet**(以下文件均为servlet)
servlet在我的项目中是非常重要的一环,它主要负责处理客户请求与业务处理(中间角色)
创建h.java,作用:把查询结果转发到Manage.jsp

package Servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DB.DB;
import User.User;
import java.sql.*;
import java.util.ArrayList;/*** Servlet implementation class h*/
public class h extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public h() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse*      response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stubDB db = new DB();ArrayList<User> list = db.Query();//查询“所有数据”,并把“所有数据”放到list中request.setAttribute("list", list);//servlet传递参数到jsp用setAttribute()方法request.getRequestDispatcher("/Manage.jsp").forward(request, response);//转发:地址不变,可以用request对象传递参数,“”中带/}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse*      response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stub// doGet(request, response);}}

创建add.java,作用:添加用户

package Servlet;import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DB.DB;
import User.User;/*** Servlet implementation class add*/
public class add extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public add() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);User user = new User();PrintWriter out = response.getWriter();String uname=request.getParameter("uname");//以form表单和url从jsp传到servlet的参数,可以用getParameter()方法获取String up = request.getParameter("up");String sex = request.getParameter("sex");user.setUname(uname);user.setUp(up);user.setSex(sex);DB db = new DB();if(db.add(user)) {out.print("<script language=javascript>alert('Add Success');window.location.href='/JspDemo/h';</script>");}else {out.print("<script language=javascript>alert('Add failure');window.location.href='/JspDemo/register.jsp';</script>");}
//      out.print(uname);
//      out.print(up);
//      out.print(sex);}}

创建controller.java,作用:对用户发送的请求做出响应

package Servlet;import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DB.DB;
import User.User;
import java.sql.*;
import java.util.ArrayList;/*** Servlet implementation class controller*/
public class controller extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public controller() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse*      response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stubPrintWriter out = response.getWriter();response.setCharacterEncoding("UTF-8");int id = Integer.parseInt(request.getParameter("id"));//获取id,注意:request.getParameter()所取到的都是默认字符串类型,需要类型转换。String action = request.getParameter("action");DB db = new DB();User user = new User();if (action.equals("detail")) {ArrayList<User> list = db.QueryOne(id);request.setAttribute("usermessagall", list);request.getRequestDispatcher("/index.jsp").forward(request, response);}if (action.equals("delete")) {if (db.delete(id)) {out.println("<script language=javascript>alert('Delete Success');window.location.href='/JspDemo/h';</script>");} else {out.println("<script language=javascript>alert('Delete Failure');window.location.href='/JspDemo/h';</script>");}}if (action.equals("update")) {ArrayList<User> list = db.QueryOne(id);request.setAttribute("list", list);request.getRequestDispatcher("/update.jsp").forward(request, response);}}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse*      response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

建立update.java,作用用于响应客户端的修改信息请求(本来应该放在controller里,后期再完善,明天考教资没时间了)

package Servlet;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DB.DB;
import User.User;/*** Servlet implementation class update*/
public class update extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public update() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);PrintWriter out = response.getWriter();//在servlet中用session方法只能request.getSession().getAttribute(),此时获得到的是对象,需先转为String型,再转为Int型int id = Integer.parseInt((request.getSession().getAttribute("id").toString()));String uname = request.getParameter("uname");//获取客户端输入的数据String up = request.getParameter("up");String sex = request.getParameter("sex");
//      out.print(uname);
//      out.print(up);
//      out.print(sex);User user = new User();user.setUname(uname);user.setUp(up);user.setSex(sex);
//      DB db = new DB();
//      out.print(id);if(db.update(user, id)) {out.print("<script language=javascript>alert('Update Success');window.location.href='/JspDemo/h';</script>");}else {out.print("<script language=javascript>alert('Update Failure');window.location.href='/JspDemo/update.jsp';</script>");}}}

创建login.java,作用:实现登录功能。

package Servlet;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import DB.DB;
import User.User;
/*** Servlet implementation class login*/
public class login extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public login() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.getWriter().append("Served at: ").append(request.getContextPath());}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubUser user = new User();PrintWriter out = response.getWriter();String uname =  request.getParameter("uname");String up = request.getParameter("up");
//  user.setUname(uname);
//  user.setUp(up);DB db = new DB();if(db.Login(uname, up)) {out.println("<script language=javascript>alert('Login Success');window.location.href='/JspDemo/loginSuccess.jsp';</script>");}else {out.println("<script language=javascript>alert('Login failure');window.location.href='/JspDemo/login.jsp';</script>");}}}

四、功能展示

原始界面:
1.添加


2.删除:
删除id28


3.修改
修改id27


4.查看
查看id27

5.登陆
登陆成功

登陆失败

五、学习笔记

1.业务逻辑


2.关于JSP与Servlet之间的传参问题
2.1JSP

我的第一个JDBC小项目相关推荐

  1. 我的第一个MFC小项目(4)之 位图转换(续)

    非常感谢Imageshop的指正,代码有修改,主要是: 计算8位位图像素位使用了更高效的整点运算: 去除多余的变量检测. 求网友们支招:在32位位图中有Alpha值,在转换成8位灰阶位图的时候可以直接 ...

  2. python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源)

    python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源) 见链接

  3. Jdbc小项目:员工工管理系统

    前言 该项目是基于Idea2021.1.1和mysql8.0写的控制台小项目,主要是Jdbc的增删改查比较简单.这个项目结构理解后,可以写一些其他类似的控制台小项目做练习,例如,图书管理系统.超市管理 ...

  4. 安卓入门系列-09一个实战小项目(备忘录Memo)

    一个简单的安卓平台下的备忘录 背景 之前已经介绍了不少的控件(TextView和ListView等等)以及开发中最常见的组件(Activity)(Service的权重在我心中没有Activity重要, ...

  5. 将一个项目中的图片存到另一个项目中_复盘一个Smart200小项目(2)

    这一部分回顾一下确认项目功能需求的过程. 硬件系统选择: 第一阶段,陆陆续续在微信和电话上扯了大约一个周,确定了采用高级语言开发上位机的方案,准备开始确定采用什么PLC和触摸屏了,哥们说客户对使用什么 ...

  6. python秒表项目_第一个Python小项目——秒表

    一.项目描述: 前言: 这只是我今天试着写的一个小项目,这个项目我发在博客上只是为了便于保存,日后自己看起来方便,所以很多地方没有写注释,如果大家有什么想法,欢迎给我留言. 项目名称: 简易秒表 开发 ...

  7. 我写了一个Python小项目

    最近我写了一个 Python 练手小项目,它是一个 PC 桌面版的便签程序,很简陋.写这个小项目是为了熟悉一下用 Python 进行一个完整的项目开发,进一步熟练 Python 的使用. 界面是这样的 ...

  8. vue3实现一个抽奖小项目

    前言 在公司年会期间我做了个抽奖小项目,我把它分享出来,有用得着的可以看下. 浏览链接:http://xisite.top/original/luckDraw/index.html 项目链接:http ...

  9. java 台球_Java入门和一个台球小项目

    今天是入门学习Java的第二天,从今天起就算是正式地接触到了java语言编写的内容,以下是对于今天学习内容的一个梳理. 1. Java的核心优势是跨平台/可移植性. 其他特性:安全性,面向对象,简单性 ...

最新文章

  1. 伍六七带你学算法 入门篇-拼写单词
  2. Mysql 获取当月和上个月第一天和最后一天的解决方案
  3. 今日腊八节,祝福送上!
  4. 互联网晚报 | 9月30日 星期四 | 五菱与B站跨界合作;支付宝向“云闪付”开放支付场景;平安健康险上线“药划算”...
  5. 重点做EUR/USD、EUR/JPY、GBP/USD。
  6. python递归函数入门教程_Python递归函数
  7. 【经验分享】如何为visio扩展云服务图标
  8. Java短信平台实战第二天
  9. 蔡学镛:文档模板,天使或恶魔?
  10. linux-arm下如何开启tftp传输,linux-arm间tftp命令的安装、使用
  11. 计算机论文指导记录怎么写,毕业论文指导记录怎么写
  12. eigen一维向量_Eigen中的矩阵及向量运算
  13. Word 只读模式修改
  14. 【面试题】Redis SETEX /SETNX 的用法和区别
  15. ODM、JDM、OEM概念
  16. php的strtoupper,关于PHP的strtoupper函数
  17. 和量子计算有什么区别 并发_到底什么是量子计算?
  18. 深圳社保明细查询, 深圳社保参保证明
  19. 公众号文章留言评论功能开通方法(详解)
  20. linux DSA 开发(一)

热门文章

  1. 迅雷软件一直出现崩溃问题的解决方法
  2. mysql视图存储过程触发器
  3. 封装Vue组件的原则及技巧
  4. 【TS中的面向对象】
  5. Java中String接受的最大字符串的长度
  6. 台湾、香港、澳门的城市三级联动json
  7. js 色卡 (javascript 色卡 hsv 色卡 hsb 色卡)
  8. IDM Trial Reset下载|InternetDownloadManager无限试用工具下载
  9. 为什么大家要支持微信和支付宝
  10. Centos查看端口及防火墙