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

com.jfirer.jsql.executor.FinalExecuteSqlExecutor Maven / Gradle / Ivy

package com.jfirer.jsql.executor;

import com.jfirer.jsql.dialect.Dialect;
import com.jfirer.jsql.exception.NotSingleResultException;
import com.jfirer.jsql.transfer.resultset.ResultSetTransfer;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

@SuppressWarnings("ALL")
public class FinalExecuteSqlExecutor implements SqlExecutor
{

    @Override
    public int update(String sql, List params, Connection connection, Dialect dialect, SqlInvoker next) throws SQLException
    {
        PreparedStatement prepareStatement = null;
        try
        {
            prepareStatement = connection.prepareStatement(sql);
            dialect.fillStatement(prepareStatement, params);
            int count = prepareStatement.executeUpdate();
            prepareStatement.close();
            return count;
        } finally
        {
            if ( prepareStatement != null )
            {
                prepareStatement.close();
            }
        }
    }

    @Override
    public String insertWithReturnKey(String sql, List params, Connection connection, Dialect dialect, SqlInvoker next) throws SQLException
    {
        PreparedStatement prepareStatement = null;
        ResultSet generatedKeys = null;
        try
        {
            prepareStatement = connection.prepareStatement(sql);
            dialect.fillStatement(prepareStatement, params);
            prepareStatement.executeUpdate();
            generatedKeys = prepareStatement.getGeneratedKeys();
            String pk = generatedKeys.next() ? generatedKeys.getString(1) : null;
            generatedKeys.close();
            prepareStatement.close();
            return pk;
        } finally
        {
            if ( generatedKeys != null )
            {
                generatedKeys.close();
            }
            if ( prepareStatement != null )
            {
                prepareStatement.close();
            }
        }
    }

    @Override
    public List queryList(String sql, List params, Connection connection, Dialect dialect, ResultSetTransfer resultSetTransfer, SqlInvoker next) throws SQLException
    {
        PreparedStatement prepareStatement = null;
        ResultSet resultSet = null;
        try
        {
            prepareStatement = connection.prepareStatement(sql);
            dialect.fillStatement(prepareStatement, params);
            resultSet = prepareStatement.executeQuery();
            List list = new LinkedList();
            while (resultSet.next())
            {
                list.add(resultSetTransfer.transfer(resultSet));
            }
            return list;
        } finally
        {
            if ( resultSet != null )
            {
                resultSet.close();
            }
            if ( prepareStatement != null )
            {
                prepareStatement.close();
            }
        }
    }

    @Override
    public Object queryOne(String sql, List params, Connection connection, Dialect dialect, ResultSetTransfer resultSetTransfer, SqlInvoker next) throws SQLException
    {
        PreparedStatement prepareStatement = null;
        ResultSet executeQuery = null;
        try
        {
            prepareStatement = connection.prepareStatement(sql);
            dialect.fillStatement(prepareStatement, params);
            executeQuery = prepareStatement.executeQuery();
            if ( executeQuery.next() == false )
            {
                return null;
            }
            Object result = resultSetTransfer.transfer(executeQuery);
            if ( executeQuery.next() == false )
            {
                return result;
            }
            else
            {
                throw new NotSingleResultException();
            }
        } finally
        {
            if ( executeQuery != null )
            {
                executeQuery.close();
            }
            if ( prepareStatement != null )
            {
                prepareStatement.close();
            }
        }

    }

    @Override
    public int order()
    {
        return Integer.MAX_VALUE;
    }

}