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

StackOverflow https://stackoverflow.com/questions/216790

  •  03-07-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة للحصول على الماضي إدراج الهوية باستخدام سكليتي من جافا؟ جوجل هو إعطائي إجابات مختلفة - يقول البعض حدد الأخير إدراج-ROWID. والبعض الآخر يقول statement.getGeneratedKeys المكالمة (). ما هو أفضل طريق لاتخاذ؟ (أريد فقط لإعادة الهوية، وعدم استخدامها لإدراج أخرى أو أي شيء).

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

المحلول

استخدم getGeneratedKeys() إذا كان برنامج تشغيل JDBC يدعم ذلك. كنت لا ترغب في الوحل حول محاولة للحصول على مفتاح نفسك بعد إدراج. إذا لم السائق الخاص بك دعم getGeneratedKeys() ثم أود أن أحصل على القيمة التالية من المفتاح قبل إدراج.

نصائح أخرى

وإما نهج تنفيذ البيان نفسه SQL المحدد، ولكن <لأ href = "http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#getGeneratedKeys ()" يختلط = "noreferrer"> java.sql.Statement.getGeneratedKeys() هو أكثر المحمولة إلى قواعد البيانات الأساسية مختلفة.

وعن طريق إما sqlite3_last_insert_rowid() وظيفة C API أو في last_insert_rowid() وظيفة SQL هي الطريقة الصحيحة لاسترداد ROWID ولدت خلال إدراج الماضي.

وسكليتي يدعم وظيفة SQL العددية في بناء الجملة على النحو التالي:

SELECT function-name();

وولذلك، إذا لم يكن لديك الوصول إلى API C مباشرة، يمكنك استدعاء الدالة last_insert_rowid() العددية عبر بيان SELECT.

إذا نظرتم في شفرة المصدر عن SQLiteJDBC التنفيذ (غير هذا ما كنت تستخدم) سوف نرى أن هذا هو بالضبط ما قام به صاحب هذا المجمع JDBC:؟

ResultSet getGeneratedKeys() throws SQLException {
    if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
        "select last_insert_rowid();");
    return getGeneratedKeys.executeQuery();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top