30 Eylül 2022 Cuma

SpringData Jdbc JdbcTemplate.execute metodu

Giriş
execute metodu parametresiz şekilde veya callback şeklinde parametreler alacak şekilde kullanılabilir

execute metodu
İmzası şöyle
public void execute(final String sql) throws DataAccessException
Örnek
Şöyle yaparız
jdbc.execute("create table if not exist
Player(id int primary key, name varchar(30), team int)"
);
execute metodu - ConnectionCallback
Şöyle yaparız. JDBC Connection nesnesi verir.
jdbcTemplate.execute(new ConnectionCallback<String>() {
  public String doInConnection(Connection con) throws SQLException {
    ...
  }     
}
execute metodu - CallableStatementCreator
Stored Procedure çağırmak için kullanılır. Şöyle yaparız.
jdbcTemplate.execute(
  new CallableStatementCreator() {
    public CallableStatement createCallableStatement(Connection con) throws SQLException{
      CallableStatement cs = con.prepareCall("{call sys.dbms_stats.gather_table_stats
        (ownname=>user, tabname=>'" + cachedMetadataTableName +
        "', estimate_percent=>20, method_opt=>'FOR ALL COLUMNS SIZE 1', degree=>0,
        granularity=>'AUTO', cascade=>TRUE, no_invalidate=>FALSE, force=>FALSE) }");
      return cs;
    }
  },
  new CallableStatementCallback() {
    public Object doInCallableStatement(CallableStatement cs) throws SQLException{
      cs.execute();
      return null; // returned from the jdbcTemplate.execute method
    }
  }
);

execute metodu - PreparedStatementCreator + PreparedStatementCallback
İmzası şöyle
public <T> T execute(PreparedStatementCreator psc, 
                     PreparedStatementCallback<T> action) 
throws DataAccessException
Örnek
Şöyle yaparız
public void updateOrderDateByUserId(String userId, String newOrderDate) 
  throws SQLException {

  final String sql = "UPDATE order_details SET order_date=? WHERE user_id=?";

  PreparedStatementCreator psc = new PreparedStatementCreator() {
    @Override
    public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
      PreparedStatement ps = con.prepareStatement(sql);
      ps.setString(1, newOrderDate);
      ps.setString(2, userId);
      return ps;
    }
  };

  this.jdbcTemplate.execute(psc, new PreparedStatementCallback<String>() {
    @Override
    public String doInPreparedStatement(PreparedStatement ps) 
      throws SQLException, DataAccessException {
      ps.executeUpdate();
      return "SUCCESS";
    }
  });
}





Hiç yorum yok:

Yorum Gönder