java代码初级,采用MVC框架实现对数据库的添加操作
2017-09-14 22:25
866 查看
java代码初级,采用MVC框架实现对数据库的添加操作
创建数据表 BOOK_MESSAGECREATE TABLE BOOK_MESSAGE( BOOK_ID NUMBER(6) PRIMARY KEY, BOOK_NAME VARCHAR(200 CHAR) NOT NULL, BOOK_AUTHOR VARCHAR(200 CHAR) NOT NULL, BOOK_PRICE NUMBER(4,2) NOT NULL, BOOK_ISBN CHAR(17) NOT NULL )
创建序列
CREATE SEQUENCE BOOK_MESSAGE_ID;
采用mvc模式搭建服务
com.dhee.common
java常用工具
com.dhee.dao
数据化持久层(接口)
com.dhee.dao.impl
实现数据化持久层接口
com.dhee.service
模型层
com.dhee.servlet
控制层
com.dhee.entity
实体(java Bean封装数据表中的一行数据)
第一步构建简单的jsp页面
代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style type="text/css"> #content{ width:80%; margin: 50px auto; font-size: 16px; height:500px; line-height: 30px; } .table{ width:50%; he 10c9e ight:50%; } </style> </head> <body> <div id = "content"> <form action="insertServlet" method ="post"> <table class = "table"> <tr> <th colspan = "2"> 录入图书信息 </th> </tr> <tr> <td>图书名称</td> <td> <input type = "text" name = "bookName" value = "${bookName }"/> </td> </tr> <tr> <td>图书作者</td> <td> <input type = "text" name = "bookAuthor" value = "${bookAuthor }"/> </td> </tr> <tr> <td>图书单价</td> <td> <input type = "text" name = "bookPrice" value = "${price }"/> </td> </tr> <tr> <td>图书ISBN</td> <td> <input type = "text" name = "bookISBN" value = "${bookISBN }"/> </td> </tr> <tr> <td colspan = "2"> <button type = "submit">录入</button> <button type = "reset">重置</button> </td> </tr> </table> </form> <!-- 如果用户没有填写完整,则调用JavaScript代码弹出对话框提示用户输入完整 --> ${requestScope.msg_error} <!-- 用户提示用户录入操作是否成功 --> ${sessionScope.msg} <!-- 因为属性值保存在session中,执行之后需要清除session --> <c:remove var="msg" scope="session" /> </div> </body> </html>
实现业务逻辑:需要做的是将网页中的数据添加数据表BOOK_MESSAGE中
jsp页面请求servlet,servlet将页面传入的数据封装到BookMessageEntity中,需要调用控制层(Service)的插入方法,控制层知道servlet请求插入数据之后,控制层将会告知数据化持久层进行数据表的相关操作。数据化持久层完成操作后将会把成功或者失败的信息一级一级的传回视图层,告知用户操作的结果。
在com.dhee.dao包中创建接口,定义需要对数据库操作的方法,代码如下:
package com.dhee.dao; import java.sql.Connection; import java.sql.SQLException; import com.dhee.entity.BookMessageEntity; public interface BookMessageDAO { /** * 向BOOK_MESSAGE表中插入一行数据 * * @param conn * 数据库连接对象 * @param entity * 用于保存即将插入数据表一行数据的实体类 * @return 返回boolean类型,成功返回true,失败返回false * @throws SQLException */ public abstract boolean insert(Connection conn, BookMessageEntity entity) throws SQLException; }
com.dhee.dao.impl包中实现接口,重写接口内所有的方法,当然此时只有一个方法(*_*)
package com.dhee.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.dhee.dao.BookMessageDAO; import com.dhee.entity.BookMessageEntity; public class BookMessageDAOImpl implements BookMessageDAO{ @Override public boolean insert(Connection conn, BookMessageEntity entity) throws SQLException { String sql = "INSERT INTO BOOK_MESSAGE VALUES (BOOK_MESSAGE_ID.NEXTVAL,?,?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, entity.getBookName()); ps.setString(2, entity.getBookAuthor()); ps.setDouble(3, entity.getBookPrice()); ps.setString(4, entity.getBookISBN()); int row = ps.executeUpdate(); if(row > 0){ //操作成功 return true; } return false; } }
com.dhee.service包中将调用数据化持久层中的方法,并将视图层传入的图书信息封装作为形参。
package com.dhee.service; import java.sql.Connection; import java.sql.SQLException; import com.dhee.common.DbUtils; import com.dhee.dao.BookMessageDAO; import com.dhee.dao.impl.BookMessageDAOImpl; import com.dhee.entity.BookMessageEntity; public class BookMessageService { /** * 执行insert()方法添加一行图书信息 * * @param entity * 保存图书信息的实体类 * @return 返回boolean类型,成功返回true,失败返回false * @throws ClassNotFoundException * @throws SQLException */ public boolean insert(BookMessageEntity entity) throws ClassNotFoundException, SQLException { Connection conn = DbUtils.getConnection(); try { BookMessageDAO dao = new BookMessageDAOImpl(); boolean b = dao.insert(conn, entity); if (b) { //操作成功,提交并返回true conn.commit(); return true; } //操作失败,回滚 conn.rollback(); } finally { conn.close(); } return false; } }
com.dhee.servlet包,视图层将请求发送给servlet,servlet将数据封装传给控制层。
package com.dhee.servlet; import java.io.IOException; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.dhee.entity.BookMessageEntity; import com.dhee.service.BookMessageService; public class BookMessageInsertServlet extends HttpServlet { /** * */ private static final long serialVersionUID = -3916508440795808156L; public static long getSerialversionuid() { return serialVersionUID; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String bookName = req.getParameter("bookName"); String bookAuthor = req.getParameter("bookAuthor"); String price = req.getParameter("bookPrice"); String bookISBN = req.getParameter("bookISBN"); req.setAttribute("bookName", bookName); req.setAttribute("bookAuthor", bookAuthor); req.setAttribute("price", price); req.setAttribute("bookISBN", bookISBN); // 如果用户没有填写完整,则转发至录入页面继续完成 boolean bN = (bookName == null || bookName.trim().equals("")); boolean bA = (bookAuthor == null || bookAuthor.trim().equals("")); boolean bP = (price == null || price.trim().equals("")); boolean bI = (bookISBN == null || bookISBN.trim().equals("")); if (bN || bA || bP || bI) { req.setAttribute("msg_error", "<script>alert('请填写完整!');</script>"); req.getRequestDispatcher("index.jsp").forward(req, resp); return; } Double bookPrice = Double.valueOf(price); // 创建实体类封装用户输入的图书信息 BookMessageEntity entity = new BookMessageEntity(); entity.setBookName(bookName); entity.setBookAuthor(bookAuthor); entity.setBookPrice(bookPrice); entity.setBookISBN(bookISBN); BookMessageService service = new BookMessageService(); HttpSession session = req.getSession(true); try { boolean b = service.insert(entity); if (b) { session.setAttribute("msg", "<script>alert('录入成功');</script>"); }else{ session.setAttribute("msg", "<script>alert('录入失败');</script>"); } resp.sendRedirect("index.jsp"); return; } catch (ClassNotFoundException | SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); req.getRequestDispatcher("error.jsp").forward(req, resp); } } }
业务逻辑大致就是这样,初学者,第一次写博客,慢慢成长!!!
其中com.dhee.entity就是javabean
package com.dhee.entity; /** * 用于封装BOOK_MESSAGE表中的一行数据 * * @author yuanbao * */ public class BookMessageEntity implements java.io.Serializable { /** * */ private static final long serialVersionUID = -2865032762447701969L; private Integer bookId; private String bookName; private String bookAuthor; private Double bookPrice; private String bookISBN; public Integer getBookId() { return bookId; } public void setBookId(Integer bookId) { this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getBookAuthor() { return bookAuthor; } public void setBookAuthor(String bookAuthor) { this.bookAuthor = bookAuthor; } public Double getBookPrice() { return bookPrice; } public void setBookPrice(Double bookPrice) { this.bookPrice = bookPrice; } public String getBookISBN() { return bookISBN; } public void setBookISBN(String bookISBN) { this.bookISBN = bookISBN; } public static long getSerialversionuid() { return serialVersionUID; } }
com.dhee.common包下,封装了数据库的加载和过滤器的字符设置实现
package com.dhee.common; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DbUtils { public static Connection getConnection() throws ClassNotFoundException, SQLException{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","system","yuanbao"); return conn; } } //下面是过滤器的代码 package com.dhee.common; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * 过滤器,为所有servlet设置字符格式 * * @author yuanbao * */ public class Filter implements javax.servlet.Filter { private String charset; @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { arg0.setCharacterEncoding(this.charset); arg1.setCharacterEncoding(this.charset); arg1.setContentType("text/html;charset=" + this.charset); arg2.doFilter(arg0, arg1); } @Override public void init(FilterConfig arg0) throws ServletException { this.charset = arg0.getInitParameter("charset"); } }
对于web.xml文件的配置
filter的配置要写在servlet的上面每一个servlet都要有一个对应的servlet-mapping
在filter内部写的init-param是属于当前的filter的私有成员
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>pages</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.dhee.common.Filter</filter-class> <init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>bookMessageInsertServlet</servlet-name> <servlet-class>com.dhee.servlet.BookMessageInsertServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>bookMessageInsertServlet</servlet-name> <url-pattern>/insertServlet</url-pattern> </servlet-mapping> </web-app>
由于jsp页面使用了EI表达式,需要连接数据库所以必要的jar包也是要存在的
ojdbc6.jartaglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
相关文章推荐
- 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
- 使用监听器实现JAVA代码对数据库的定时操作,求大神帮帮忙!!!
- 07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao
- 常用代码备忘录(封装 Apache Commons 的 DbUtils 实现的数据库操作工具类)-DBUtil.java
- [置顶] java代码实现对数据库的备份操作
- 学生管理系统,用Java代码连接数据实现数据的添加、更新、删除操作
- 数据库操作:java连接ORACLE实例代码演示
- Java实现嵌入式数据库(文本数据库)代码实例
- java代码获取数据库连接并操作数据库用户
- asp.net Execl的添加,更新操作实现代码
- 树的操作(绑定数据库,添加新节点,删除节点)(转载加实现)
- java代码获取数据库连接并操作数据库用户
- 数据库操作:java连接MYSQL实例代码演示
- 数据库操作:java连接MSSQL实例代码演示
- asp.net Execl的添加,更新操作实现代码
- Java实现嵌入式数据库(文本数据库)代码实例
- 数据库操作:java连接MSSQL实例代码演示
- Java中数据库事务处理的实现-JSP教程,Java技巧及代码
- 利用Java+sqlserver 实现对数据库的操作
- Tom White 是 Kizoom 的首席 Java 开发人员 实现的 如何实现每天定时对数据库的操作