javaweb版本的答答租车系统(源代码二)

上接javaweb版本的答答租车系统(源代码一)
这是商品数据库操作类CommodityDao

package com.david.dao;

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

import com.david.Commodity;
/**
 * 商品数据库操作类
 * @author David
 */
public class CommodityDao {
    /**
     * 新增商品
     * @param Commodity 商品
     * @author David
     */
    public void savecommodity(Commodity commodity){
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入新增商品的sql语句
        String sql = "insert into car_commodity(name,rent,manned,cargo,owner) value (?,?,?,?,?)";
        try {
            //获取preparedStatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql语句的占位符参数进行动态赋值
            ps.setString(1, commodity.getName());
            ps.setInt(2, commodity.getRent());
            ps.setInt(3, commodity.getManned());
            ps.setInt(4, commodity.getCargo());
            ps.setString(5, commodity.getOwner());
            //执行更新操作
            ps.executeUpdate();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
    }
    /**
     * 判断车辆在数据库中是否重复
     * @param name 车名
     * @author David
     * @return 判断结果
     */
    public boolean commodityExist(String name){
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //根据指定车名查询车辆信息
        String sql = "select * from car_commodity where name=?";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql语句占位符参数进行动态赋值
            ps.setString(1, name);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //判断此结果集是否有效
            if(!rs.next()){
                //如果无效则证明此车辆没有重复
                return true;
            }
            // 释放此 ResultSet 对象的数据库和 JDBC 资源
            rs.close();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库
            ConnectSJK.closeConnection(conn);
        }
        return false;
    }

    /**
     * 查询商品
     * @author David
     * @return 查询到的商品集合
     */
    public List<Commodity> commodity(){
        //定义集合保存查询到的商品
        List<Commodity> commoditylist = new ArrayList<Commodity>();
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //查询所有已上架商品
        String sql = "select * from car_commodity";
        try {
            //获取preparedStatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //循环判断结果集是否有效
            while(rs.next()){
                //实例化一个用户对象
                Commodity commodity = new Commodity();
                //对用户对象进行赋值
                commodity.setId(rs.getInt("id"));
                commodity.setName(rs.getString("name"));
                commodity.setRent(rs.getInt("rent"));
                commodity.setManned(rs.getInt("manned"));
                commodity.setCargo(rs.getInt("cargo"));
                commodity.setOwner(rs.getString("owner"));
                //将结果添加到集合中
                commoditylist.add(commodity);
            }
            // 释放此 ResultSet 对象的数据库和 JDBC 资源
            rs.close();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
        return commoditylist;
    }
    /**
     * 根据id查商品属性生成账单
     * @param id 商品编号
     * @author David
     * @return 商品对象
     */
    public Commodity commodityBill(Integer id){
        //实例化一个商品对象
        Commodity commodity = new Commodity();
        //获取Connection对象
        Connection conn = ConnectSJK.getConnection();
        //根据id查商品属性
        String sql = "select * from car_commodity where id = ?";
        try {
            //获取preparedStatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql语句占位符参数进行动态赋值
            ps.setInt(1, id);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //判断结果集是否有效
            if(rs.next()){
                //对用户对象进行赋值
                commodity.setId(rs.getInt("id"));
                commodity.setName(rs.getString("name"));
                commodity.setRent(rs.getInt("rent"));
                commodity.setManned(rs.getInt("manned"));
                commodity.setCargo(rs.getInt("cargo"));
                commodity.setOwner(rs.getString("owner"));
            }
            // 释放此 ResultSet 对象的数据库和 JDBC 资源
            rs.close();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
        return commodity;
    }
}

这是账单数据库操作类BillDao

package com.david.dao;

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

import com.david.Bill;
/**
 * 账单数据库操作类
 * @author David
 */
public class BillDao {
    /**
     * 新增账单
     * @param bill 账单对象
     * @author David
     */
    public void saveBill(Bill bill){
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入生成账单的SQL语句
        String sql = "insert into car_bill(userid,carid,quantity,totalrent,carstatus,ordernumber,cartime) value (?,?,?,?,?,?,?)";
        try {
            //获取preparedStatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql语句的占位符参数进行动态赋值 
            ps.setInt(1, bill.getUserid());
            ps.setInt(2, bill.getCarid());
            ps.setInt(3, bill.getQuantity());
            ps.setDouble(4, bill.getTotalrent());
            ps.setString(5, bill.getCarstatus());
            ps.setString(7, bill.getOrdernumber());
            ps.setString(6, bill.getCartime());
            //执行更新操作
            ps.executeUpdate();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
    }
    /**
     * 查询账单
     * @author David
     * @return 查询到的账单集合
     */
    public List<Bill> bill(){
        //定义集合保存查询到的商品
        List<Bill> billlist = new ArrayList<Bill>();
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //查询所有账单信息
        String sql = "select * from car_bill";
        try {
            //获取preparedStatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //循环判断结果集是否有效
            while(rs.next()){
                //实例化一个账单对象
                Bill bill = new Bill();
                //对账单对象进行赋值
                bill.setCarid(rs.getInt("carid"));
                bill.setQuantity(rs.getInt("quantity"));
                bill.setTotalrent(rs.getDouble("totalrent"));
                bill.setCarstatus(rs.getString("carstatus"));
                bill.setOrdernumber(rs.getString("ordernumber"));
                bill.setCartime(rs.getString("cartime"));
                //将结果添加到集合中
                billlist.add(bill);
            }
            // 释放此 ResultSet 对象的数据库和 JDBC 资源
            rs.close();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
        return billlist;
    }
    /**
     * 结账
     * @param bill 账单对象
     * @param ordernumber 账单编号
     * @author David
     * @return 查询到的租金集合
     */
    public List<Bill> billplease(int userid, String carstatus){
        //定义集合保存查询到的结账信息
        List<Bill> billlist = new ArrayList<Bill>();
        //连接数据库获取Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入查询需要结账的账单信息的SQL语句
        String sql = "select totalrent from car_bill where userid=? and carstatus=?";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql语句的占位符参数进行动态赋值 
            ps.setInt(1, userid);
            ps.setString(2, carstatus);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //循环判断结果集是否有效
            while(rs.next()){
                //实例化一个账单对象
                Bill bill = new Bill();
                //对账单对象进行赋值
                bill.setTotalrent(rs.getDouble("totalrent"));
                //将结果添加到集合中
                billlist.add(bill);
            }
            // 释放此 ResultSet 对象的数据库和 JDBC 资源
            rs.close();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
        return billlist;
    }

    /**
     * 根据编号查账单
     * @param ordernumber 账单编号
     * @author David
     * @return 账单对象
     */
    public Bill idBill(String ordernumber){
        //实例化一个用户对象
        Bill bill = new Bill();
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入查询用户的sql语句
        String sql = "select * from tb_user where ordernumber=?";
        try {
            //获取preparedStatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            // 对SQL语句的占位符参数进行动态赋 值
            ps.setString(1, ordernumber);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //判断结果集是否有效
            if(rs.next()){
                //对用户对象进行赋值
                bill.setCarid(rs.getInt("carid"));
                bill.setQuantity(rs.getInt("quantity"));
                bill.setTotalrent(rs.getDouble("totalrent"));
                bill.setCarstatus(rs.getString("carstatus"));
                bill.setCartime(rs.getString("cartime"));
            }
            // 释放此 ResultSet 对象的数据库和 JDBC 资源
            rs.close();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            // 关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
        return bill;
    }
    /**
     * 根据用户ID查个人账单
     */
    public List<Bill> personalbill(Integer userid){
        //实例化一个账单id
        List<Bill> billlist = new ArrayList<Bill>();
        //获取Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入查询账单的sql语句
        String sql = "select * from car_bill where userid=?";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对SQL占位符参数进行动态赋值
            ps.setInt(1, userid);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //判断结果集是否有效
            while(rs.next()){
                Bill bill = new Bill();
                //对用户对象进行赋值
                bill.setCarid(rs.getInt("carid"));
                bill.setQuantity(rs.getInt("quantity"));
                bill.setTotalrent(rs.getDouble("totalrent"));
                bill.setCarstatus(rs.getString("carstatus"));
                bill.setOrdernumber(rs.getString("ordernumber"));
                bill.setCartime(rs.getString("cartime"));
                //将查询到的结果添加到集合中
                billlist.add(bill);
            }
            // 释放此 ResultSet 对象的数据库和 JDBC 资源
            rs.close();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
        return billlist;
    }

    /**
     * 退租
     * @param bill 账单对象
     * @param ordernumber 账单编号
     * @author David
     */
    public void surrender(Bill bill,String ordernumber){
        //获取数据库连接Connection对象 
        Connection conn = ConnectSJK.getConnection();
        //插入修改租车状态的SQL语句
        String sql = "update car_bill set carstatus=? where ordernumber=?";
        try {
            //获取preparedStatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对账单对象进行赋值
            ps.setString(1, bill.getCarstatus());
            ps.setString(2, ordernumber);
            // 执行更新操作
            ps.executeUpdate();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
    }
}

这是账户数据库操作类AccountDao

package com.david.dao;

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

import com.david.Account;
import com.david.User;
/**
 * 账户数据库操作类
 * @author David
 */
public class AccountDao {
    /**
     * 新增账户
     * @param account 账户
     * @author David
     */
    public void saveAccount(Account account){
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入新增账户的sql语句
        String sql = "insert into car_account(username,money,let_frequency,out_frequency) value(?,?,?,?)";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql占位符参数进行动态赋值
            ps.setInt(1, account.getUserid());
            ps.setDouble(4, account.getMoney());
            ps.setInt(2, account.getLet_frequency());
            ps.setInt(3, account.getOut_frequency());
            //执行更新操作
            ps.executeUpdate();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
    }
    /**
     * 更新账户余额
     * @param user 用户
     * @author David
     */
    public void updatemoney(User user,Account account){
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入修改数据的sql语句
        String sql = "update car_account set money=? where userid=?";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql占位符参数进行动态赋值
            ps.setDouble(1, account.getMoney());
            ps.setInt(2, user.getId());
            //执行更新操作
            ps.executeUpdate();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }

    }

    /**
     * 更新租车次数
     * @param user 用户
     * @author David
     */
    public void updatelet_frequency(User user , Account account){
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入修改数据的sql语句
        String sql = "update car_account set let_frequency=? where userid=?";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql占位符参数进行动态赋值
            ps.setInt(1, account.getLet_frequency());
            ps.setInt(2, user.getId());
            //执行更新操作
            ps.executeUpdate();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
    }

    /**
     * 更新出租次数
     * @param user 用户
     * @author David
     */
    public void updateout_frequency(User user,Account account){
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //插入修改数据的sql语句
        String sql = "update car_account set out_frequency=? where userid=?";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对sql占位符参数进行动态赋值
            ps.setInt(1, account.getOut_frequency());
            ps.setInt(2, user.getId());
            //执行更新操作
            ps.executeUpdate();
            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库连接
            ConnectSJK.closeConnection(conn);
        }
    }

    /**
     * 查询账户
     * @author David
     * @return 账户集合
     */
    public List<Account> checkaccount(){
        //定义集合保存查询到的账户信息
        List<Account> accountlist = new ArrayList<Account>();
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //查询账户列表
        String sql = "select * from car_account";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //循环判断结果集是否有效
            while(rs.next()){
                //实例化一个账户对象
                Account account = new Account();
                //对账户对象进行赋值
                account.setId(rs.getInt("id"));
                account.setUserid(rs.getInt("userid"));
                account.setMoney(rs.getDouble("money"));
                account.setLet_frequency(rs.getInt("let_frequency"));
                account.setOut_frequency(rs.getInt("out_frequency"));
                //将结果添加到集合中
                accountlist.add(account);
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库
            ConnectSJK.closeConnection(conn);
        }
        return accountlist;
    }

    /**
     * 根据用户id查账户信息
     */
    public Account useridaccount(Integer userid){
        //实例化一个账户对象
        Account account = new Account();
        //获取数据库连接Connection对象
        Connection conn = ConnectSJK.getConnection();
        //根据用户id查询账户
        String sql = "select * from car_account where userid=?";
        try {
            //获取preparedstatement对象
            PreparedStatement ps = conn.prepareStatement(sql);
            //对slq语句占位符参数进行动态赋值
            ps.setInt(1, userid);
            //执行查询获取结果集
            ResultSet rs = ps.executeQuery();
            //判断结果集是否有效
            if(rs.next()){
                //对账户对象进行赋值
                account.setId(rs.getInt("id"));
                account.setUserid(rs.getInt("userid"));
                account.setMoney(rs.getDouble("money"));
                account.setLet_frequency(rs.getInt("let_frequency"));
                account.setOut_frequency(rs.getInt("out_frequency"));
            }
            //释放此ResultSet对象的数据库和JDBC资源
            rs.close();
            //释放此preparedStatement对象的数据库和JDBC资源
            ps.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally{
            //关闭数据库
            ConnectSJK.closeConnection(conn);
        }
        return account;
    }
}

这是字符编码过滤器

package com.david.code;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 字符编码过滤器CharacterEncodingFilter 
 * @author
 */
public class CharacterEncodingFilter implements Filter{
    protected String encoding = null;
    protected FilterConfig filterConfig = null;

    public void init(FilterConfig filterConfig) throws ServletException{
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
    }

    public void destroy(){
        this.encoding = null;
        this.filterConfig = null;
    }

    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{
        if(encoding != null){
            request.setCharacterEncoding(encoding);
            response.setContentType("text/html;charset="+encoding);
        }
        chain.doFilter(request, response);
    }
}

这是数据库连接ConnectSJK

package com.david.dao;

import java.sql.Connection;
import java.sql.DriverManager;
/**
 * 连接数据库
 */
public class ConnectSJK {
    public static Connection getConnection(){
        Connection conn = null;
        try {
            //加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //数据库连接URL
            String url = "jdbc:mysql://localhost:3306/test?user=root&password=123456&useUnicode=true&characterEncoding=UTF8";
            //获取数据库连接
            conn = DriverManager.getConnection(url);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return conn;
    }

    //关闭数据库连接
    public static void closeConnection(Connection conn){
        //判断conn是否为空 
        if(conn != null){
            try {
                conn.close();           //关闭数据库连接
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }

    }
}
点赞