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

  • Hallucination Land

    Hallucinatio

    14 Ocak 2011
  • Kurtindo Pop Games

    Kurtindo Pop

    2 HAZİRAN 2013
  • Megan Parken

    Megan Parken

    19 Temmuz 2009