package manager;   
   
import java.sql.Connection;   
import java.sql.DriverManager;   
import java.sql.ResultSet;   
import java.sql.SQLException;   
import java.sql.Statement;   
   
/**  
 * 该类用于连接数据库,关闭数据库  
 *   
 * @author Cute Code  
 *   
 */   
public class DBManager {   
    /**  
     * 无参构造函数  
     *   
     */   
    public DBManager() {   
   
    }   
   
    private Connection conn = null;   
   
    private Statement stmt = null;   
   
    private ResultSet rs = null;   
   
    private String url = "jdbc:mysql://localhost:3306/bookshop?autoReconnect=true&UseUnicode=true&"   
            + "characterEncoding=UTF-8";   
   
    private String username = "root";   
   
    private String password = "7684751";   
   
    /**  
     * 获得数据库连接对象  
     *   
     * @return conn 数据库连接对象  
     */   
    public Connection getConnection() {   
   
        try {   
   
            Class.forName("com.mysql.jdbc.Driver").newInstance();   
   
            conn = DriverManager.getConnection(url, username, password);   
   
        } catch (ClassNotFoundException e) {   
            // TODO Auto-generated catch block    
            e.printStackTrace();   
        } catch (InstantiationException e) {   
            // TODO Auto-generated catch block    
            e.printStackTrace();   
        } catch (IllegalAccessException e) {   
            // TODO Auto-generated catch block    
            e.printStackTrace();   
        } catch (SQLException e) {   
            // TODO Auto-generated catch block    
            e.printStackTrace();   
        }   
   
        return conn;   
    }   
   
    /**  
     * 关闭数据库  
     */   
    public void closeAll(ResultSet rs,Statement stmt,Connection conn) {   
   
        try {   
            if (rs != null) {   
                rs.close();   
            }   
            if (stmt != null) {   
                stmt.close();   
            }   
            if (conn != null) {   
                conn.close();   
            }   
        } catch (SQLException e) {   
            e.printStackTrace();   
        }   
    }   
}   
 
//DAO类
package dao;   
   
   
   
import java.sql.Connection;   
import java.sql.PreparedStatement;   
import java.sql.ResultSet;   
import java.sql.Statement;   
import java.util.ArrayList;   
   
import manager.*;   
import beans.*;   
   
/**  
 * 实现对BOOK的管理  
 * 版本1.0  
 * 作者:CuteCode  
 *  
 */   
public class BookDAO {   
       
    /**  
     * 根据编号来查询BOOK  
     * @param id  
     * @return BOOK对象  
     */   
    public Book querryUseId(int bookId){   
        DBManager manager = null;   
        String querry = "select * from book where id = "+ bookId +";";   
        Connection conn = null;   
        Statement stmt = null;   
        ResultSet rs = null;   
        Book book = null;   
        try{   
            book = new Book();   
            manager = new DBManager();   
            conn = manager.getConnection();   
            stmt = conn.createStatement();   
            rs = stmt.executeQuery(querry);   
               
            while(rs.next()){   
                book.setId(rs.getInt(1));   
                book.setName(rs.getString(2));   
                book.setAuthor(rs.getString(3));   
                book.setBookman(rs.getString(4));   
                book.setPrice(rs.getFloat(5));   
                book.setCategoryId(rs.getInt(6));   
                book.setIntroduction(rs.getString(7));   
                book.setOnSaleDate(rs.getDate(8));   
                book.setOnSaleNum(rs.getInt(9));   
                book.setRemainNum(rs.getInt(10));   
               
                return book;   
            }   
               
            return book;   
        }catch(Exception e ){   
            e.printStackTrace();   
        }finally{   
            manager.closeAll(rs, stmt, conn);   
        }   
        return book;   
    }   
       
    /**  
     * 查询所有的图书  
     * @return ARRAYLIST 查询结果  
     */   
    public ArrayList querryAllBooks(){   
        String querry = "select * from book;";   
           
        ArrayList al = null;   
        DBManager dbm = null;   
        Connection conn = null;   
        Statement stmt = null;   
        ResultSet rs= null;   
           
        try{   
            dbm = new DBManager();   
            conn = dbm.getConnection();   
            stmt = conn.createStatement();   
            rs = stmt.executeQuery(querry);   
            al = new ArrayList();   
               
            while(rs.next()){   
                Book bk = new Book();   
                bk.setId(rs.getInt(1));   
                bk.setName(rs.getString(2));   
                bk.setAuthor(rs.getString(3));   
                bk.setBookman(rs.getString(4));   
                bk.setPrice(rs.getFloat(5));   
                bk.setCategoryId(rs.getInt(6));   
                bk.setIntroduction(rs.getString(7));   
                bk.setOnSaleDate(rs.getDate(8));   
                bk.setOnSaleNum(rs.getInt(9));   
                bk.setRemainNum(rs.getInt(10));        
                   
                al.add(bk);   
            }   
               
            return al;   
               
        }catch(Exception e){   
            e.printStackTrace();   
        }finally{   
            dbm.closeAll(rs, stmt, conn);   
        }   
           
        return al;   
    }   
       
           
       
       
    /**  
     * 插入一本书到数据库  
     * @param book  
     */   
    public void insert(Book book){   
        DBManager manager = null;   
        String insert = "insert into book(name,author,bookman,price,categoryId,introduction,onSaleDate,onSaleNum,remainNum)" +   
                        "values(?,?,?,?,?,?,?,?,?);";   
        Connection conn = null;   
        PreparedStatement pstmt = null;   
        ResultSet rs = null;   
           
        try{   
            manager = new DBManager();   
            conn = manager.getConnection();   
            pstmt = conn.prepareStatement(insert);   
            pstmt.setString(1, book.getName());   
            pstmt.setString(2, book.getAuthor());   
            pstmt.setString(3,book.getBookman());   
            pstmt.setDouble(4,book.getPrice());   
            pstmt.setInt(5,book.getCategoryId());   
            pstmt.setString(6,book.getIntroduction());   
            pstmt.setDate(7,book.getOnSaleDate());   
            pstmt.setInt(8,book.getOnSaleNum());   
            pstmt.setInt(9,book.getRemainNum());   
               
            pstmt.executeUpdate();   
        }catch(Exception e){   
            e.printStackTrace();   
        }finally{   
            manager.closeAll(rs, pstmt, conn);   
        }   
    }   
       
    /**  
     * 根据ID删除一本书  
     * @param bookId  
     */   
    public void delete(int bookId){   
        String delete = "delete from book where id = "+ bookId+ ";";   
           
        DBManager dbm = null;   
        Connection conn = null;   
        Statement stmt = null;   
        try{   
            dbm = new DBManager();   
            conn = dbm.getConnection();   
            stmt = conn.createStatement();   
            stmt.executeUpdate(delete);   
        }catch(Exception e){   
            e.printStackTrace()   
            ;   
        }finally{   
            dbm.closeAll(null, stmt, conn);   
        }   
    }   
       
    /**  
     * 更新一本书的信息  
     * @param book  
     */   
    public void update(Book book){   
        String update = "update book set name = ?,author =?, bookman =?,price=?," +   
                "categoryId=?,introduction=?,onSaleDate=?,onSaleNum =?,remainNum=? where id = "+ book.getId();   
           
        DBManager dbm = null;   
        Connection conn= null;   
        PreparedStatement pstmt = null;   
           
        try{   
            dbm = new DBManager();   
            conn= dbm.getConnection();   
            pstmt = conn.prepareStatement(update);   
               
            pstmt.setString(1,book.getName());   
            pstmt.setString(2,book.getAuthor());   
            pstmt.setString(3,book.getBookman());   
            pstmt.setFloat(4,book.getPrice());   
            pstmt.setInt(5, book.getCategoryId());   
            pstmt.setString(6,book.getIntroduction());   
            pstmt.setDate(7,book.getOnSaleDate());   
            pstmt.setInt(8, book.getOnSaleNum());   
            pstmt.setInt(9,book.getRemainNum());   
               
            pstmt.executeUpdate();   
               
        }catch(Exception e){   
            e.printStackTrace();   
        }finally{   
            dbm.closeAll(null, pstmt, conn);   
        }   
    }   
       
    /**  
     * 更新书的数量  
     * @param bookId  
     * @param saleNum  
     */   
    public void updateNum(int bookId,int saleNum){   
           
        String querry = "select * from book where id="+bookId;   
        String sql;   
           
        DBManager dbm = null;   
        Connection conn = null;   
        Statement stmt = null;     
        try{   
            ResultSet rs = null;   
            dbm = new DBManager();   
            conn = dbm.getConnection();   
            stmt = conn.createStatement();   
            rs = stmt.executeQuery(querry);   
            int num=0;   
            if(rs.next()){   
                   
             num = rs.getInt(10);   
               
            }   
            sql= "update book set remainNum ="+(num-saleNum)+" where id="+ bookId+ ";";   
            stmt.executeUpdate(sql);   
        }catch(Exception e){   
            e.printStackTrace()   
            ;   
        }finally{   
            dbm.closeAll(null, stmt, conn);   
        }   
           
    }   
       
       
}