اتصال قاعدة بيانات جافا
تُعدّ JDBC ( Java Database Connectivity ) واجهة برمجة تطبيقات (API) للغة برمجة Java ، تُحدد كيفية وصول العميل إلى قاعدة البيانات . وهي تقنية للوصول إلى البيانات مبنية على Java، وتُستخدم للاتصال بقواعد بيانات Java. تُعدّ JDBC جزءًا من منصة Java Standard Edition من شركة Oracle . توفر JDBC طرقًا للاستعلام عن البيانات وتحديثها في قاعدة البيانات، وهي مُصممة خصيصًا لقواعد البيانات العلائقية . يُمكّن جسر JDBC-to- ODBC من الاتصال بأي مصدر بيانات يُمكن الوصول إليه عبر ODBC في بيئة مضيف آلة Java الافتراضية (JVM).
التاريخ والتنفيذ
أصدرت شركة Sun Microsystems برنامج JDBC كجزء من Java Development Kit (JDK) 1.1 في 19 فبراير 1997. [ 1 ] ومنذ ذلك الحين أصبح جزءًا من Java Platform, Standard Edition (Java SE).
تُضمَّن فئات JDBC في حزمة Javajava.sql ، javax.sqlبالإضافة إلى بعض الفئات الأخرى الموجودة في أماكن أخرى. ويتم تصدير كل ما يتعلق بـ JDBC من خلال الوحدة النمطيةjava.sql .
ابتداءً من الإصدار 3.1، تم تطوير JDBC ضمن عملية مجتمع جافا . يحدد JSR 54 مواصفات JDBC 3.0 (المضمنة في J2SE 1.4)، ويحدد JSR 114 إضافات JDBC Rowset (لـ javax.sql.RowSet)، بينما يمثل JSR 221 مواصفات JDBC 4.0 (المضمنة في Java SE 6). [ 2 ]
JDBC 4.1، تم تحديده بواسطة إصدار الصيانة 1 من JSR 221 [ 3 ] وهو مضمن في Java SE 7. [ 4 ]
JDBC 4.2، تم تحديده بواسطة إصدار الصيانة 2 من JSR 221 [ 5 ] وهو مضمن في Java SE 8. [ 6 ]
تم تحديد أحدث إصدار، JDBC 4.3، بواسطة إصدار الصيانة 3 من JSR 221 [ 7 ] وهو مضمن في Java SE 9. [ 8 ]
| إصدار JDBC | إصدار جافا | نوع الإصدار | تاريخ الافراج عنه |
|---|---|---|---|
| 1.1 | JDK 1.1 | رئيسي | 1997-02-19. [ 1 ] |
| 3.0 | J2SE 1.4 | رئيسي | 2002-05-09 |
| 4.0 | جافا إس إي 6 | رئيسي | 11-12-2006 |
| 4.1 | جافا إس إي 7 | صيانة | 2011-10-13 |
| 4.2 | جافا إس إي 8 | صيانة | 2014-03-04 |
| 4.3 | جافا إس إي 9 | صيانة | 2017-09-21 |
الوظائف
| نوع بيانات أوراكل | setXXX()طُرق |
|---|---|
CHAR | setString() |
VARCHAR2 | setString() |
NUMBER | setBigDecimal() |
setBoolean() | |
setByte() | |
setShort() | |
setInt() | |
setLong() | |
setFloat() | |
setDouble() | |
INTEGER | setInt() |
FLOAT | setDouble() |
CLOB | setClob() |
BLOB | setBlob() |
RAW | setBytes() |
LONGRAW | setBytes() |
DATE | setDate() |
setTime() | |
setTimestamp() |
بما أن JDBC عبارة عن مجموعة من تعريفات ومواصفات الواجهات، فإنه يسمح بوجود تطبيقات متعددة لهذه الواجهات واستخدامها من قِبل التطبيق نفسه أثناء التشغيل. توفر واجهة برمجة التطبيقات (API) آلية لتحميل حزم Java الصحيحة ديناميكيًا وتسجيلها لدى مدير برامج تشغيل JDBC java.sql.DriverManager. java.sql.DriverManagerويُستخدم هذا المدير كأداة java.sql.Connectionلإنشاء اتصالات JDBC.
تدعم اتصالات JDBC إنشاء وتنفيذ العبارات. تدعم اتصالات JDBC عبارات التحديث مثل عبارات SQL CREATE و INSERT و UPDATE و DELETE ، أو عبارات الاستعلام مثل SELECT . بالإضافة إلى ذلك، يمكن استدعاء الإجراءات المخزنة من خلال اتصال JDBC. يُمثل JDBC العبارات باستخدام إحدى الفئات التالية:
Statement– يتمjava.sql.Statementإرسالها إلى خادم قاعدة البيانات في كل مرة. بعبارة أخرى،java.sql.Statementيتم تنفيذ الطرق باستخدام عبارات SQL للحصول علىjava.sql.ResultSetكائن يحتوي على البيانات. [ 9 ]PreparedStatement–java.sql.PreparedStatementهي واجهة فرعية للواجهة الرئيسيةjava.sql.Statement. [ 9 ] يتم تخزين العبارة مؤقتًا، ثم يتم تحديد مسار التنفيذ مسبقًا على خادم قاعدة البيانات، مما يسمح بتنفيذها عدة مرات بكفاءة. [ 9 ]java.sql.PreparedStatementتُستخدم لتنفيذ عبارات SQL المُجمَّعة مسبقًا. [ 9 ] يؤدي تشغيل العبارات المُجمَّعة مسبقًا إلى زيادة كفاءة تنفيذ العبارات وأدائها.java.sql.PreparedStatementغالبًا ما تُستخدم هذه الواجهة للعبارات الديناميكية حيث يجب تمرير بعض معلمات الإدخال إلى قاعدة البيانات المستهدفة. [ 10 ] تسمح هذهjava.sql.PreparedStatementالواجهة للاستعلام الديناميكي بالتغير بناءً على معلمات الاستعلام. [ 11 ]CallableStatement–java.sql.CallableStatementهي واجهة فرعية للواجهة الرئيسيةjava.sql.Statement. [ 11 ] تُستخدم لتنفيذ الإجراءات المخزنة على قاعدة البيانات. [ 11 ] [ 12 ] يجب تمرير كل من معلمات الإدخال والإخراج إلى قاعدة البيانات لتنفيذ الإجراءات المخزنة. [ 13 ]
تُعيد عبارات التحديث، مثل INSERT` UPDATEupdate` و` DELETEupdate`، عدد التحديثات الذي يُشير إلى عدد الصفوف المتأثرة في قاعدة البيانات كرقم صحيح. [ 13 ] ولا تُعيد هذه العبارات أي معلومات أخرى.
تُعيد عبارات الاستعلام مجموعة نتائج صفوف JDBC. تُستخدم مجموعة نتائج الصفوف للتنقل بين عناصر مجموعة النتائج . يتم استرجاع الأعمدة الفردية في الصف إما بالاسم أو برقم العمود. قد تحتوي مجموعة النتائج على أي عدد من الصفوف. تتضمن مجموعة نتائج الصفوف بيانات وصفية تُحدد أسماء الأعمدة وأنواعها.
يوجد امتداد لواجهة برمجة تطبيقات JDBC الأساسية في javax.sql.
غالبًا ما تتم إدارة اتصالات JDBC عبر مجموعة اتصالات بدلاً من الحصول عليها مباشرة من برنامج التشغيل، مثل [ 14 ]javax.sql.DataSource .
أمثلة
عندما يحتاج تطبيق جافا إلى اتصال بقاعدة بيانات، تُستخدم إحدى DriverManager.getConnection()الطرق لإنشاء اتصال JDBC java.sql.Connection. يعتمد عنوان URL المستخدم على قاعدة البيانات وبرنامج تشغيل JDBC المُستخدمين. يبدأ دائمًا بالبروتوكول jdbc:، أما باقي التفاصيل فتعتمد على مُورّد قاعدة البيانات.
استيراد java.sql.Connection ؛ استيراد java.sql.DriverManager ؛ استيراد java.sql.SQLException ؛Connection conn = DriverManager.getConnection ( " jdbc :somejdbcvendor:other data needed by some jdbc vendor" , "myLogin" , "myPassword" ) ;حاول { // استخدم الاتصال هنا } أخيرًا { حاول { // أغلق الاتصال بعد الانتهاء conn.close ( ); } catch ( SQLException e ) { // انشر الاستثناء الأصلي، وليس الاستثناء الذي تم التقاطه هنا logger.warn ( " تعذر إغلاق اتصال JDBC" , e ) ; } }ابتداءً من Java SE 7، يمكن استخدام عبارة try-with-resources في Java لتبسيط الكود أعلاه:
استيراد java.sql.Connection ؛ استيراد java.sql.DriverManager ؛try ( Connection conn = DriverManager.getConnection ( " jdbc :somejdbcvendor:other data needed by some jdbc vendor" , "myLogin" , "myPassword" )) { // استخدم الاتصال هنا } // يتم استدعاء conn.close() تلقائيًا // سيتم إغلاق الاتصال تلقائيًا بعد الخروج من كتلة tryبمجرد إنشاء الاتصال، java.sql.Statementيمكن إنشاء...
استيراد java.sql.Statement ؛try(Statementstmt=conn.createStatement()){stmt.executeUpdate("INSERT INTO MyTable(name) VALUES ('my name')");}Note that java.sql.Connections, java.sql.Statements, and java.sql.ResultSets often tie up operating system resources such as sockets or file descriptors. In the case of java.sql.Connections to remote database servers, further resources are tied up on the server, e.g. cursors for currently open java.sql.ResultSets. It is vital to close() any JDBC object as soon as it has played its part; garbage collection should not be relied upon. The above try-with-resources construct is a code pattern that obviates this.
Data is retrieved from the database using a database query mechanism. The example below shows creating a statement and executing a query.
importjava.sql.ResultSet;importjava.sql.Statement;try(Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("SELECT * FROM MyTable")){while(rs.next()){intnumColumns=rs.getMetaData().getColumnCount();for(inti=1;i<=numColumns;i++){// Column numbers start at 1.// Also, there are many methods on the result set to return// the column as a particular type. Refer to the Sun documentation// for the list of valid conversions.System.out.printf("COLUMN %d = %s%n",i,rs.getObject(i));}}}The following code is an example of a java.sql.PreparedStatement query which uses conn and class from the first example:
importjava.sql.PreparedStatement;importjava.sql.ResultSet;try ( PreparedStatement ps = conn.prepareStatement ( " SELECT i.*, j.* FROM Omega i, Zappa j WHERE i.name = ? AND j.num = ?" ) ) { // في عبارة SQL التي يتم إعدادها، كل علامة استفهام هي عنصر نائب // يجب استبدالها بقيمة تُحددها من خلال استدعاء دالة "set". // يستدعي استدعاءا الدالتين التاليتين العنصرين النائبين؛ الأول // يُستبدل بقيمة نصية، والثاني بقيمة عددية. ps.setString ( 1 , "Poor Yorick" ); ps.setInt ( 2 , 8008 ) ;// تُشير مجموعة النتائج، rs، إلى نتيجة تنفيذ عبارة SQL. // في كل مرة تستدعي فيها rs.next()، يتم تحريك مؤشر صف داخلي، أو مؤشر، // إلى الصف التالي من النتيجة. يكون المؤشر في البداية // قبل الصف الأول. try ( ResultSet rs = ps.executeQuery ()) { while ( rs.next ()) { for (int i = 1 ; i < = rs.getMetaData ( ) . getColumnCount ( ) ; i ++ ) { // تبدأ أرقام الأعمدة من 1. // كما توجد العديد من الطرق في مجموعة النتائج لإرجاع // العمود بنوع معين. راجع وثائق Sun // للاطلاع على قائمة التحويلات الصالحة. System.out.printf ( "COLUMN %d = %s % n " , i , rs.getObject ( i ) ) ; } } } }في حال فشل عملية قاعدة البيانات، يُصدر JDBC استثناءً SQLException. عادةً ما يكون من الصعب جدًا التعافي من هذا الخطأ، باستثناء تسجيله بأكبر قدر ممكن من التفاصيل. يُوصى java.sql.SQLExceptionبتحويل هذا الاستثناء إلى استثناء في نطاق التطبيق (استثناء غير مُعالَج) يؤدي في النهاية إلى التراجع عن المعاملة وإشعار المستخدم.
الكود التالي هو مثال على معاملة قاعدة بيانات :
استيراد java.sql.SQLException ؛boolean autoCommitDefault = conn.getAutoCommit ( ) ; try { conn.setAutoCommit ( false ) ;// تنفيذ العبارات على الاتصال هنا بشكل معامليconn.commit (); } catch ( SQLException e ) { try { conn.rollback ( ); } catch ( Throwable e ) { logger.warn ( " تعذر التراجع عن العملية" , e ) ; } throw e ; } finally { try { conn.setAutoCommit ( autoCommitDefault ); } catch ( Throwable e ) { logger.warn ( " تعذر استعادة إعداد الالتزام التلقائي " , e ) ; } }للحصول على مثال على java.sql.CallableStatement(استدعاء الإجراءات المخزنة في قاعدة البيانات)، راجع وثائق دليل واجهة برمجة تطبيقات JDBC .
package org.wikipedia.examples ;استيراد java.sql.Connection ؛ استيراد java.sql.DriverManager ؛ استيراد java.sql.Statement ؛public class DatabaseExample { private static final String DB_URL = "jdbc:mysql://localhost/mydb" ;public static void main ( String [] args ) { try { Class . forName ( "com.mysql.jdbc.Driver" );Connection conn = DriverManager.getConnection ( DB_URL , "root" , "root" ); Statement stmt = conn.createStatement (); String sql = " INSERT INTO emp1 VALUES ('pctb5361', 'kiril', 'john', 968666668)" ; stmt.executeUpdate ( sql ) ; System.out.println ( " تم إدخال السجلات في الجدول..." ) ; } catch ( SQLException e ) { System.err.printf ( " حدث خطأ في SQL: %s%n" , e.getMessage ( ) ) ; } catch ( Exception e ) { System.err.println ( " حدث خطأ غير معروف . " ) ; e.printStackTrace ( ) ; } } }برامج تشغيل JDBC
برامج تشغيل JDBC هي محولات من جانب العميل (مثبتة على جهاز العميل، وليس على الخادم) تقوم بتحويل الطلبات من برامج Java إلى بروتوكول يمكن لنظام إدارة قواعد البيانات فهمه.
الأنواع
توفر برامج التشغيل التجارية والمجانية إمكانية الاتصال بمعظم خوادم قواعد البيانات العلائقية. وتنقسم هذه البرامج إلى أحد الأنواع التالية:
- النوع 1 الذي يستدعي الكود الأصلي لبرنامج تشغيل ODBC المتوفر محليًا. (ملاحظة: في JDBC 4.2، تمت إزالة جسر JDBC-ODBC [ 15 ] )
- النوع الثاني يستدعي مكتبة بائع قاعدة البيانات الأصلية من جانب العميل. ثم يتواصل هذا الكود مع قاعدة البيانات عبر الشبكة.
- النوع 3 ، برنامج التشغيل المكتوب بلغة جافا النقية والذي يتحدث مع البرامج الوسيطة من جانب الخادم والتي تتحدث بدورها مع قاعدة البيانات.
- النوع 4 ، برنامج التشغيل المكتوب بلغة جافا النقية والذي يستخدم بروتوكول قاعدة البيانات الأصلي.
لاحظ أيضًا نوعًا يُسمى برنامج تشغيل JDBC الداخلي - وهو برنامج تشغيل مُدمج مع بيئة تشغيل جافا (JRE) في قواعد بيانات SQL المُفعّلة بلغة جافا. يُستخدم هذا البرنامج لإجراءات جافا المخزنة . لا يندرج هذا النوع ضمن تصنيف البرامج المذكور أعلاه، على الرغم من أنه يُشبه على الأرجح برنامج تشغيل من النوع 2 أو النوع 4 (بحسب ما إذا كانت قاعدة البيانات نفسها مُنفذة بلغة جافا أم لا). ومن الأمثلة على ذلك برنامج تشغيل KPRB (Kernel Program Bundled) [ 16 ] المُرفق مع نظام إدارة قواعد البيانات العلائقية Oracle . يوفر "jdbc:default:connection" طريقة قياسية نسبيًا لإنشاء مثل هذا الاتصال (على الأقل تدعمه قاعدة بيانات Oracle و Apache Derby ). مع ذلك، في حالة برنامج تشغيل JDBC الداخلي، يعمل عميل JDBC كجزء من قاعدة البيانات التي يتم الوصول إليها، وبالتالي يمكنه الوصول إلى البيانات مباشرةً بدلاً من الوصول إليها عبر بروتوكولات الشبكة.
مصادر
- توفر أوراكل قائمة ببعض برامج تشغيل JDBC ومورديها
- توفر شركة Simba Technologies حزمة تطوير برمجية (SDK) لإنشاء برامج تشغيل JDBC مخصصة لأي مصدر بيانات علائقي مخصص/خاص
- توفر شركة CData Software برامج تشغيل JDBC من النوع 4 لتطبيقات وقواعد بيانات وواجهات برمجة تطبيقات الويب المختلفة. [ 17 ]
- توفر شركة DataDirect Technologies مجموعة شاملة من برامج تشغيل JDBC السريعة من النوع 4 لجميع قواعد البيانات الرئيسية التي تعلن عنها على أنها من النوع 5 [ 18 ].
- توفر شركة IDS Software برنامج تشغيل JDBC من النوع 3 للوصول المتزامن إلى جميع قواعد البيانات الرئيسية. تشمل الميزات المدعومة تخزين نتائج البحث مؤقتًا، وتشفير SSL، ومصدر بيانات مخصص، وdbShield.
- JDBaccess هي مكتبة جافا لتخزين البيانات لقواعد بيانات MySQL و Oracle ، وتُعرّف عمليات الوصول الرئيسية إلى قواعد البيانات من خلال واجهة برمجة تطبيقات سهلة الاستخدام تعمل فوق JDBC.
- يوفر JNetDirect مجموعة من برامج تشغيل JDBC عالية الأداء والمعتمدة بالكامل من Sun J2EE.
- JDBCR4 هو برنامج خدمة كتبه سكوت كليمنت للسماح بالوصول إلى JDBC من RPG على IBM i . [ 19 ]
- HSQLDB هو نظام إدارة قواعد بيانات علائقية مزود ببرنامج تشغيل JDBC وهو متاح بموجب ترخيص BSD.
- SchemaCrawler [ 20 ] عبارة عن واجهة برمجة تطبيقات مفتوحة المصدر تستفيد من JDBC، وتجعل بيانات تعريف قاعدة البيانات متاحة ككائنات جافا عادية (POJOs).
انظر أيضاً
الاقتباسات
- ١ ٢ "أصدرت صن JDK 1.1 - يتضمن Javabeans" . www.sun.com . صن مايكروسيستمز . ١٩ فبراير ١٩٩٧. مؤرشف من الأصل في ١٠ فبراير ٢٠٠٨. تم الاسترجاع في ١٥ فبراير ٢٠١٠. ١٩ فبراير ١٩٩٧
- JDK 1.1 [...] متوفر الآن [...]. يتضمن هذا الإصدار من JDK ما يلي: [...] ميزات جديدة قوية، بما في ذلك JDBC للاتصال بقواعد البيانات.
- ↑ مواصفات واجهة برمجة تطبيقات JDBC الإصدار: 4.0 .
- ↑ "برنامج عملية مجتمع جافا (SM) - communityprocess - mrel" . jcp.org . تم الاطلاع عليه في 22 مارس 2018 .
- ↑ "JDBC 4.1" . docs.oracle.com . تم الاطلاع عليه بتاريخ 22 مارس 2018 .
- ↑ "برنامج عملية مجتمع جافا (SM) - communityprocess - mrel" . jcp.org . تم الاطلاع عليه في 22 مارس 2018 .
- ↑ "JDBC 4.2" . docs.oracle.com . تم الاطلاع عليه بتاريخ 22 مارس 2018 .
- ↑ "برنامج عملية مجتمع جافا (SM) - communityprocess - mrel" . jcp.org . تم الاطلاع عليه في 22 مارس 2018 .
- ↑ "java.sql (Java SE 9 & JDK 9)" . docs.oracle.com . تم الاطلاع عليه بتاريخ 22 مارس 2018 .
- 1 2 3 4 باي 2022 ، ص. 74.
- ↑ باي 2022 ، ص 122-124، §4.2.3.5 المزيد حول أساليب التنفيذ.
- 1 2 3 باي 2022 ، ص 72-74 ، §3.2 مكونات وبنية JDBC.
- ↑ هورستمان 2022 ، §5.5.3 الهروب من SQL.
- 1 2 باي 2022 ، ص 122-124 ، §4.2.3.5 مكونات وبنية JDBC.
- ↑ باي 2022 ، ص 83، §3.5.1 مصدر بيانات JDBC.
- ↑ "Java JDBC API" . docs.oracle.com . تم الاطلاع عليه بتاريخ 22 مارس 2018 .
- ↑ غرينوالد، ريك؛ ستاكوفياك، روبرت؛ ستيرن، جوناثان (1999). أساسيات أوراكل: قاعدة بيانات أوراكل 10g . سلسلة الأساسيات ( الطبعة الثالثة). سيباستوبول، كاليفورنيا: أورايلي ميديا، إنك. (نُشر عام 2004). ص 318. ISBN 9780596005856تم الاطلاع عليه في 3 نوفمبر 2016. يستخدم
برنامج تشغيل JDBC الموجود في قاعدة البيانات (JDBC KPRB) [:] إصدار JDBC KPRB (Kernel Program Bundled) للوصول إلى SQL على نفس الخادم.
- ↑ "برامج تشغيل JDBC - شركة CData Software" . شركة CData Software . تم الاطلاع عليه بتاريخ 22 مارس 2018 .
- ↑ "برنامج تشغيل JDBC من النوع 5 الجديد - اتصال DataDirect" .
- ↑ "الوصول إلى قواعد البيانات الخارجية من لغة RPG باستخدام JDBCR4: جوهر الموضوع" . 28 يونيو 2012. تم الاطلاع عليه في 12 أبريل 2016 .
- ↑ سواله فاتحي. "SchemaCrawler" . GitHub .
مراجع
- باي، يينغ (2022). برمجة قواعد بيانات SQL Server باستخدام جافا . تشام: دار نشر سبرينغر الدولية . doi : 10.1007/978-3-031-06553-8 . ISBN 978-3-030-92686-1.
- هورستمان ، كاي (15 أبريل 2022). جافا الأساسية . أوراكل الصحافة جافا. رقم ISBN 978-0-13-787107-0.
روابط خارجية
- دليل واجهة برمجة تطبيقات JDBC
java.sqlتوثيق واجهة برمجة التطبيقات (API) باستخدام جافا دوكjavax.sqlتوثيق واجهة برمجة التطبيقات (API) باستخدام جافا دوك- إطار عمل وسيط العلاقات الخارجية (O/R Broker) بلغة سكالا JDBC
- SqlTool أداة مفتوحة المصدر، تعمل عبر سطر الأوامر، وهي أداة عميل JDBC عامة. تعمل مع أي قاعدة بيانات تدعم JDBC.
- سلاسل عناوين URL الخاصة بـ JDBC والمعلومات ذات الصلة بجميع قواعد البيانات.
- مكونات JDK
- طلبات مواصفات جافا
- الوصول إلى بيانات SQL
- واجهات برمجة تطبيقات قواعد البيانات
