【新手入门】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 ...
随机推荐
- GPT-4助力数据分析:提升效率与洞察力的未来关键技术
摘要 随着大数据时代的到来,数据分析已经成为企业和组织的核心竞争力.然而,传统的数据分析方法往往无法满足日益增长的数据分析需求的数量和复杂性.在这种背景下,ChatGPT-4作为一种先进的自然语言处理 ...
- Linux校验文件MD5和SHA值的方法
1.需求背景 下载或传输文件后,需要计算文件的MD5.SHA256等校验值,以确保下载或传输后的文件和源文件一致 2.校验方法 如上图所示,可以使用Linux自带的校验命令来计算一个文件的校验值 Li ...
- 如何做一个完美的api接口?
如何做一个api接口?:我们知道API其实就是应用程序编程接口,可以把它理解为是一种通道,用来和不同软件系统间进行通信,本质上它是预先定义的函数:-api,接口 1 我们知道API其实就是应用程序编程 ...
- vue列表逐个进入过渡动画
vue实现列表依次逐渐进入动画 利用vue 中transition-group 实现列表逐个进入动画效果 1.vue3代码, <template> <section class=&q ...
- 你知道Golang的模板怎么用吗?带你了解动态文本的生成!
Golang Template Go语言中的Go Template是一种用于生成文本输出的简单而强大的模板引擎.它提供了一种灵活的方式来生成各种格式的文本,例如HTML.XML.JSON等. Go T ...
- 6-MySQL查询条件
在MySQL中,高级查询是指使用更复杂的查询语句和操作符来检索和操作数据库中的数据.高级查询可以帮助您更精确地找到所需的信息,并提高查询的效率和灵活性. 以下是高级查询的一些常见应用场景和意义: 连接 ...
- oracle优化-分页查询新认识
在写这篇文章之前,对分页查询的认识就是经典的三层嵌套:第①层:获得需要的数据,第②层:用rownum限制展示数据的上限,第③层:用rownum的别名rn限制展示数据的下限. 在生产中遇见一个两层嵌套满 ...
- QFluentWidgets: 基于 C++ Qt 的 Fluent Design 组件库
简介 QFluentWidgets 是一个基于 Qt 的 Fluent Designer 组件库,内置超过 150 个开箱即用的 Fluent Designer 组件,支持亮暗主题无缝切换和自定义主题 ...
- Android历史版本
目录 [隐藏] 1 测试版 2 版本列表 2.1 Android 1.0 2.2 Android 1.1 2.3 Android 1.5 Cupcake 2.4 Android 1.6 Donut ...
- LLM探索:为ChatGLM2的gRPC后端增加连续对话功能
前言 之前我做 AIHub 的时候通过 gRPC 的方式接入了 ChatGLM 等开源大模型,对于大模型这块我搞了个 StarAI 框架,相当于简化版的 langchain ,可以比较方便的把各种大模 ...