ResultSet etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ResultSet etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

8 Nisan 2019 Pazartesi

ResultSet Arayüzü Sütun İsmi İle Getter Metodları

getDate metodu
java.sql.Date sınıfını (yani sadece gün bilgisini) döndürür.

getInt metodu
Şöyle yaparız.
int r = rs.getInt ("column1");
getLong metodu
Şöyle yaparız.
long r = rs.getLong ("column1");
getObject metodu
Metodun içi şuna benzer.
public Object getObject(String columnLabel) throws SQLException {
  return getObject(getIndexByLabel(columnLabel));
}

private int getIndexByLabel(String columnLabel) {
  Map<String, Integer> indexMap = createOrGetIndexMap();
  Integer columnIndex = indexMap.get(columnLabel.toLowerCase());
  if (columnIndex == null) {
    throw new SQLException("Column label " + columnLabel + " does not exist");
  }
  return columnIndex;
}

private Map<String, Integer> createOrGetIndexMap() throws SQLException {
  if (this.indexMap != null) {
    return this.indexMap;
  }
  ResultSetMetaData rsmd = getMetaData();
  Map<String, Integer> map = new HashMap<>(rsmd.getColumnCount());
  // reverse loop to ensure first occurrence of a column label is retained
  for (int idx = rsmd.getColumnCount(); idx > 0; idx--) {
    String label = rsmd.getColumnLabel(idx).toLowerCase();
    map.put(label, idx);
  }
  return this.indexMap = map;
}
Örnek
Şöyle yaparız. PostgreSQL JDBS sürücüsü Java 8 Date ve Time sınıflarını destekler.
Instant instant = myResultSet.getObject(  , Instant.class) ;
getString metodu
İsmi belirtilen sütunun değerini string olarak verir.
resultSet.getString ("column1");
getTime metodu
java.sql.Time  sınıfını (yani sadece saat bilgisini) döndürür

getTimeStamp metodu
java.sql.Timestamp sınıfını (yani gün ve saat bilgisini) döndürür. UTC olarak geri okumak için aşağıdaki gibi yapılabilir.
Calendar utcCal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
while(rs.next())
    rs.getTimestamp("utctime",utcCal);

JDBC ResultSet Arayüzü Sütun Indeksi İle Getter Metodları

Giriş
İndeks kullanan getter metodları sütun ismi (column name) kullanan metodlara göre daha performanslı. Açıklaması şöyle.
High-load performance testing showed that Hibernate’s approach of reading values from ResultSet by name to be its most limiting factor in scaling through-put.
İmzası şöyle
Object getObject(int columnIndex) throws SQLException;
public <T> T getObject(int columnIndex, Class<T> type) throws SQLException;
Object getObject(int columnIndex, java.util.Map<String,Class<?>> map) throws SQLException;
getArray metodu
İmzası şöyle
Array getArray(int columnIndex) throws SQLException;
getBigDecimal metodu
İmzası şöyle
BigDecimal getBigDecimal(int columnIndex) throws SQLException;
getBinaryStream metodu
İmzası şöyle
java.io.InputStream getBinaryStream(int columnIndex) throws SQLException;
Bu metod ile veri tabanından BINARY, VARBINARY, LONGVARBINARY gibi JDBC tipine sahip sütunlar okunabilir. Ancak bu tür sütunların kullanıldığını görmedim. Bunlar yerine daha çok BLOB kullanılıyor. getBlob () yerine, stream tabanlı metodların kullanılmasının çok fazla veri çekerken daha iyi olabileceği yazılı. Şöyle yaparız.
InputStream is = rs.getBinaryStream (1);
...
is.close ();
getBlob metodu
ResultSet blob'a getBlob (index) veya getBlob ("ColumnName") şeklinde erişime izin verir. Şöyle yaparız.
Blob b= rs.getBlob (1);
byte byteArray[]= b.getBytes(0,(int)b.length()); 
FileOutputStream fout = new FileOutputStream("d:\\image.jpg");  
fout.write (byteArray);  
fout.close ();
getDate metodu
java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException;
getObject metodu
Metodun içi şuna benzer.
public Object getObject(int index) throws SQLException {
  checkValidRow();
  checkValidIndex(index);
  return currentRow[index - 1];
}
Örnek
Açıklaması şöyle. Bu yöntem örneğin SQL sonucunu bir terminalde göstermek için kullanılabilir.
This approach does not use any container classes, it transmits the data as is. Then the client side code converts the data into the objects.
Şöyle yaparız
@Repository
public class JdbcTableRepository {

  @Autowired
  DataSource ds;
 
  public List loadAs2DArray(String sql) throws SQLException {

    try (Connection con = ds.getConnection(); 
         Statement st = con.createStatement(); 
         ResultSet rs = st.executeQuery(sql)) {
      ResultSetMetaData md = rs.getMetaData();
      int colCount = md.getColumnCount();

      List rows = new LinkedList<>();
      List row = new LinkedList<>();
      for (int c = 1; c <= colCount; c++) {
        row.add(md.getColumnLabel(c));
      }
      rows.add(row);
      while (rs.next()) {
        row = new LinkedList<>();
        for (int c = 1; c <= colCount; c++) {
          row.add(rs.getObject(c));
        }
        rows.add(row);
      }
      return rows;
    }
  }
}
getTime metodu
İmzası şöyle
java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException;
getTimeStamp metodu
İmzası şöyle
java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException;
getURL metodu
İmzası şöyle
java.net.URL getURL(int columnIndex) throws SQLException;