/*******************************************************************************
* Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
******************************************************************************/
package se.unlogic.standardutils.dao.querys;
import se.unlogic.standardutils.db.DBUtils;
import javax.sql.DataSource;
import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.Ref;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
public abstract class PreparedStatementQuery {
protected Connection connection;
protected boolean closeConnectionOnExit;
protected PreparedStatement pstmt;
protected boolean closed;
public PreparedStatementQuery(Connection connection, boolean closeConnectionOnExit, String query) throws SQLException {
this.closeConnectionOnExit = closeConnectionOnExit;
this.connection = connection;
try {
this.pstmt = this.getPreparedStatement(query);
} catch (SQLException e) {
this.abort();
throw e;
}
}
protected PreparedStatement getPreparedStatement(String query) throws SQLException {
return connection.prepareStatement(query, PreparedStatement.RETURN_GENERATED_KEYS);
}
public PreparedStatementQuery(DataSource dataSource, boolean closeConnectionOnExit, String query) throws SQLException {
this(dataSource.getConnection(), closeConnectionOnExit, query);
}
public void setArray(int arg0, java.sql.Array arg1) throws SQLException {
try {
pstmt.setArray(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setAsciiStream(int arg0, InputStream arg1, int arg2) throws SQLException {
try {
pstmt.setAsciiStream(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setBigDecimal(int arg0, BigDecimal arg1) throws SQLException {
try {
pstmt.setBigDecimal(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setBinaryStream(int arg0, InputStream arg1, int arg2) throws SQLException {
try {
pstmt.setBinaryStream(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setBlob(int arg0, Blob arg1) throws SQLException {
try {
pstmt.setBlob(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setBoolean(int arg0, boolean arg1) throws SQLException {
try {
pstmt.setBoolean(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setByte(int arg0, byte arg1) throws SQLException {
try {
pstmt.setByte(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setBytes(int arg0, byte[] arg1) throws SQLException {
try {
pstmt.setBytes(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setCharacterStream(int arg0, Reader arg1, int arg2) throws SQLException {
try {
pstmt.setCharacterStream(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setClob(int arg0, Clob arg1) throws SQLException {
try {
pstmt.setClob(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setCursorName(String arg0) throws SQLException {
try {
pstmt.setCursorName(arg0);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setDate(int arg0, Date arg1, Calendar arg2) throws SQLException {
try {
pstmt.setDate(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setDate(int arg0, Date arg1) throws SQLException {
try {
pstmt.setDate(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setDouble(int arg0, double arg1) throws SQLException {
try {
pstmt.setDouble(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setEscapeProcessing(boolean arg0) throws SQLException {
try {
pstmt.setEscapeProcessing(arg0);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setFetchDirection(int arg0) throws SQLException {
try {
pstmt.setFetchDirection(arg0);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setFetchSize(int arg0) throws SQLException {
try {
pstmt.setFetchSize(arg0);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setFloat(int arg0, float arg1) throws SQLException {
try {
pstmt.setFloat(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setInt(int arg0, int arg1) throws SQLException {
try {
pstmt.setInt(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setLong(int arg0, long arg1) throws SQLException {
try {
pstmt.setLong(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setMaxFieldSize(int arg0) throws SQLException {
try {
pstmt.setMaxFieldSize(arg0);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setMaxRows(int arg0) throws SQLException {
try {
pstmt.setMaxRows(arg0);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setNull(int arg0, int arg1, String arg2) throws SQLException {
try {
pstmt.setNull(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setNull(int arg0, int arg1) throws SQLException {
try {
pstmt.setNull(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setObject(int arg0, Object arg1, int arg2, int arg3) throws SQLException {
try {
pstmt.setObject(arg0, arg1, arg2, arg3);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setObject(int arg0, Object arg1, int arg2) throws SQLException {
try {
pstmt.setObject(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setObject(int arg0, Object arg1) throws SQLException {
try {
pstmt.setObject(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setQueryTimeout(int arg0) throws SQLException {
try {
pstmt.setQueryTimeout(arg0);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setRef(int arg0, Ref arg1) throws SQLException {
try {
pstmt.setRef(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setShort(int arg0, short arg1) throws SQLException {
try {
pstmt.setShort(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setString(int arg0, String arg1) throws SQLException {
try {
pstmt.setString(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setTime(int arg0, Time arg1, Calendar arg2) throws SQLException {
try {
pstmt.setTime(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setTime(int arg0, Time arg1) throws SQLException {
try {
pstmt.setTime(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setTimestamp(int arg0, Timestamp arg1, Calendar arg2) throws SQLException {
try {
pstmt.setTimestamp(arg0, arg1, arg2);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setTimestamp(int arg0, Timestamp arg1) throws SQLException {
try {
pstmt.setTimestamp(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public void setURL(int arg0, URL arg1) throws SQLException {
try {
pstmt.setURL(arg0, arg1);
} catch (SQLException e) {
this.abort();
throw e;
}
}
public boolean isCloseConnectionOnExit() {
return closeConnectionOnExit;
}
public void abort() {
DBUtils.closePreparedStatement(pstmt);
if (this.closeConnectionOnExit) {
DBUtils.closeConnection(connection);
}
this.closed = true;
}
public static void autoCloseQuery(PreparedStatementQuery query){
if(query != null && !query.isClosed()){
query.abort();
}
}
public boolean isClosed() {
return closed;
}
}