用于jdbc 連接sqlite數據庫的dao層

cyjjkz1 8年前發布 | 2K 次閱讀 Java JDBC

c3p0部分配置    

package com.jht.navigate;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
    private static ComboPooledDataSource ds = new ComboPooledDataSource();

    static {
        try {
            Class.forName("org.sqlite.JDBC");
            String path = C3P0Utils.class.getResource("/").getPath();
            ds.setJdbcUrl("jdbc:sqlite:" + path + "test.db");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 打開數據庫連接
     */
    public static Connection openConnection() {
        Connection conn = null;
        try {
            conn = ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * 關閉數據庫
     */
    public static void closeAll(Connection con, Statement stmt, ResultSet rs) {
        try {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

dao接口    

package com.jht.navigate;

import java.util.List;

/**
 * @author chmin<br>
 * @time 2016年1月23日 上午9:35:51<br>
 */
public interface IBaseDao<T> {

    // 保存實體
    boolean add(T t);

    // 刪除實體
    boolean remove(T t);

    // 根據id刪除
    boolean remove(int id);

    // 更新實體數據
    boolean update(T t);

    // 添加或更新,有則更新,無則添加
    boolean addOrUpdate(T t);

    // 用id獲取一個實體
    T getObjectById(int id);

    // 用khdm獲取一個實體
    T getObjectByName(String khdm);

    // 自定義獲取一個實體
    T getObject(String sql, Object[] parameters);

    // 自定義獲取一個集合
    List<T> getObjects(String sql, Object[] parameters);

    // 根據khdm返回集合
    List<T> getObjectsByName(String khdm);

    // 獲取所有實體
    List<T> getObjects();
}

[代碼]dao輔助(需要jdk7)    

package com.jht.navigate;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author chmin<br>
 * @time 2016年1月23日 上午9:41:43<br>
 */
public class DaoHandle {

    /**
     * 更新和刪除
     * @param sql
     * @param parameters
     * @return
     */
    public static int executeUpdate(String sql, Object[] parameters) {
        return execute(sql, parameters, 0);
    }

    /**
     * 添加
     * @param sql
     * @param parameters
     * @return
     */
    public static int insert(String sql, Object[] parameters) {
        return execute(sql, parameters, 1);
    }

    /**
     * 執行增刪改
     * @param sql
     * @param parameters
     * @param type 0為刪改,1為增加
     * @return
     */
    private static int execute(String sql, Object[] parameters, int type){
        Connection con = C3P0Utils.openConnection();
        int count = 0;
        if (con != null) {
            try (PreparedStatement ps = con.prepareStatement(sql);) {
                for (int i = type + 1; i <= parameters.length + type; i++) {
                    ps.setObject(i, parameters[i - (1 + type)]);
                }
                count = ps.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                C3P0Utils.closeAll(con, null, null);
            }
        }
        return count;
    }

    /**
     * 執行查詢,并將值反射到bean
     * @param sql
     * @param parameters
     * @param clazz
     * @return
     */
    public static <T> List<T> select(String sql, Object[] parameters, Class<T> clazz) {
        List<T> list = new ArrayList<T>();
        Connection conn = C3P0Utils.openConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            if(parameters != null){
                for (int i = 1; i <= parameters.length; i++) {
                    ps.setObject(i, parameters[i - 1]);
                }
            }
            // 執行查詢方法
            rs = ps.executeQuery();
            ResultSetMetaData rsmd = rs.getMetaData();
            List<String> columnList = new ArrayList<String>();
            for (int i = 0; i < rsmd.getColumnCount(); i++) {
                columnList.add(rsmd.getColumnName(i + 1));
            }
            // 循環遍歷記錄
            while (rs.next()) {
                // 創建封裝記錄的對象
                T obj = clazz.newInstance();
                // 遍歷一個記錄中的所有列
                for (int i = 0; i < columnList.size(); i++) {
                    // 獲取列名
                    String column = columnList.get(i);
                    // 根據列名創建set方法
                    String setMethd = "set" + column.substring(0, 1).toUpperCase() + column.substring(1);
                    // 獲取clazz中所有方法對應的Method對象
                    Method[] ms = clazz.getMethods();
                    // 循環遍歷ms
                    for (int j = 0; j < ms.length; j++) {
                        // 獲取每一個method對象
                        Method m = ms[j];
                        // 判斷m中對應的方法名和數據庫中列名創建的set方法名是否形同
                        if (m.getName().equals(setMethd)) {
                            // 反調set方法封裝數據
                            m.invoke(obj, rs.getObject(column));// 獲取rs中對應的值,封裝到obj中
                            break; // 提高效率
                        }
                    }
                }
                list.add(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            C3P0Utils.closeAll(conn, ps, rs);
        }
        return list;
    }
}

[代碼]dao impl層    

package com.jht.navigate;

import java.util.List;

/**
 * @author chmin<br>
 * @time 2016年1月23日 上午9:39:49<br>
 */
public class ClientInfoDao implements IBaseDao<Clientinfo> {
    /**
     * 方便使用dao
     */
    public static ClientInfoDao dao = new ClientInfoDao();

    /**
     * 保存實體
     */
    @Override
    public boolean add(Clientinfo t) {
        String sql = "insert into tb_clientinfo values (?,?,?,?,?)";
        Object[] parameters = new Object[]{t.getKhdm(), t.getCmpyname(), t.getPhone(), t.getAddr()};
        return DaoHandle.insert(sql, parameters) == 1 ? true : false;
    }

    /**
     * 刪除實體
     */
    @Override
    public boolean remove(Clientinfo t) {
        return remove(t.getId());
    }

    /**
     * 刪除實體
     */
    @Override
    public boolean remove(int id) {
        String sql = "delete from tb_wxnavinfo where khdm = (select khdm from tb_clientinfo where id = ?)";
        Object[] parameters = new Object[]{id};
        DaoHandle.executeUpdate(sql, parameters);
        sql = "delete from tb_clientinfo where id = ?";
        return DaoHandle.executeUpdate(sql, parameters) == 1 ? true : false;
    }

    /**
     * 更新
     */
    @Override
    public boolean update(Clientinfo t) {
        String sql = "update tb_clientinfo khdm = ?, cmpyname = ?, phone = ?, addr = ? where id = ?";
        Object[] parameters = new Object[]{t.getKhdm(), t.getCmpyname(), t.getPhone(), t.getAddr(), t.getId()};
        return DaoHandle.executeUpdate(sql, parameters) == 1 ? true : false;
    }

    @Override
    public boolean addOrUpdate(Clientinfo t) {
        if (getObjectByName(t.getKhdm()) == null) {
            return add(t);
        } else {
            return update(t);
        }
    }

    @Override
    public Clientinfo getObjectById(int id) {
        String sql = "select * from tb_clientinfo where id = ?";
        Object[] parameters = new Object[]{id};
        return getObject(sql, parameters);
    }

    @Override
    public Clientinfo getObject(String sql, Object[] parameters) {
        List<Clientinfo> list = DaoHandle.select(sql, parameters, Clientinfo.class);
        return list == null ? null : list.get(0);
    }

    @Override
    public Clientinfo getObjectByName(String khdm) {
        String sql = "select * from tb_clientinfo where khdm = ?";
        Object[] parameters = new Object[]{khdm};
        return getObject(sql, parameters);
    }

    @Override
    public List<Clientinfo> getObjectsByName(String khdm) {
        String sql = "select * from tb_clientinfo where khdm = ?";
        Object[] parameters = new Object[]{khdm};
        return getObjects(sql, parameters);
    }

    @Override
    public List<Clientinfo> getObjects() {
        String sql = "select * from tb_clientinfo order by id desc";
        Object[] parameters = new Object[]{};
        return getObjects(sql, parameters);
    }

    @Override
    public List<Clientinfo> getObjects(String sql, Object[] parameters) {
        return DaoHandle.select(sql, parameters, Clientinfo.class);
    }
}
 本文由用戶 cyjjkz1 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!