1、关于优化SQL里面的图书优化最后附有完整代码和详细解释关于优化SQL里面的图书管理系统(内附完整代码和详解)首先新增两个功能:模糊查询和借书还书功能1模糊查询和简单查询差不多。唯一差的就是在查询select * from biao where name = like ;多了百分号。2 借书功能。先获取图书的编号,然后给是否借出那一栏赋值“是”,这样用select count(*)from 去查询的时候就可以返回个1或者0,1说明编号和“是”匹配,就是说编号为“”的图书已经被借走了。先存储数据 然后跳转error.jsp界面让他过几天来借书,如果是0,说明编号和“是”不匹配。编号一定有,就说明“
2、是”不对,那就只有“否”了。这样跳转到查询界面取出数据,修改参数就好。言归正传,开始优化功能。 1首先是链接数据库的优化,我用的是自己电脑里面的SQL数据库。所以用户名了密码了都一样,可以用private static final String 去封装。比如:private static final String driverName = com.mysql.jdbc.Driver; private static final String userName=root; private static final String userPasswd=123456; private static f
3、inal String dbName=xueshenbiao; private static final String tableName=tongxunlv;2连接数据库方面的优化:public Statement getDbStatement() String url=jdbc:mysql:/localhost/+dbName+?user=+userName+&password=+userPasswd; Statement statement = null; try Class.forName(com.mysql.jdbc.Driver).newInstance(); java.sql.C
4、onnection connection=DriverManager.getConnection(url); statement = connection.createStatement(); catch(Exception e) e.printStackTrace(); return statement; public Statement getDbStatement()中statement的意思是:3查询语句的优化因为查询语句查询到的是一个单子。而不是简单的一天数据。所以要用集合进行包含 Public List doQuery(String sql) List qw = new Array
5、List(); try ResultSet rs = getDbStatement().executeQuery(sql); while(rs.next()/循环操作 shuxing a = new shuxing(); String bookNO = rs.getString(1); String bookName = rs.getString(2); String author = rs.getString(3); String press = rs.getString(4); String isborrow = rs.getString(5); String borrowDate = r
6、s.getString(6); String backDate = rs.getString(7); a.setBookNO(bookNO); a.setBookName(bookName); a.setAuthor(author); a.setPress(press); a.setIsborrow(isborrow); a.setBorrowDate(borrowDate); a.setBackDate(backDate); qw.add(a); catch(Exception e) e.printStackTrace(); return qw; ResultSet rs =getDbSta
7、tement().executeQuery(sql);意思是:4之后是删除修改增加的语句优化,因为他们返回的都是几条几条数据所以用INT进行定义public int doUpdate(String sql) int result = 0; try getDbStatement().executeUpdate(sql); catch(Exception e) e.printStackTrace(); return result; 5修改的时候需要查询需要修改的那条数据的具体内容需要进行单条数据的查询。和总的差不多。但是他返回的不是一条不是一个集合。而是一条完整数据,用shuxing(分装包里面类
8、的名字)去定义public shuxing doApp(String sql) shuxing a1 = new shuxing(); try ResultSet rs = getDbStatement().executeQuery(sql); while(rs.next() String bookNO= rs.getString(1); String bookName = rs.getString(2); String author = rs.getString(3); String press = rs.getString(4); String isborrow = rs.getStrin
9、g(5); String borrowDate = rs.getString(6); String backDate = rs.getString(7); a1.setBookNO(bookNO); a1.setBookName(bookName); a1.setAuthor(author); a1.setPress(press); a1.setIsborrow(isborrow); a1.setBorrowDate(borrowDate); a1.setBackDate(backDate); catch(Exception e) e.printStackTrace(); return a1;
10、4对于接收的属性的优化比如要接收什么图书编号了出版社什么的。每次都写有点麻烦所以就也封装下因为封装的也是个数据类型所以public shuxing getBook(HttpServletRequest request) /接收book的所有属性参数,并封装,由于参数都是从request中获取,所以以HttpServletRequest作为参数 shuxing bk = new shuxing(); String bookNO = request.getParameter(bookNO); bookNO = bookNO=null?:bookNO.trim(); bk.setBookNO(boo
11、kNO);/封装图书编号 String bookName = request.getParameter(bookName); bookName = bookName = null?:bookName.trim(); bk.setBookName(bookName);/封装图书名称 String author = request.getParameter(author); author = author = null?:author.trim(); bk.setAuthor(author);/封装作者 String press = request.getParameter(press); pre
12、ss = press = null?:press.trim(); bk.setPress(press);/封装出版社 String isborrow = request.getParameter(isborrow); isborrow = isborrow = null?:isborrow.trim(); bk.setIsborrow(isborrow);/封装是否借出 String borrowDate = request.getParameter(borrowDate); borrowDate = borrowDate = null?:borrowDate.trim(); bk.setBo
13、rrowDate(borrowDate);/封装借出时间 String backDate = request.getParameter(backDate); backDate = backDate = null?:backDate.trim(); bk.setBackDate(backDate);/封装归还时间 return bk; 之所以和之前封装的不同,是因为他封装的是接收的信息,而不是直接原有的信息。用一个集合BK去包含这些属性。然后在外面的时候去调用这个BK函数接着就是servlet的缩写了。首先用一个集合调出之前封装的东西1 调出数据库的方法。Youhua de = new youh
14、ua();2 调出封装数据的方法。shuxing bk = getBook(request);3 方法中多余的删除,在有数据的地方用BK代替,如Int result = doADD(bk)原先里面写的是读出来的数据。现在封装了。所以就用BK代替。值得注意的是在进行单条数据查询用来修改的时候,要从之前的方法中调用方法,需要新建一个集合,然后去调用这个方法youhua yh = new youhua();shuxing a1 = yh.doApp(sql);在后面的删除修改方法的SQL语句中,需要用bk.getBookNo()去寻找用户输入的数据,注意的是上面方面中public int doAdd
15、(shuxing bk)括号内需要写入BK。完整代码和详解Controller包package controller;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.serv
16、let.http.HttpServletResponse;import service.bookService;import dao.DataBaseDao;import model.book;public class bmanager extends HttpServlet public bmanager() super(); public void destroy() super.destroy(); /doPost方法获得请求类型,根据请求类型做出响应并返回到视图层,相当于控制层 public void doPost(HttpServletRequest request, HttpSer
17、vletResponse response)throws ServletException, IOException /封装book,单独写了getBook()方法 book bk = getBook(request); /获取行为参数,如果什么都不传,默认是查询操作 String actionName = request.getParameter(action); actionName = actionName = null?query:actionName.trim(); System.out.println(动作类型action:+actionName); /实例化调用数据库服务的对象相
18、当于服务层 bookService bs = new bookService(); /-查询- if(actionName.equals(query) System.out.println(执行:query.); List booklist = bs.getBookList(bk); request.setAttribute(booklist, booklist); request.getRequestDispatcher(bookList.jsp).forward(request, response); /-增加- else if(actionName.equals(add) System.
19、out.println(执行:add.); int result = bs.doAddBook(bk); if(result=0) /添加失败 request.setAttribute(errorMsg, 图书添加失败!); request.getRequestDispatcher(error.jsp).forward(request, response); else /添加成功 request.getRequestDispatcher(bmanager).forward(request, response); /注意这里之前我们都是要再做一次查询图书列表然后再跳转到图书列表页,考虑到每个方法
20、 /都要在做完自己的功能之后再要做一次查询功能,比较繁琐,可以直接跳转到 /localhost:8080/bookManager/bmanager,不传任何参数,那么当servlet接收到请求 /之后,会被默认作为查询操作,调用查询方法,而查询方法正是返回到图书列表页 /-to修改- else if(actionName.equals(toEditBook) System.out.println(执行:toEditBook.); book newbk = bs.getBookInfo(bk); request.setAttribute(book, newbk); request.getRequ
21、estDispatcher(Editbook.jsp).forward(request, response); /-修改- else if(actionName.equals(edit) System.out.println(执行:edit.); int result = bs.editBook(bk); if(result=0) /修改失败 request.setAttribute(errorMsg, 图书修改失败!); request.getRequestDispatcher(error.jsp).forward(request, response); else /修改成功 request
22、.getRequestDispatcher(bmanager).forward(request, response); /-删除- else if(actionName.equals(delete) System.out.println(执行:delete.); int result = bs.deleteBook(bk); if(result=0) /删除失败 request.setAttribute(errorMsg, 图书删除失败!); request.getRequestDispatcher(error.jsp).forward(request, response); else /删除
23、成功 request.getRequestDispatcher(bmanager).forward(request, response); /考虑到增,删,改,查都是围绕图书这一对象进行,那么可以在进入控制层的时候就封装book的所有属性 public book getBook(HttpServletRequest request) /接收book的所有属性参数,并封装,由于参数都是从request中获取,所以以HttpServletRequest作为参数 book bk = new book(); String bookNo = request.getParameter(bookNo); b
24、ookNo = bookNo=null?:bookNo.trim(); bk.setBookNo(bookNo);/封装图书编号 String bookName = request.getParameter(bookName); bookName = bookName = null?:bookName.trim(); bk.setBookName(bookName);/封装图书名称 String author = request.getParameter(author); author = author = null?:author.trim(); bk.setAuthor(author);/
25、封装作者 String press = request.getParameter(press); press = press = null?:press.trim(); bk.setPress(press);/封装出版社 String isborrow = request.getParameter(isborrow); isborrow = isborrow = null?:isborrow.trim(); bk.setIsborrow(isborrow);/封装是否借出 String borrowDate = request.getParameter(borrowDate); borrowD
26、ate = borrowDate = null?:borrowDate.trim(); bk.setBorrowDate(borrowDate);/封装借出时间 String backDate = request.getParameter(backDate); backDate = backDate = null?:backDate.trim(); bk.setBackDate(backDate);/封装归还时间 System.out.println(-book封装完毕-); return bk; bao包package dao;import java.sql.DriverManager;im
27、port java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import model.book;/这个类相当于最数据库层,一切直接操作数据库的代码全部封装在最底层public class DataBaseDao /公用的部分可以抽出来 private static final String userName=root; private static final String userPasswd=123456; private static final String dbName=xueshenbiao; /这一部分是获取数据库连接statment的代码,因为无论是增,删,改,查操作都要操作数据库,所以获取数据库连接在每个方法里都要重复写,可以单独抽出来 /这就是代码的重复利用 public Stateme
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1