All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wowtools.dao.PcmDbProducer Maven / Gradle / Ivy

The newest version!
package org.wowtools.dao;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.wowtools.common.pcm.ltp.LtpProducer;

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

/**
 * 查询数据的生产者
 *
 * @author liuyu
 * @date 2017/3/21
 */
public abstract class PcmDbProducer implements LtpProducer {
    private final ResultSet rs;
    private boolean hasNext;
    private static final Logger log = LoggerFactory.getLogger(PcmDbProducer.class);
    /**
     * @param rs ResultSet
     */
    public PcmDbProducer(ResultSet rs) {
        this.rs = rs;
        try {
            hasNext = rs.next();
        } catch (SQLException e) {
            close();
            throw new RuntimeException(e);
        }
    }

    private void close(){
        try {
            rs.close();
        } catch (SQLException e) {
            log.warn("rs.close() error!!!!!!!!!!!!!!!11",e);
        }
    }


    /**
     * @param conn conn
     * @param sql  sql
     * @param args 绑定参数
     */
    public PcmDbProducer(Connection conn, String sql, Object... args) {
        this(SqlUtil.queryResultSet(conn, sql, args));
    }

    @Override
    public T produce() {
        if (hasNext) {
            try {
                T obj = rs2Obj(rs);
                hasNext = rs.next();
                return obj;
            } catch (Exception e) {
                close();
                throw new RuntimeException(e);
            }
        } else {
            return null;
        }

    }

    /**
     * 将ResultSet中的row取出并转为需要的对象
     *
     * @param rs
     * @return
     */
    protected abstract T rs2Obj(ResultSet rs) throws SQLException;

    @Override
    public boolean isFinish() {
        if (hasNext){
            return false;
        }else {
            close();
            return true;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy