SORU
16 Aralık 2009, ÇARŞAMBA


Nasıl BULUNMAKTAYDI Ekle ID almak?

1* *bir veritabanı SQL Server benim durumumda Microsoft olan) bir kayıt Java OLANLARI kullanarak yapmak istiyorum. Aynı zamanda, ınsert KİMLİĞİ almak istiyorum. Nasıl bu OLANLARI API kullanarak elde edebilirsiniz?

CEVAP
16 Aralık 2009, ÇARŞAMBA


Otomatik olarak oluşturulan bir anahtar varsa, o zaman bu Statement#getGeneratedKeys() kullanabilirsiniz. Aynı kişi INSERT için kullanılan gibi Statement gereken tek şey, söylemen. İlk ifadesi Statement.RETURN_GENERATED_KEYS anahtarları getirmek için gerekli OLANLARI sürücüsü bildirmek kullanarak oluşturmanız gerekir. Burada temel bir örnek:

public void create(User user) throws SQLException {
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT,
                                      Statement.RETURN_GENERATED_KEYS);
    ) {
        statement.setString(1, user.getName());
        statement.setString(2, user.getPassword());
        statement.setString(3, user.getEmail());
        // ...

        int affectedRows = statement.executeUpdate();

        if (affectedRows == 0) {
            throw new SQLException("Creating user failed, no rows affected.");
        }

        try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
            if (generatedKeys.next()) {
                user.setId(generatedKeys.getLong(1));
            }
            else {
                throw new SQLException("Creating user failed, no ID obtained.");
            }
        }
    }
}

Çalışıp çalışmadığını OLANLARI (sürücü bağımlı olduğunu unutmayın. Şu anda en son sürüm en yapacak, ama eğer yanılmıyorsam, Oracle JDBC sürücüsü hala bu biraz zahmetli. MySQL ve DB2 zaten yıllardır destekledi. PostgreSQL desteği için kısa önce başladı. Hiç kullanmadım gibi MSSQL hakkında hiçbir ifade.

Oracle, çağırabilirsiniz CallableStatement RETURNING fıkra SELECT CURRVAL(sequencename) (ya da her neyse DB özgü sözdizimi için bunu yapmak) doğrudan sonra INSERT aynı işlem elde etmek için son oluşturulan anahtar. Ayrıca Bkz: 13**.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bethliebert

    bethliebert

    23 EKİM 2008
  • kylediablo

    kylediablo

    8 Ocak 2007
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010