package dao;

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

import entity.Category;
import util.DBUtil;

/**
 * catebory表的ORM映射
 * 
 * @author 于修彦
 *
 */
public class CategoryDAO {

    public int getTotal() {
        int total = 0;
        try (Connection c = DBUtil.getConn(); Statement s = c.createStatement();) {

            String sql = "select count(*) from category";

            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                total = rs.getInt(1);
            }

        } catch (SQLException e) {

            e.printStackTrace();
        }
        return total;
    }

    public void add(Category category) {

        String sql = "insert into category(name) values(?)";
        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {

            ps.setString(1, category.getName());

            ps.execute();

            ResultSet rs = ps.getGeneratedKeys();
            if (rs.next()) {
                category.setId(rs.getInt(1));
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    public void update(Category category) {

        String sql = "update category set name= ? where id = ?";
        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {

            ps.setString(1, category.getName());
            ps.setInt(2, category.getId());

            ps.execute();

        } catch (SQLException e) {

            e.printStackTrace();
        }

    }

    public void delete(int id) {

        try (Connection c = DBUtil.getConn(); Statement s = c.createStatement();) {

            String sql = "delete from category where id = " + id;

            s.execute(sql);

        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    public Category get(int id) {
        Category category = null;

        try (Connection c = DBUtil.getConn(); Statement s = c.createStatement();) {

            String sql = "select * from category where id = " + id;

            ResultSet rs = s.executeQuery(sql);

            if (rs.next()) {
                category = new Category();
                String name = rs.getString(2);
                category.setName(name);
                category.setId(id);
            }

        } catch (SQLException e) {

            e.printStackTrace();
        }
        return category;
    }

    public List<Category> list() {
        return list(0, Short.MAX_VALUE);
    }

    public List<Category> list(int start, int count) {
        List<Category> categorys = new ArrayList<Category>();

        String sql = "select * from category order by id desc limit ?,? ";

        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {

            ps.setInt(1, start);
            ps.setInt(2, count);

            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                Category category = new Category();
                int id = rs.getInt(1);
                String name = rs.getString(2);
                category.setId(id);
                category.setName(name);
                categorys.add(category);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return categorys;
    }

}

dao1

package 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 entity.Config;
import util.DBUtil;

/**
 * 专门用于把Config实例与Config表进行ORM映射
 * 
 * @author 于修彦
 *
 */
public class ConfigDAO {
    /**
     * 获取总数
     * 
     * @return
     */
    public int getTotal() {
        int total = 0;
        String sql = "select count(*) from config";
        try (Connection conn = DBUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql);) {
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                total = rs.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return total;
    }

    /**
     * 添加配置
     * 
     * @param config
     *            配置信息
     * @return 成功返回true,失败返回false
     */
    public boolean add(Config config) {
        String sql = "insert into config(myKey,myValue) values(?,?)";
        boolean flag = false;
        try (Connection conn = DBUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql);) {
            ps.setString(1, config.getMyKey());
            ps.setString(2, config.getMyValue());
            flag = ps.execute();
            ResultSet rs = ps.getGeneratedKeys();
            if (rs.next()) {
                int id = rs.getInt(1);
                config.setId(id);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 删除配置信息
     * 
     * @param config
     *            配置
     * @return 成功返回true,失败返回false
     */
    public boolean delete(Config config) {
        String sql = "delete from config where id = ?";
        boolean flag = false;
        try (Connection conn = DBUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql);) {
            ps.setInt(1, config.getId());
            flag = ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 更新配置信息
     * 
     * @param config
     *            配置信息
     * @return 成功返回true,失败返回false
     */
    public boolean update(Config config) {
        boolean flag = false;
        String sql = "update config set myKey=?,myValue=? where id=?";
        Connection conn = DBUtil.getConn();
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, config.getMyKey());
            ps.setString(2, config.getMyValue());
            ps.setInt(3, config.getId());
            flag = ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 通过id获取config实例
     * 
     * @param id
     * @return config实例
     */
    public Config get(int id) {
        Config config = null;
        String sql = "select * from config where id=?";

        try (Connection conn = DBUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql);) {
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();

            if (rs.next()) {
                config = new Config();
                config.setId(id);
                config.setMyKey(rs.getString("myKey"));
                config.setMyValue(rs.getString("myValue"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return config;
    }

    /**
     * 用于分页查询
     * 
     * @param start
     *            开始id
     * @param count
     *            每页条数
     * @return config的列表
     */
    public List<Config> list(int start, int count) {
        List<Config> configs = new ArrayList<Config>();
        String sql = "select * from config order by id desc limit ?,?";

        try (Connection conn = DBUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql);) {

            ps.setInt(1, start);
            ps.setInt(2, count);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                Config config = new Config();
                config.setId(rs.getInt("id"));
                config.setMyKey(rs.getString("myKey"));
                config.setMyValue(rs.getString("myValue"));

                configs.add(config);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return configs;
    }

    /**
     * 获取
     * 
     * @return
     */
    public List<Config> list() {
        return list(0,Short.MAX_VALUE);
    }

    /**
     * 通过键获取Config实例,比如预算对应的Config实例,就会通过这种方式获取: new
     * ConfigDAO().getByKey("budget");
     * 
     * @param key
     * @return config实例
     */
    public Config getByKey(String key) {
        Config config = null;
        String sql = "select * from config where myKey=?";

        try (Connection conn = DBUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql);) {
            ps.setString(1, key);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                config = new Config();
                config.setId(rs.getInt("id"));
                config.setMyKey(key);
                config.setMyValue(rs.getString("myValue"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return config;
    }

}

dao2

package dao;

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

import entity.Record;
import util.DBUtil;
import util.DateUtil;

/**
 * record表的映射
 * 
 * @author 于修彦
 *
 */
public class RecordDAO {
    /**
     * 获取总数
     * 
     * @return 记录条数
     */
    public int getTotal() {
        int total = 0;
        try (Connection c = DBUtil.getConn(); Statement s = c.createStatement();) {

            String sql = "select count(*) from record";

            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                total = rs.getInt(1);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return total;
    }

    /**
     * 增加记录
     * 
     * @param record
     */
    public void add(Record record) {

        String sql = "insert into record values(null,?,?,?,?)";
        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {
            ps.setInt(1, record.getSpend());
            ps.setInt(2, record.getCid());
            ps.setString(3, record.getComment());
            ps.setDate(4, DateUtil.util2sql(record.getMyDate()));

            ps.execute();

            ResultSet rs = ps.getGeneratedKeys();
            if (rs.next()) {
                int id = rs.getInt(1);
                record.setId(id);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    /**
     * 更新记录
     * 
     * @param record
     */
    public void update(Record record) {

        String sql = "update record set spend= ?, cid= ?, comment =?, myDate = ? where id = ?";
        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {

            ps.setInt(1, record.getSpend());
            ps.setInt(2, record.getCid());
            ps.setString(3, record.getComment());
            ps.setDate(4, DateUtil.util2sql(record.getMyDate()));
            ps.setInt(5, record.getId());

            ps.execute();

        } catch (SQLException e) {

            e.printStackTrace();
        }

    }

    /**
     * 删除记录
     * 
     * @param id
     */
    public void delete(int id) {

        try (Connection c = DBUtil.getConn(); Statement s = c.createStatement();) {

            String sql = "delete from record where id = " + id;

            s.execute(sql);

        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    /**
     * 根据id获取记录
     * 
     * @param id
     * @return record实例
     */
    public Record get(int id) {
        Record record = null;

        try (Connection c = DBUtil.getConn(); Statement s = c.createStatement();) {

            String sql = "select * from record where id = " + id;

            ResultSet rs = s.executeQuery(sql);

            if (rs.next()) {
                record = new Record();
                int spend = rs.getInt("spend");
                int cid = rs.getInt("cid");
                String comment = rs.getString("comment");
                Date date = rs.getDate("myDate");

                record.setSpend(spend);
                record.setCid(cid);
                record.setComment(comment);
                record.setMyDate(date);
                record.setId(id);
            }

        } catch (SQLException e) {

            e.printStackTrace();
        }
        return record;
    }

    /**
     * 获取所有记录
     * 
     * @return
     */
    public List<Record> list() {
        return list(0, Short.MAX_VALUE);
    }

    /**
     * 用于分页查询
     * 
     * @param start
     * @param count
     * @return
     */
    public List<Record> list(int start, int count) {
        List<Record> records = new ArrayList<Record>();

        String sql = "select * from record order by id desc limit ?,? ";

        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {

            ps.setInt(1, start);
            ps.setInt(2, count);

            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                Record record = new Record();
                int id = rs.getInt("id");
                int spend = rs.getInt("spend");
                int cid = rs.getInt("cid");

                String comment = rs.getString("comment");
                Date date = rs.getDate("myDate");

                record.setSpend(spend);
                record.setCid(cid);
                record.setComment(comment);
                record.setMyDate(date);
                record.setId(id);
                records.add(record);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return records;
    }

    /**
     * 获取某一项分类的记录列表
     * 
     * @param cid
     * @return
     */
    public List<Record> list(int cid) {
        List<Record> records = new ArrayList<Record>();

        String sql = "select * from record where cid = ?";

        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {

            ps.setInt(1, cid);

            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                Record record = new Record();
                int id = rs.getInt("id");
                int spend = rs.getInt("spend");

                String comment = rs.getString("comment");
                Date date = rs.getDate("myDate");

                record.setSpend(spend);
                record.setCid(cid);
                record.setComment(comment);
                record.setMyDate(date);
                record.setId(id);
                records.add(record);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return records;
    }

    /**
     * 获取今天的消费记录列表
     * 
     * @return
     */
    public List<Record> listToday() {
        return list(DateUtil.getToday());
    }

    /**
     * 根据日期获取某一天的消费记录列表
     * 
     * @param day
     * @return
     */
    public List<Record> list(Date day) {
        List<Record> records = new ArrayList<Record>();
        String sql = "select * from record where myDate =?";
        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {
            ps.setDate(1, DateUtil.util2sql(day));

            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Record record = new Record();
                int id = rs.getInt("id");
                int cid = rs.getInt("cid");
                int spend = rs.getInt("spend");

                String comment = rs.getString("comment");
                Date date = rs.getDate("myDate");

                record.setSpend(spend);
                record.setCid(cid);
                record.setComment(comment);
                record.setMyDate(date);
                record.setId(id);
                records.add(record);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return records;
    }

    /**
     * 获取本月份消费记录
     * 
     * @return
     */
    public List<Record> listThisMonth() {
        return list(DateUtil.getMonthBegin(), DateUtil.getMonthEnd());
    }

    /**
     * 获取从开始日期到结束日期的消费记录
     * 
     * @param start
     * @param end
     * @return
     */
    public List<Record> list(Date start, Date end) {
        List<Record> records = new ArrayList<Record>();
        String sql = "select * from record where myDate >=? and myDate <= ?";
        try (Connection c = DBUtil.getConn(); PreparedStatement ps = c.prepareStatement(sql);) {
            ps.setDate(1, DateUtil.util2sql(start));
            ps.setDate(2, DateUtil.util2sql(end));
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Record record = new Record();
                int id = rs.getInt("id");
                int cid = rs.getInt("cid");
                int spend = rs.getInt("spend");

                String comment = rs.getString("comment");
                Date date = rs.getDate("myDate");

                record.setSpend(spend);
                record.setCid(cid);
                record.setComment(comment);
                record.setMyDate(date);
                record.setId(id);
                records.add(record);
            }
        } catch (SQLException e) {

            e.printStackTrace();
        }
        return records;
    }

}

dao3