سؤال

هل هناك طريقة لمنصة قاعدة بيانات مشتركة للحصول على المفتاح الأساسي للسجل الذي قمت بإدراجه للتو؟

لاحظت ذلك هذه الإجابة يقول أنه يمكنك الحصول عليه عن طريق الاتصال SELECT LAST_INSERT_ID() وأعتقد أنه يمكنك الاتصال SELECT @@IDENTITY AS 'Identity'; هل هناك طريقة شائعة للقيام بذلك عبر قواعد البيانات في jdbc؟

إذا لم يكن الأمر كذلك، فكيف تقترح أن أقوم بتنفيذ ذلك لجزء من التعليمات البرمجية التي يمكنها الوصول إلى أي من SQL Server وMySQL وOracle؟

هل كانت مفيدة؟

المحلول

ونسخ من قانون بلدي:

pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);

وحيث pInsertOid هو بيان معد سلفا.

وبعد ذلك يمكنك الحصول على مفتاح:

// fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
  int newId = rs.getInt(1);
  oid.setId(newId);
}

وهذا الأمل يمنحك نقطة انطلاق جيدة.

نصائح أخرى

إجابة إكسترانيون، على الرغم من صحتها، لا يعمل لأوراكل.

الطريقة التي يمكنك بها القيام بذلك لـ Oracle هي:

String key[] = {"ID"}; //put the name of the primary key column

ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();

rs = ps.getGeneratedKeys();
if (rs.next()) {
    generatedKey = rs.getLong(1);
}

هل حاولت Statement.executeUpdate () و <لأ href = "http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#getGeneratedKeys ()" يختلط = "نوفولو noreferrer" > Statement.getGeneratedKeys () أساليب ؟ هناك developerWorks المقالة أن يذكر هذا النهج.

وبالإضافة إلى ذلك، أضاف الشمس في JDBC 4.0 في ميزة row_id التي تسمح لك للحصول على مقبض فريد على التوالي. ويدعم هذه الميزة من قبل شركة أوراكل وDB2. لمزود خدمة ستحتاج على الارجح سائق طرف ثالث مثل هذا واحد .

وحظا سعيدا!

ولأوراكل، يستخدم السبات NEXT_VALUE من تسلسل إذا قمت تعيين تسلسل لتوليد قيمة PKEY.

ولست متأكدا ما هو الحال بالنسبة خادم MySQL أو MS SQL

والربيع يوفر بعض الدعم المفيد لل<لأ href = "http://static.springframework.org/spring/docs/2.5.x/reference/jdbc.html#jdbc-auto-genereted-keys" يختلط = "نوفولو noreferrer "> هذه العملية و الدليل المرجعي يبدو أن أجيب على سؤالك:

<اقتباس فقرة>   

وليس هناك وسيلة معيارية واحدة ل   إنشاء مناسبا   PreparedStatement (وهو ما يفسر لماذا   توقيع الأسلوب هو الطريقة التي   يكون). على سبيل المثال تعمل على أوراكل   وقد لا تعمل على منصات أخرى   هو ...

ولقد اختبرت هذا المثال على الخلية ويعمل هناك أيضا، ولكن لا أستطيع أن أتكلم لمنصات أخرى.

لقواعد البيانات التي تتوافق مع SQL-99، يمكنك استخدام أعمدة التعريف: CREATE TABLE sometable (عدد صحيح معرف إنشاؤها ALWAYS AS الهوية (ستارت مع 101) المفتاح الأساسي، ...

getGeneratedKeys () لاسترداد مفتاح التي تم إدراجها فقط مع <لأ href = "http://download.oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate٪28java.lang. سلسلة٪ 20int٪ 29 "يختلط =" نوفولو "> executeUpdate (سلسلة SQL، الباحث autoGeneratedKeys) . استخدام Statement.RETURN_GENERATED_KEYS للمعلمة 2ND إلى executeUpdate ()

ومجرد إعلان العمود معرف كما معرف صحيح لا NULL auto_increment المفتاح الرئيسي

وبعد هذا تنفيذ هذه التعليمات البرمجية

ResultSet ds=st.executeQuery("select * from user");
                while(ds.next())
                {

                 ds.last();
                System.out.println("please note down your registration id  which is "+ds.getInt("id"));
                }
                ds.close();

وسوف رمز أعلاه تظهر لك معرف الصف الحالي

وإذا قمت بإزالة ds.last() من سوف تظهر جميع قيم العمود معرف

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top