package in.partake.model.dao.postgres9;
import in.partake.model.dao.DAOException;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Base class of Postgres9Dao.
* @author shinyak
*
*/
public abstract class Postgres9Dao {
static protected Charset UTF8 = Charset.forName("utf-8");
protected String escapeForLike(String str) {
if (str == null)
return null;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < str.length(); ++i) {
char c = str.charAt(i);
switch (c) {
case '%':
builder.append("\\%");
break;
case '_':
builder.append("\\_");
break;
case '\\':
builder.append("\\\\");
break;
default:
builder.append(c);
}
}
return builder.toString();
}
protected void removeAll(Postgres9Connection pcon, String tableName) throws DAOException {
Connection con = pcon.getConnection();
PreparedStatement ps = null;
try {
ps = con.prepareStatement("DELETE FROM " + tableName);
ps.execute();
} catch (SQLException e) {
throw new DAOException(e);
} finally {
close(ps);
}
}
/** Checks the existence of table.
* @return true if the specified table exists.
*/
protected boolean existsTable(Postgres9Connection pcon, String tableName) throws DAOException {
try {
return existsTable(pcon.getConnection(), tableName);
} catch (SQLException e) {
throw new DAOException(e);
}
}
/**
* Drop the table.
*/
protected void dropTable(Postgres9Connection pcon, String tableName) throws DAOException {
try {
dropTable(pcon.getConnection(), tableName);
} catch (SQLException e) {
throw new DAOException(e);
}
}
/**
* Executes SQL.
*/
protected void executeSQL(Postgres9Connection pcon, String sql) throws DAOException {
try {
executeSQL(pcon.getConnection(), sql);
} catch (SQLException e) {
throw new DAOException(e);
}
}
/** Closes PreparedStatement silently. */
protected void close(PreparedStatement ps) {
if (ps == null)
return;
try {
ps.close();
} catch (SQLException e) {
// squash!
}
}
/** Closes Statement silently. */
protected void close(Statement st) {
if (st == null)
return;
try {
st.close();
} catch (SQLException e) {
// squash!
}
}
/** Closes ResultSet silently. */
protected void close(ResultSet rs) {
if (rs == null)
return;
try {
rs.close();
} catch (SQLException e) {
// squash!
}
}
// ----------------------------------------------------------------------
private void executeSQL(Connection pcon, String sql) throws SQLException {
PreparedStatement ps = null;
try {
ps = pcon.prepareStatement(sql);
ps.execute();
} finally {
close(ps);
}
}
private boolean existsTable(Connection con, String tableName) throws SQLException {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = con.prepareStatement("SELECT table_name FROM information_schema.tables " +
"WHERE table_schema = 'public' " +
"AND lower(table_name) = lower(?)");
ps.setString(1, tableName);
rs = ps.executeQuery();
return rs.next();
} finally {
close(rs);
close(ps);
}
}
private void dropTable(Connection con, String tableName) throws SQLException {
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = con.prepareStatement("DROP TABLE " + tableName);
ps.execute();
} finally {
close(rs);
close(ps);
}
}
}