【新手入门】JDBC+Servlet+jsp【新闻系统的增删改查】:持续学习,持续优化,争取做一个真正的新闻系统出来!
新闻的增删改查
学习了一些博客知识【结尾会贴上,大家可以参考】在借鉴的基础上又进行了代码的优化,从而实现了CRUD,下面分享我的代码过程:
包结构,是为了方便管理,所以我们要这样进行设计:
在数据库进行表结构的插入和设计:(目前小辣鸡制作了新闻的crud)
接着我们进行类的实现,即完善domain类
public class NoteEntity {
private int id;
private String type;
private String text; public NoteEntity() {
} public NoteEntity(int id, String type, String text) {
this.id = id;
this.type = type;
this.text = text;
} @Override
public String toString() {
return "NoteEntity{" +
"id='" + id + '\'' +
", type='" + type + '\'' +
", text='" + text + '\'' +
'}';
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public String getText() {
return text;
} public void setText(String text) {
this.text = text;
}
}
实现了类的实现,接着进行数据库的连接(根据我查到的资料,应该是封闭在一个jdbc.Properties文件中是最好的,但我还没做)
public class jdbcUtil {
public static final String url = "jdbc:mysql://localhost:3306/*?useSSL=false&serverTimezone=UTC";
public static final String user = "******";
public static final String password = "******";
public static final String DRIVER = "com.mysql.cj.jdbc.Driver"; /**
* 获取Connection对象
*
* @return
*/
static {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// /**
// * 释放资源
// */
public static void ReleaseResource(Connection connection, PreparedStatement pstm, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstm != null) {
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
然后进行crud代码的实现
(建议写一个接口类,会方便很多)
public Connection conn1=null;
public ResultSet rs=null;
public PreparedStatement ps=null;
//查询所有的数据
@Override
public List<NoteEntity> queryAllData() {
conn1=jdbcUtil.getConnection();//连接数据库
List<NoteEntity> list=new ArrayList<NoteEntity>();
try{
String sql="select * from note";//查询多条数据
ps=conn1.prepareStatement(sql);
rs=ps.executeQuery();
NoteEntity note=null;
while(rs.next()){
note =new NoteEntity();
note.setId(Integer.parseInt(rs.getString("id")));
note.setType(rs.getString("type"));
note.setText(rs.getString("text"));
list.add(note);
}
}catch (SQLException e){
e.printStackTrace();
}finally {
jdbcUtil.ReleaseResource(conn1,ps,rs);
}
return list;
} //新增
@Override
public int insertData(NoteEntity note) {
conn1=jdbcUtil.getConnection();
int i=0;
try{
String sql="insert into note(type,text) values(?,?)";
ps=conn1.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
// ps.setObject(1,note.getId());
ps.setObject(1,note.getType());
ps.setObject(2,note.getText());
ps.executeUpdate();
rs=ps.getGeneratedKeys();//得到最新的ID
if(rs.next()){
i=rs.getInt(1);
}
}catch (Exception e){
e.printStackTrace();
}finally {
jdbcUtil.ReleaseResource(conn1,ps,rs);
}
return i;
}
//修改
@Override
public int updateData(NoteEntity note) {
conn1=jdbcUtil.getConnection();
int i=0;
try{
String sql="update note set type=?,text=? where id=?";
ps=conn1.prepareStatement(sql);
ps.setObject(1,note.getType());
ps.setObject(2,note.getText());
ps.setInt(3,note.getId());
i=ps.executeUpdate();
}catch (Exception e){
e.printStackTrace();
}finally {
jdbcUtil.ReleaseResource(null,ps,rs);
}
return i;
} @Override
public int deleteData(int id) {
conn1=jdbcUtil.getConnection();
int i=0;
try{
String sql="delete from note where id=?";
ps=conn1.prepareStatement(sql);
ps.setInt(1,id);
i=ps.executeUpdate();
if(i==1){
return i;
}
}catch (Exception e){
e.printStackTrace();
}finally {
jdbcUtil.ReleaseResource(null,ps,rs);
}
System.out.println("未找到数据!");
return i;
}
//查询一条数据通过ID
@Override
public NoteEntity queryDataById(int id) {
conn1=jdbcUtil.getConnection();
NoteEntity note=null;
if(id>0) {
try {
String sql = "select * from note where id=?";
ps = conn1.prepareStatement(sql);
ps.setObject(1, id);
rs = ps.executeQuery();
if (rs.next()) {
note = new NoteEntity();
note.setId(rs.getInt("id"));
note.setType(rs.getString("type"));
note.setText(rs.getString("text"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
jdbcUtil.ReleaseResource(null, ps, rs);
}
}
return note;
接着做service层和servlet层
public Connection conn=null;
public ResultSet rs=null;
public PreparedStatement ps=null;
boolean b=false;
// 这里service层要想与dao层建立联系那么必须创建dao层的对象
NoteDao note=new NoteDaoImpl();
// 查询所有的数据
@Override
public List<NoteEntity> queryAllData() {
return note.queryAllData();
}
// 新增
@Override
public Boolean insertData(NoteEntity no) {
if(no!=null) {
note.insertData(no);
b = true;
}
return b;
}
// 修改
@Override
public Boolean updateData(NoteEntity no) {
if(no!=null) {
note.updateData(no);
b=true;
}
return b;
}
// 删除
@Override
public Boolean deleteData(int id) {
if(id!=0) {
note.deleteData(id);
b=true;
}
return b;
}
// 查询一条数据
@Override
public NoteEntity queryDataById(int id) {
if (id != 0) {
return note.queryDataById(id);
}
else {
return null;
}
}
private static final long serialVersionUID = 1l;
// 建立一个service对象,为了与service层建立联系
NoteService note = new NoteServiceImpl(); @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");//防止乱码
String type = req.getParameter("action"); // 新增
if ("Insert".equals(type)) {
insert(req, resp);
} else if ("Update".equals(type)) {
update(req, resp);
} else if ("QueryById".equals(type)) {
queryById(req, resp);
} else if ("Delete".equals(type)) {
delete(req, resp);
} else if ("QueryAll".equals(type)) {
queryAll(req, resp);
}
} public void insert(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Integer id = Integer.valueOf(request.getParameter("id")); String type = request.getParameter("type");
String text = request.getParameter("text");
// 把这些获取的值放到note里面
NoteEntity no = new NoteEntity();
// no.setId(id);
no.setType(type);
no.setText(text);
// 最后调用服务来添加
String msg = null;
if (note.insertData(no) == true) {
queryAll(request, response);
} else {
msg = "新增失败!!!";
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Integer id = Integer.valueOf(request.getParameter("id"));
int id= Integer.parseInt(request.getParameter("id"));
String type = request.getParameter("type");
String text = request.getParameter("text");
NoteEntity no = new NoteEntity();
no.setId(id);
no.setType(type);
no.setText(text);
boolean b = note.updateData(no);
if (b) {
queryAll(request, response);
} else {
request.setAttribute("msg", "修改失败!!");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
} public void queryById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
NoteEntity no = null;
//Integer id= Integer.valueOf(request.getParameter("id"));
int id= Integer.parseInt(request.getParameter("id"));
System.out.println(id);
no = note.queryDataById(id);
request.setAttribute("note", no);
request.getRequestDispatcher("/note.jsp").forward(request, response);
} public void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Integer id = Integer.valueOf(request.getParameter("id"));
// System.out.println(id);
String id=request.getParameter("id");
// boolean message=note.deleteData(id);
boolean message= note.deleteData(Integer.parseInt(id));
if(message==true){
queryAll(request,response);
}else {
request.setAttribute("msg","删除失败!!!");
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
} public void queryAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<NoteEntity> list = note.queryAllData();
request.setAttribute("list", list);
request.getRequestDispatcher("note.jsp").forward(request, response);
}
这样就实现了最基本的增删改查了!
那么记下来我想要优化的目标有:
1、实现css的样式美化
2、优化数据库连接代码
3、功能更加完善(创建多个页面实现页面之间的跳转)
4、为了更好的管理jar包,学会maven
5、创建baseDao和baseServlet类
持续更新中...
【新手入门】JDBC+Servlet+jsp【新闻系统的增删改查】:持续学习,持续优化,争取做一个真正的新闻系统出来!的更多相关文章
- JDBC+Servlet+JSP实现基本的增删改查(简易通讯录)
前言: 最近学习JavaWeb的过程中,自己实践练手了几个小项目,目前已经上传到我的Github上https://github.com/Snailclimb/JavaWebProject.目前只上传了 ...
- JDBC+Servlet+JSP的学生案例增删改查
数据库信息传输到页面实现. 先进行学生信息页面展示: 接口IStudentDao public interface IStudentDao { /** * 保存操作 * @param stu 学生对象 ...
- mysql+servlet+jsp实现数据库的增删改查
首先,了解数据库目前我们仅仅用来存放数据,在这里我们在数据库中生成一个表,包含id,classname,teacher,location.Tomcat用来配置eclipse,只有这样我们才能使用JSP ...
- JavaBean+servlet+jsp——>对数据进行增删改查
1.开始页面(查询数据) <%@page import="com.zdsofe.work.Student"%> <%@page import="java ...
- java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)
1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- 系统操作命令实践 下(系统指令+增删改查+vim编辑器)
目录 1.考试 2.今日问题 3.今日内容 4.复制文件 4.移动文件 Linux文件查看补充 cat , nl 5.删除文件 6.系统别名 7.vi/vim编辑器 系统操作命令实践 下(系统指令+增 ...
- web项目总结——通过jsp+servlet实现对oracle的增删改查功能
1.DAO模式 分包:依次建立 entity:实体包,放的是跟oracle数据库中表结构相对应的对象的属性,也就是这个对象有什么 dao:增删改查接口,实现增删改查的具体方法 service:同dao ...
- JSP+Servlet+JavaBean实现数据库的增删改查
基本思想:JSP文件显示页面,使用form或href超链接传值到Servlet中方法,在Servlet方法中调用Dao层的类对象,实现对数据库里的数据的增删改查,之后重新返回到JSP输出操作完的结果. ...
- JavaWeb系统(增删改查、多条件查询功能)
该系统是一个简单的青年服务管理系统,主要包括了较完整的常用的增删改查以及多条件查询功能,对于初学者有很大帮助. 下面是相关的Java代码.jsp页面.以及数据库的创建和相关表的设计 java代码 首先 ...
- Java数据库连接--JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
随机推荐
- 【算法】编写一个函数,返回两个正数的和,有可能超过ulong长度
编写一个函数,返回两个数字的和.输入数字是字符串,函数必须返回一个字符串. 示例: 添加("123","321"):->"444" 添 ...
- WPF实现类似ChatGPT的逐字打印效果
背景 前一段时间ChatGPT类的应用十分火爆,这类应用在回答用户的问题时逐字打印输出,像极了真人打字回复消息.出于对这个效果的兴趣,决定用WPF模拟这个效果. 真实的ChatGPT逐字输出效果涉及其 ...
- Unity UGUI的InputField(输入框)组件的介绍及使用
UGUI的InputField(输入框)组件的介绍及使用 1. 什么是UGUI的InputField组件? UGUI的InputField组件是Unity中的一个用户界面组件,用于接收用户的输入.它可 ...
- B3612 【深进1.例1】求区间和(前缀和)
[深进1.例1]求区间和 [深进1.例1]求区间和 题目描述 给定 \(n\) 个正整数组成的数列 \(a_1, a_2, \cdots, a_n\) 和 \(m\) 个区间 \([l_i,r_i]\ ...
- RocketMQ 系列(二) 环境搭建
RocketMQ 系列(二) 环境搭建 上一个章节对于 RocketMQ 作了一些概念上的介绍,如果你对于 RocketMQ 没有概念,不妨先看RocketMQ系列(一) 基本介绍. 这个章节主要介绍 ...
- 用 ChatGPT 做一个 Chrome 扩展 | 京东云技术团队
用ChatGPT做了个Chrome Extension 最近科技圈儿最火的话题莫过于ChatGPT了. 最近又发布了GPT-4,发布会上的Demo着实吸睛. 笔记本上手画个网页原型,直接生成网页.网友 ...
- 程序员:你如何写可重复执行的SQL语句?
上图的意思: 百战百胜,屡试不爽. 故事 程序员小张: 刚毕业,参加工作1年左右,日常工作是CRUD 架构师老李: 多个大型项目经验,精通各种开发架构屠龙宝术: 小张注意到,在实际的项目开发场景中,很 ...
- IOS苹果应用IPA一键签名工具(苹果重签名,企业签名,Windows平台,时间控制)
苹果应用IPA一键签名工具可以在windows平台对苹果应用IPA文件重新签名,无需MAC苹果电脑和配置XCODE开发环境,便可以直接对IPA文件进行签名,同时支持修改BundleID, 不受描述文件 ...
- 面试题:Mybatis中的#{}和${}有什么区别?这是我见过最好的回答
面试题:Mybatis中的#{}和${}有什么区别? 前言 今天来分享一道比较好的面试题,"Mybatis中的#{}和${}有什么区别?". 对于这个问题,我们一起看看考察点和比较 ...
- Docker系列——介绍、安装、镜像、容器、docker容器与镜像、数据卷、Dockerfile、docker 配置pycharm连接
目录 1 Docker 介绍 1.1 简介 1.2 Docker平台介绍 1.3 为什么使用Docker 2 Docker 整体结构(了解) 2.1 Docker引擎介绍 (Docker Engine ...