5.6 管理员管理图书

管理员有一个图书管理功能,展示图书列表外,最后一列是修改,可以修改该图书的所有属性(id除外)。
流程应该是点击修改链接后进入一个新的jsp页面,根据图书id把该图书的属性读出列到表单,下方的按钮是更新。
最后点击更新,执行update函数,完成更新。下面是用到的SQL函数:
package db;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import db.entity.Book;
public class BookData{
    /**
    根据账号取得用户的所有数据,并保存到一个User对象 * @param username * @return
     */
    public static Book findBookById(String id){
        // 最终返回的user对象
        Book book=new Book();
        book.setId(Integer.parseInt(id));
        // 要执行的sql语句,通过字符串拼接出来
        String SQLTEXT="select * from book where id = '"+id+"'";
        try{
            // 使用上面的DBConifg类的getCon方法,建立一个连接
            Connection con=DBConfig.getCon();
            // 准备执行sql的实体
            Statement stmt=con.createStatement();
            // 执行sql,并把查询结果赋给
            ResultSet rst=stmt.executeQuery(SQLTEXT);
            while(rst.next()){
                // 查询结果,并把结果逐个设置到user对象
                book.setAuthor(rst.getString("author"));
                book.setName(rst.getString("name"));
                book.setPublisher(rst.getString("publisher"));
                book.setValid(rst.getString("valid"));
            }
            // 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
            rst.close();
            stmt.close();
            con.close();
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        return book;
    }
    /**
     通过关键字查找书籍
     */
    public static List search(String keyword){
        // 最终返回的user对象
        List result=new ArrayList();
        // 要执行的sql语句,通过字符串拼接出来
        String SQLTEXT="select * from book where name like '%"+keyword+"%' or author like '%"+keyword+"%' or publisher like '%"+keyword+"%'";
        try{
            // 使用上面的DBConifg类的getCon方法,建立一个连接
            Connection con=DBConfig.getCon();
            // 准备执行sql的实体
            Statement stmt=con.createStatement();
            // 执行sql,并把查询结果赋给
            ResultSet rst=stmt.executeQuery(SQLTEXT);
            while(rst.next()){
                // 查询结果,并把结果逐个设置到user对象
                User Book book=new Book();
                book.setAuthor(rst.getString("author"));
                book.setName(rst.getString("name"));
                book.setPublisher(rst.getString("publisher"));
                book.setAuthor(rst.getString("author"));
                book.setId(rst.getInt("id"));
                book.setValid(rst.getString("valid"));
                result.add(book);
            }
            // 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
            rst.close();
            stmt.close();
            con.close();
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        return result;
    }
    /**
     查找所有书籍
     */
    public static List findAll(){
        // 最终返回的user对象
        List result=new ArrayList();
        // 要执行的sql语句,通过字符串拼接出来
        String SQLTEXT="select * from book";
        try{
            // 使用上面的DBConifg类的getCon方法,建立一个连接
            Connection con=DBConfig.getCon();
            // 准备执行sql的实体
            Statement stmt=con.createStatement();
            // 执行sql,并把查询结果赋给
            ResultSet rst=stmt.executeQuery(SQLTEXT);
            while(rst.next()){
                // 查询结果,并把结果逐个设置到Book对象
                Book book=new Book();
                book.setAuthor(rst.getString("author"));
                book.setName(rst.getString("name"));
                book.setPublisher(rst.getString("publisher"));
                book.setAuthor(rst.getString("author"));
                book.setId(rst.getInt("id"));
                book.setValid(rst.getString("valid"));
                result.add(book);
            }
            // 后使用先关闭原则,关闭各个对象,特别是con如果不关闭,会造成连接泄露
            rst.close();
            stmt.close();
            con.close();
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 更新书籍所有属性
     */
    public static void update(Book book){
        // 要执行的sql语句,通过字符串拼接出来
        String SQLTEXT=String.format("update book set name='%s',author='%s',"+"publisher='%s', valid='%s' where id='%s'",book.getName(),book.getAuthor(),book.getPublisher(),book.getValid(),book.getId());
        System.out.println(SQLTEXT);
        try{
            // 使用上面的DBConifg类的getCon方法,建立一个连接
            Connection con=DBConfig.getCon();
            // 准备执行sql的实体
            Statement stmt=con.createStatement();
            // 执行sql,并把查询结果赋给rst
            stmt.executeUpdate(SQLTEXT);
            stmt.close();
            con.close();
        }
        catch(SQLException e){
            e.printStackTrace();
        }
    }
}


练习题