做了一个在网页上对数据库进行删改查功能的实验,为了记下实验收获,遂写下笔记
编辑器是IDEA,用到了javabean,request对象,主要代码部分有:
java部分(放在src-DAO包中) | jsp部分(放在web目录下) |
---|---|
User.java | deleteUser.jsp |
Userdao.java | doUpdateUser.jsp |
DBConnection.java | queryUser.jsp |
updateUser.jsp |
实现的具体逻辑如下
首先DBConnection是套路型文件,目的是与数据库进行连接,
它可以是这样(这部分的功能是测试连接)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;
也可以是这样,
构造一个返回类型为Connection 的方法,*注意,返回的Connection对象在后面的UserDao中 可调用prepareStatement方法封装sql语句,
graph TD; DBConnection返回Connection对象-->UserDao中声明Connection对象con-->con调用prepareStatement方法封装sql语句ps-->ps执行setString或setInt填充语句-->executeUpdate或executeQuery;其中重点的是
此处的类中的变量必须和数据库表中的字段一一对应,类名和变量名最好与表相同。在这里我没有一一对应,要记得后面UserDao的sql语句别写错了,那里要和数据库字段名对应。
其中还要额外实现getter和setter方法,IDEA中右键点击generate就行了。在UserDao中,User类的作用在于new一个对象,存储获得的真实数据库中对象的值,方便返回
预先导入这些包
import java.sql.*; import java.util.ArrayList;
其中声明了很多对数据库进行操作的方法,每个方法中的步骤都为:1.建立连接,2.写sql语句,在这里sql语句定然是不完整的,缺失的部分通过 ? 英文问号表示,再在PreparedStatement自带的方法setString方法能通过问号的位置插入。
public static void insertUser(User user) | public static void deleteUser(int id) |
---|---|
public static void updateUser(User user) | public static User getUser(int id) |
public static ArrayList |
public static ArrayList |
public static void main (String[] args) 默认主函数 |
public static void insertUser(User user) {...} ,setString中通过调用user的get方法获得插入sql内容,这里user应该是通过输入框封装而成。
public static void deleteUser(int id) {...},
这里在jsp页面的逻辑是在界面中点击要删除的字段,跳到deleteUser.jsp时,通过在后面加上 ?id=<%= user.getId()%> 向deleteUser.jsp传id值。
显示所有user的jsp页面
graph TD; id0[< jsp:useBean>标签将UserDao类的对象用id'userDao'表示]-->id1[userDao.getAllUser存入ArrayListUser< user> userList]-->id2["循环调用列表里的user:for(User user:userList)"]-->id3["通过表达式<%= user.getId()%>向表格插入User信息"];public static void updateUser(User user) {...},逻辑也是一样,updateUser的jsp页面先useBean,再通过request获取id值,但这里方法的输入是user,所以要new 一个user对象,调用它的getUser(id)方法获得user,再调用它的updateUser方法,注意,这个方法需要输入有完整属性的user对象,而既然是更新,那肯定要有输入框传入更新后的值。
故这里再用一个表格跳转至另一个jsp页面,通过前表格的每一个input 得到更新后的user各属性,通过input框特有的name传值法,在下一个页面用request.getParameter(name)就能获得这些属性值
graph TD; id0["通过request获取上个页面传来的id值"]-->id1["通过form得到更新后的各属性值,再跳转至另一界面"]-->id2["通过request.getParameter 获得上个界面各属性"]-->id3["new user,调用其setId等来保存更新后的各属性"]-->id4["再用userDao调用其updateUser(user)方法,<br>传入sql,数据库执行"];最后response.sendRedirect跳回queryUser.jsp,发现各项已更新。
还差两个返回列表的
public static ArrayList
public static ArrayList
积累的地方:
1. 在href里通过变量名+?可以传值 |
---|
2. request对象可以通过getParameter(变量名)获取上个页面传来的变量值,不仅是类似href中 变量?=,还有上个页面input的name值 |
3. setString方法(1,value)可以根据?的顺序填充值 |
4. 在update时form表格通过type="hidden" 保证了user的id不被更改 |
5. response.sendRedirect 重定向? |
期待能在空闲时间把模糊查询功能完善。