Skip to content

Instantly share code, notes, and snippets.

Created December 14, 2013 02:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/7955143 to your computer and use it in GitHub Desktop.
Save anonymous/7955143 to your computer and use it in GitHub Desktop.
動的SQLでPreparedStatement+プレースホルダを使用する
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SQLBuilder {
private StringBuilder sql = new StringBuilder();
private List<BindParameter> params = new ArrayList<>();
public SQLBuilder() {
}
public SQLBuilder(String sql) {
this.sql.append(sql);
}
public SQLBuilder(String sql, BindParameter... params) {
this.sql.append(sql);
this.params.addAll(Arrays.asList(params));
}
public SQLBuilder append(String sql) {
this.sql.append("\n");
this.sql.append(sql);
return this;
}
public SQLBuilder append(BindParameter... params) {
this.params.addAll(Arrays.asList(params));
return this;
}
public SQLBuilder append(String sql, BindParameter... params) {
this.sql.append("\n");
this.sql.append(sql);
this.params.addAll(Arrays.asList(params));
return this;
}
public PreparedStatement prepare(Connection conn) throws SQLException {
return conn.prepareStatement(sql.toString());
}
public PreparedStatement prepareAndSetParameters(Connection conn) throws SQLException {
PreparedStatement pstmt = prepare(conn);
int i = 1;
for (BindParameter param : params) {
pstmt.setObject(i++, param.bindObject, param.sqlType);
}
return pstmt;
}
public static BindParameter param(Object bindObject, int sqlType) {
return new BindParameter(bindObject, sqlType);
}
public static class BindParameter {
private int sqlType;
private Object bindObject;
public BindParameter(Object bindObject, int sqlType) {
this.sqlType = sqlType;
this.bindObject = bindObject;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment