作为一位萌新,在上手java的时候,我们能想到的,是越简单越好,越简洁越好,我不要什么业务分层、不要什么高深框架,我只要最简洁、能让我一眼就看明白流程的实现方式,那么,这个适合你!
采用前端一个页面+Servlet即可搞定。听起来是不是美滋滋?
1.前端一个页面,长这样,具体的自己实现,就两个input 一个选择项,两个button。
2.java代码
直接上Servlet(增)
public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取前端传来的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String sex = req.getParameter("sex"); try { //1.加载驱动 (这一步是反射原理) Class.forName("com.mysql.jdbc.Driver"); //2.建立数据库连接 String url="jdbc:mysql://localhost:3306/jdbc_test"; Connection connection = DriverManager.getConnection(url, "root", "88888888"); //3.准备sql语句 String sql = "INSERT INTO info VALUES(?,?,?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1,username); preparedStatement.setString(2,password); preparedStatement.setString(3,sex); //4.执行语句 preparedStatement.executeUpdate();//与execute的区别 //5.关闭资源 preparedStatement.close(); connection.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } System.out.println("执行结束了!快跑去数据库看看吧!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } }删除和修改与增加原理相同,只是sql语句的不同。
完完整整的流程就在上面了。
思考几个问题:
1. 为什么LoginServlet需要继承HttpServlet ? HttpServlet在哪个jsr包中?
2.为什么写serialVersionUid?
3.增、删、改三种操作中,前端传来的参数,是通过什么流程被servlet获取的,并入和操纵数据库的?
4.executeUpdate()与 execute()的区别?
解答:
1.在客户端请求时,由服务器调用HttpServlet的Service方法,其内部调用是根据当前请求是GET还是POST的提交dao请求来做出具体调用哪一个方法,而在HttpServlet里边没有具体实现这个是一模板方法,由用户自己实现业务逻辑。
2.序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 有两种生成方式: 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: private static final long serialVersionUID = xxxxL; (暂时了解一下吧)
3.前端的参数,通过请求发送给后端servlet,servlet调用request.getPameter()方法,来获取参数内容。
通过JDBC连接数据库,通过PreparedStatement发送sql语句,由executeUpdate()执行。
4.相同点:execute与executeUpdate的相同点:都可以执行增加,删除,修改
不同1: execute可以执行查询语句 然后通过getResultSet,把结果集取出来 executeUpdate不能执行查询语句 不同2: execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等 executeUpdate返回的是int,表示有多少条数据受到了影响
离小白又远了一步,好难受。
关于查
ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()){ System.out.println("姓名:"+resultSet.getString("username")+" 密码:"+resultSet.getString("password")+"性别:"+resultSet.getString("sex")); }在上面增删改的基础上,加上一个结果集获取查询到的结果,使用的方法是executeQuery()
之后使用while遍历,在控制台输出内容。
注意:不能使用增强for循环。我在面试的时候就别这个东西坑了。
