基于Servlet&Jsp的网上书店设计(二)

时间:2022-02-15 21:02:49

五,代码解析

5.1数据表JavaBean

Book.java

package com.beans;

public class Book {
	public static final int PAGE_SIZE=6;
    private int bookId;
    private String name;
    private String author;
    private String publisher;
    private String price;
    public Book(){
    	
    }
   public Book(int bookId, String name,String author,String publisher,String price){
    	this.bookId=bookId;
    	this.name=name;
    	this.author=author;
    	this.publisher=publisher;
    	this.price=price; 	
    }
   	public int getBookId() {
   		return bookId;
   	}
   	public void setBookId(int bookId) {
   		this.bookId = bookId;
   	}
   	public String getName() {
   		return name;
   	}	
   	public void setName(String name) {
   		this.name = name;
   	}
   	public String getAuthor() {
   		return author;
   	}
   	public void setAuthor(String author) {
   		this.author = author;
   	}
   	public String getPublisher() {
   		return publisher;
   	}
   	public void setPublisher(String publisher) {
   		this.publisher = publisher;
   	}
   	public String getPrice() {
   		return price;
   	}
   	public void setPrice(String price) {
   		this.price = price;
   	}  
}

User.java

package com.beans;

public class User {
      private String ID;
      private String Password;
      private String Sex;
      private String Phone;
      private String Home;
      private String Email;
      private String Header;
      public User(){
    	  
      }
      public User(String ID,String Password, String Sex,String Phone,String Home,String Email,String Header){
    	  this.ID=ID;
    	  this.Password=Password;
    	  this.Sex=Sex;
    	  this.Phone=Phone;
    	  this.Home=Home;
    	  this.Email=Email; 
    	  this.Header=Header;
      }
	public String getID() {
		return ID;
	}
	public void setID(String iD) {
		ID = iD;
	}
	public String getPassword() {
		return Password;
	}
	public void setPassword(String password) {
		Password = password;
	}
	public String getSex() {
		return Sex;
	}
	public void setSex(String sex) {
		Sex = sex;
	}
	public String getPhone() {
		return Phone;
	}
	public void setPhone(String phone) {
		Phone = phone;
	}
	public String getHome() {
		return Home;
	}
	public void setHome(String home) {
		Home = home;
	}
	public String getEmail() {
		return Email;
	}
	public void setEmail(String email) {
		Email = email;
	}
	public String getHeader() {
		return Header;
	}
	public void setHeader(String header) {
		Header = header;
	}
      
}

CartBook.java是用户的购物车表

package com.beans;

public class CartBook {
    private int Id;
    private String name;
    private String price;
    private int num;
    private int total;
    public CartBook(){
    	
    }
   public CartBook(int Id, String name,String price,int num,int total){
    	this.Id=Id;
    	this.name=name;
    	this.price=price; 
    	this.num=num;
        this.total=total;
    }
   	public int getBookId() {
   		return Id;
   	}
   	public void setBookId(int Id) {
   		this.Id = Id;
   	}
   	public String getName() {
   		return name;
   	}	
   	public void setName(String name) {
   		this.name = name;
   	}

   	public String getPrice() {
   		return price;
   	}
   	public void setPrice(String price) {
   		this.price = price;
   	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public int getTotal() {
		return total;
	}
	public void setTotal(int total) {
		this.total = total;
	} 
   	
}


5.2操作数据库DAO

BookDao.java主要有两个功能,:返回图书列表,根据图书Id返回这本书的信息

 

package com.Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.beans.Book;
import com.tools.DBConnection;

public class BookDao {
	 DBConnection DB=new DBConnection();
     Connection conn=null;
     //返回所有图书列表
     public List<Book> getBookList(){
    	 List<Book> list=new ArrayList<Book>();
    	 try {
    		  conn=DB.getCon();
        	  String sql="select * from books";
			  PreparedStatement pstm=conn.prepareStatement(sql);
			  ResultSet rs=pstm.executeQuery();
			  while(rs.next()){
				  Book book=new Book();
				  book.setBookId(rs.getInt(1));
				  book.setName(rs.getString(2));
				  book.setAuthor(rs.getString(3));
				  book.setPublisher(rs.getString(4));
				  book.setPrice(rs.getString(5));
				  list.add(book);
			  }
			  return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	 return null;
     }
     //根据图书ID返回这本书的信息
     public Book getBookById(int bookid){
    	 Book book=new Book();
    	 try {
   		      conn=DB.getCon();
   		   	  String sql="select * from books where BookID=?";
			  PreparedStatement pstm=conn.prepareStatement(sql);
			  pstm.setInt(1, bookid);
			  ResultSet rs=pstm.executeQuery();
			  while(rs.next())
			  {
				  book.setBookId(rs.getInt(1));
				  book.setName(rs.getString(2));
				  book.setAuthor(rs.getString(3));
				  book.setPublisher(rs.getString(4));
				  book.setPrice(rs.getString(5));				
			  }
			  return book;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}			
   	 return null;
     }
     
}

CartDao.java主要是对购物车中的书籍进行增删查改操作

package com.Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.beans.Book;
import com.beans.CartBook;
import com.tools.DBConnection;

public class CartDao {
	 DBConnection DB=new DBConnection();
     Connection conn=null;
     //获得所有已买书籍
    public List<CartBook> getAllCartBooks(String userid){
    	 conn = DB.getCon();	//获取数据库连接  
    	 List<CartBook> list=new ArrayList<CartBook>();
    	 System.out.println("已经进入函数");
    	 if(conn!= null){    		
    		 try {   			
    			System.out.println(userid);
    			String sql="select * from "+userid;
    			System.out.println(sql);
				PreparedStatement pstm=conn.prepareStatement(sql);
				ResultSet rs=pstm.executeQuery();
				while(rs.next()){
					CartBook cb=new CartBook();
					cb.setBookId(rs.getInt(1));
					cb.setName(rs.getString(2));
					cb.setPrice(rs.getString(3));
					cb.setNum(rs.getInt(4));
					cb.setTotal(rs.getInt(5));
					list.add(cb);
				}				
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	 }
    	 return list;
     }
     //插入书籍
    public boolean InsertBook(String userid,Book b){  
    	 conn = DB.getCon();			//获取数据库连接      	
    	 //System.out.println(userid);
      if(conn!=null){
    	  try { 
    		 
      		String sql="insert into "+userid+" values(?,?,?,?,?)";
      		System.out.println(sql);
  			PreparedStatement pstm=conn.prepareStatement(sql); 			
  			pstm.setInt(1, b.getBookId());
  			//System.out.println(b.getName());
			pstm.setString(2, b.getName());			
  			pstm.setString(3, b.getPrice());
  			pstm.setInt(4, 1);
  			pstm.setInt(5, Integer.parseInt(b.getPrice()));
  			System.out.println("语句没错");
  			pstm.executeUpdate();
  			return true;			
  		} catch (SQLException e) {
  			// TODO Auto-generated catch block
  			e.printStackTrace();
  		}     	
      }
   	  return false;    	
     }
     //删除已买书籍
    public boolean DeleteBook(String userid,int bookid){    	 
    	 conn = DB.getCon();			//获取数据库连接  
    	 if(conn!=null){   		
    		try {
    			
    			String sql="delete from "+userid+" where ID='"+bookid+"'";
				PreparedStatement pstm=conn.prepareStatement(sql);
				pstm.executeUpdate();
				return true;
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	 }
    	 return false;
     }
     //修改数量
   public  boolean ModifyNum(String userid,int bookid,int num){
    	 conn = DB.getCon();			//获取数据库连接  
    	 int total=0;
    	 int oldnum=0;
    	 if(conn!=null){
    		try{
    			//获得原来的数量
    			 String sql3="select Num from "+userid+" where ID='"+bookid+"'";
    			 PreparedStatement pstm3 = conn.prepareStatement(sql3);
    			 ResultSet rs=pstm3.executeQuery();
    			 if(rs.next()){
    				 oldnum=rs.getInt(1);
    			 }
    			 if(oldnum==1){
    				 if(num==-1){
    					 return true;
    				 }
    			 }
    			 //更新数量
    			 String sql="update "+userid+" set Num='"+(num+oldnum)+"' where ID='"+bookid+"'";
        		 PreparedStatement pstm = conn.prepareStatement(sql);
        		 pstm.executeUpdate();
        		  //计算总价
        		 String sql1="select Price from "+userid+" where ID='"+bookid+"'";
        		 PreparedStatement pstm1 = conn.prepareStatement(sql1);
        		 ResultSet rs1=pstm1.executeQuery();
        		 if(rs1.next()){
        			 total=Integer.parseInt(rs1.getString("Price"))*(num+oldnum);
        		 }
        		 //修改总价
        		 String sql2="update "+userid+" set Total='"+total+"' where ID='"+bookid+"'";
        		 PreparedStatement pstm2 = conn.prepareStatement(sql2);
        		 pstm2.executeUpdate(); 
        		 
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}		    		   
    	 }
    	 return false;
     }
   //书籍是否存在
     public boolean isContainBook(String userid,String bookid){
    	 conn = DB.getCon();			//获取数据库连接  
    	 if(conn!=null){   		 
    		 try {   			 
    			 String sql="select * from "+userid+" where ID='"+bookid+"'";
				 PreparedStatement pstm = conn.prepareStatement(sql);
				 ResultSet rs= pstm.executeQuery();
				 if(rs.next())//如果存在这本书
					 return true;
				 
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    		 
    	 }else{
    		 System.out.println("创建连接失败");
    	 }    	 
    	 return false;
     }
     //返回书的总价格
     public int getTotalPrice(String userid){
    	 conn = DB.getCon();			//获取数据库连接  
    	 if(conn!=null){   	
    		
    		 try {
    			
    			 String sql="select sum(Total) as total from "+userid;
				 PreparedStatement pstm = conn.prepareStatement(sql);
				 ResultSet rs= pstm.executeQuery();
				 if(rs.next()){
					 return rs.getInt(1);
				 }
				 
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	 }
    	 return 0;
     }
     //清空所有书籍
     public boolean ClearCartBook(String userid){
    	 conn = DB.getCon();			//获取数据库连接  
    	 if(conn!=null){   		
    		try {
    			
    			String sql="delete from "+userid;
				PreparedStatement pstm=conn.prepareStatement(sql);
				pstm.executeUpdate();
				return true;
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	 }
    	 return false;
    	
     }
}

PageQueryDao.java实现分页查询显示书籍

package com.Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.beans.Book;
import com.tools.DBConnection;

public class PageQueryDao {
	    //分页查询所有书目信息
        public List<Book> getPageList(int page){
        	List<Book> list=new ArrayList<Book>();
        	DBConnection DB=new DBConnection();
        	Connection conn=DB.getCon();
        	String sql="select * from books order by BookID asc limit ?,?";//limit关键字
        	try {
        		
				PreparedStatement pstm=conn.prepareStatement(sql);
				pstm.setInt(1, (page-1)*Book.PAGE_SIZE); //设置查询记录的开始位置
				pstm.setInt(2, Book.PAGE_SIZE);          //设置查询数据所返回的记录数
				ResultSet rs=pstm.executeQuery();
				 while(rs.next()){
					  Book book=new Book();
					  book.setBookId(rs.getInt(1));
					  book.setName(rs.getString(2));
					  book.setAuthor(rs.getString(3));
					  book.setPublisher(rs.getString(4));
					  book.setPrice(rs.getString(5));
					  list.add(book);
				  }
				 rs.close();
				 pstm.close();
				 conn.close();
				 
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        	return list;
        }
        
        //查询总记录数
        public int FindCounts(){
        	int count=0;
        	DBConnection DB=new DBConnection();
        	Connection conn=DB.getCon();
        	String sql="select count(*) from books";
        	try {
        		
				PreparedStatement pstm=conn.prepareStatement(sql);
				ResultSet rs=pstm.executeQuery();
				if(rs.next()){//rs里就一个值
					count=rs.getInt(1);					
				}
				rs.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
        	return count;
        	
        }
	
}
UserDao.java

package com.Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.beans.User;
import com.tools.DBConnection;

public class UserDao {
     DBConnection DB=new DBConnection();
     Connection conn=null;
   //编写按用户名密码查询用户方法
     public User getUser(String userID,String Password){
     	User user = new User();				//创建JavaBean对象
     	conn = DB.getCon();			//获取数据库连接
     	try {
     		String sql = "select * from users where ID = ? and Password = ?";	//定义查询预处理语句
     		PreparedStatement statement = conn.prepareStatement(sql);		//实例化PreparedStatement对象
     		statement.setString(1, userID);			//设置预处理语句参数
     		statement.setString(2, Password);
     		ResultSet rest = statement.executeQuery();	//执行预处理语句
     		while(rest.next()){
     			user.setID(rest.getString(1));				//应用查询结果设置对象属性   			
     			user.setPassword(rest.getString(2));
     			user.setSex(rest.getString(3));
     			user.setPhone(rest.getString(4));
     			user.setHome(rest.getString(5));
     			user.setEmail(rest.getString(6));
     			user.setHeader(rest.getString(7));
     		}
     	} catch (SQLException e) {			
     		e.printStackTrace();
     	}		
     	return user;						//返回查询结果
     }	
     //根据用户id返回用户对象
     public User getUser(String userid){
    	 User user = new User();				//创建JavaBean对象
      	 conn = DB.getCon();			//获取数据库连接
        try {
        	 String sql="select * from users where ID='"+userid+"'";
			  PreparedStatement pstm = conn.prepareStatement(sql);
			  ResultSet rest = pstm.executeQuery();	//执行预处理语句
	     		while(rest.next()){
	     			user.setID(rest.getString(1));				//应用查询结果设置对象属性   			
	     			user.setPassword(rest.getString(2));
	     			user.setSex(rest.getString(3));
	     			user.setPhone(rest.getString(4));
	     			user.setHome(rest.getString(5));
	     			user.setEmail(rest.getString(6));
	     			user.setHeader(rest.getString(7));
	     		}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
    	 return user;
     }
     public boolean isContainUser(String id){
    	
		try {
			 conn = DB.getCon();			//获取数据库连接
	    	 String sql="select * from users where ID=?";
	    	 PreparedStatement pstm;
			 pstm = conn.prepareStatement(sql);
			 pstm.setString(1, id);
			 ResultSet rs=pstm.executeQuery();
			 if(rs.next()){
				 return true;
			 }
			 
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 return false;   	 
     }
     
}

5.3连接数据库代码

package com.tools;
import java.sql.*;
public class DBConnection {	
private Connection con;			//定义数据库连接类对象
private PreparedStatement pstm;	
private String user="root";		//连接数据库用户名
private String password="123456";		//连接数据库密码
private String driverName="com.mysql.jdbc.Driver";	//数据库驱动
private String url="jdbc:mysql://localhost:3306/shoppingcart";		
//连接数据库的URL,后面的是为了防止插入数据 库出现乱码,?useUnicode=true&characterEncoding=UTF-8
//构造函数
public DBConnection(){
	
}
/**创建数据库连接*/
public Connection getCon(){
	try{
		Class.forName("com.mysql.jdbc.Driver");
	}catch(ClassNotFoundException e){
		System.out.println("加载数据库驱动失败!");
		e.printStackTrace();
	}
	try {
		con=DriverManager.getConnection(url,user,password);		//获取数据库连接
	} catch (SQLException e) {
		System.out.println("创建数据库连接失败!");
		con=null;
		e.printStackTrace();
	}
	return con;					//返回数据库连接对象
}	
/**
 *@功能:对数据库进行增、删、改、查操作
 *@参数:sql为SQL语句;params为Object数组,里面存储的是为sql表示的SQL语句中"?"占位符赋值的数据 
 */
	public void doPstm(String sql,Object[] params){
		if(sql!=null&&!sql.equals("")){
			if(params==null)
				params=new Object[0];			
			getCon();
			if(con!=null){
				try{		
					System.out.println(sql);
					pstm=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
					for(int i=0;i<params.length;i++){
						pstm.setObject(i+1,params[i]);
					}
					pstm.execute();
				}catch(SQLException e){
					System.out.println("doPstm()方法出错!");
					e.printStackTrace();
				}				
			}			
		}
	}	
	public ResultSet getRs() throws SQLException{
		return pstm.getResultSet();		
	}
	public int getCount() throws SQLException{
		return pstm.getUpdateCount();		
	}
	public void closed(){
		try{
			if(pstm!=null)
				pstm.close();			
		}catch(SQLException e){
			System.out.println("关闭pstm对象失败!");
			e.printStackTrace();
		}
		try{
			if(con!=null){
				con.close();
			}
		}catch(SQLException e){
			System.out.println("关闭con对象失败!");
			e.printStackTrace();
		}
	}
}