package jef.database.jdbc; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import jef.database.routing.jdbc.UpdateReturn; public abstract class GenerateKeyReturnOper { public abstract PreparedStatement prepareStatement(JDBCTarget target, String sql) throws SQLException; public abstract void getGeneratedKey(UpdateReturn result, Statement st) throws SQLException; public final static GenerateKeyReturnOper NONE = new GenerateKeyReturnOper() { @Override public PreparedStatement prepareStatement(JDBCTarget target, String sql) throws SQLException { return target.prepareStatement(sql); } @Override public void getGeneratedKey(UpdateReturn result, Statement st) { } }; public final static GenerateKeyReturnOper RETURN_KEY = new GenerateKeyReturnOper() { @Override public PreparedStatement prepareStatement(JDBCTarget target, String sql) throws SQLException { return target.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); } @Override public void getGeneratedKey(UpdateReturn result, Statement st) throws SQLException { result.cacheGeneratedKeys(st.getGeneratedKeys()); } }; public static final class ReturnByColumnNames extends GenerateKeyReturnOper { private String[] columnNames; public ReturnByColumnNames(String[] columnNames) { this.columnNames = columnNames; } @Override public PreparedStatement prepareStatement(JDBCTarget target, String sql) throws SQLException { return target.prepareStatement(sql, columnNames); } @Override public void getGeneratedKey(UpdateReturn result, Statement st) throws SQLException { result.cacheGeneratedKeys(st.getGeneratedKeys()); } } public static final class ReturnByColumnIndex extends GenerateKeyReturnOper { private int[] columnIndexs; public ReturnByColumnIndex(int[] indexes) { this.columnIndexs = indexes; } @Override public PreparedStatement prepareStatement(JDBCTarget target, String sql) throws SQLException { return target.prepareStatement(sql, columnIndexs); } @Override public void getGeneratedKey(UpdateReturn result, Statement st) throws SQLException { result.cacheGeneratedKeys(st.getGeneratedKeys()); } } }