五,代码解析
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();
}
}
}