لن أقول الكثير من الهراء ، سأشارككم مشكلات الاتصال الشائعة لقواعد بيانات SQL Java.
1. الاتصال ، الاستعلام ، التحديث ، إغلاق
يتم وضع عمليات البيانات الأساسية هذه معًا وكتابتها في نموذج يشبه الأداة ، وهو أداة SQL Model2. أردت في الأصل إضافة عمليات أخرى ، مثل معالجة المعاملات ، لكنني لم أفكر في طريقة أكثر مثالية حتى الآن. يرجى إلقاء نظرة على الرمز بالتفصيل. التعليقات مفصلة للغاية.
استيراد java.sql.*؛ استيراد java.util.iterator ؛ استيراد java.util.map ؛ استيراد java.util.set ؛/*** تم إنشاؤها بواسطة nl101 في 2016/1/29. "oracle.jdbc.driver.oracledriver" ؛ String url = "jdbc: oracle: thin:@localhost: 1521: orcl" ؛ string username = "scott" drivermanager.getConnection (url ، اسم المستخدم ، كلمة المرور) ؛} catch (classnotfoundException e) {E.PrintStackTrace () ؛ system.err.println ("رابط قاعدة البيانات") ؛} catch (sqlexception e) {e.printstacktrace مفقود* // *** إنشاء وظيفة تحديث قاعدة بيانات* param sql update update sql atture* param params المعلمات الإضافية المطلوبة* @regur true update update update update*/public boolean update (string sql ، string [] ps.SetString (i+1 ، params [i]) ؛} k = ps.executeupdate () ؛} catch (sqlexception e) { المعلمات* regurn query set set*/public results Query (سلسلة sql ، string [] params) {try {ps = conn.preparestatement (sql) ؛ for (int i = 0 ؛ i <params.length ؛ i ++) {ps.SetString (i+1 ، params [i]) ؛ {E.PrintStackTrace () ؛ system.err.println ("استثناء استعلام قاعدة البيانات") ؛} إرجاع RS ؛}/*** إغلاق بيان قاعدة البيانات*/public void close () {try {if (rs! = null) rs.close () ؛ rs = null ؛ if (ps! = null) ps.Close () ؛ ps = null ؛ if (conn! = null) conn.close () ؛ conn = null ؛} catch (sqlexception e) {E.PrintStackTrace () ؛}}}مكتوبة مثل هذا ، إذا اتصلت فئات أخرى ، يمكنك متابعة الطريقة التالية.
sqlbean sqlbean = new sqlbean () ؛ string [] params = {} ؛ // إذا كانت هناك معلمة ، فاكتبها في resul (sqlexception e) {e.printstacktrace () ؛ sqlbean.close () ؛ // أغلق الاتصال إذا استثناء} sqlbean.close () ؛ // أغلق اتصال قاعدة البيانات2. معالجة المعاملات
عند معالجة المعاملات ، يتم دائمًا إلغاء التقديم التلقائي أولاً ، ثم يتم تنفيذ الأمر ، ويتم تقديم التقديم النهائي ، ثم يحدث الاستثناء عند التراجع. أما بالنسبة لكيفية كتابة طريقة ، لم أفكر في فكرة جيدة بعد.
استيراد bean.sqlbean ؛ استيراد java.sql.*؛/*** تم إنشاؤه بواسطة NL101 في 2016/1/29.*/اختبار الفئة العامة {public static void main (string [] args) {connection conn = null ؛ ps = null ؛ string drivername = "oracle.jdbc.driver.oracledriver "JDBC: Oracle: Thin:@localhost: 1521: orcl" ؛ string username = "scott" conn.createstatement () ؛ ps.addbatch ("الجملة 1 للعمل") ؛ ps.Addbatch ("الجملة 2 للعمل") ؛ ps.addbatch ("الجملة 3 للعمل") ؛ ps.AddBatch ("الجملة 4 للتشغيل") ؛ conn.setautocommit (true) ؛ // تمكين التقديم التلقائي} catch (classnotfoundException e) {E.PrintStackTrace () ؛ system.err.println ("استثناء Database Rink") ؛} catch (sqlexception e) {E.printstacktrace (conn! = null) {conn.rollback () ؛ // rolling عملية conn.setautoCommit (true) ؛}} catch (sqlexception e1) {e1.printstacktrace () ؛ null ؛ if (conn! = null) conn.close () ؛ conn = null ؛} catch (sqlexception e) {e.printstacktrace () ؛}}}}3. استدعاء الإجراءات المخزنة
call = ct.preparecall ("{call sp_pro4 (؟ ،؟ ،؟ ،؟ ،؟ ،؟ ،؟)}") ؛ // قم بتعيين معلمات الإدخال call.SetString (1 ، "EMP") ؛ call.setint (2 ، 4) ؛ call.setint (3 ، 1) ؛ // تعيين معلمات الإخراج call.registerOutParameter (4 ، oracletypes.number) ؛ call.registerOutParameter (5 ، oracletypes.number) ؛ call.registerOutParameter (6 ، oracletypes.cursor) ؛ // تنفيذ call.execute () ؛ // إجمالي عدد المخرجات وإجمالي الصفحات system.out.println ("العدد الإجمالي للسجلات"+call.getint (4)+"-إجمالي عدد الصفحات"+call.getint (5)) ؛ بينما (rs.next ()) {for (int i = 0 ؛ i <7 ؛ i ++) {system.out.print (rs.getString (i+1)+"") ؛} system.out.println () ؛}4. مجموعة النتائج المنقولة
يوفر الشمس فقط واجهة. ما إذا كان يمكن تشغيله يعتمد على ما إذا كان برنامج تشغيل JDBC الذي ترجع إليه يدعمه.
استيراد java.sql.*؛ اختبارات الفئة العامة {public static void main (String args []) {try {new oracle.jdbc.driver.oracledriver () ؛ String url = "jdbc: oracle: thin:@192.168.0.1: 1521: sxt "Tiger") ؛ بيان STMT = CONN.CREATESTATEMENT (resultset.type_scroll_insensitive ، // قم بتعيين RS على scroll resultset.concur_read_only) ؛ // قم بتعيين RS على rs-only rs = stmt.executequery ("SELECT * from EMP by sal") ؛ rs.next () ؛ system.out.println (rs.getint (1)) ؛ rs.last () ؛ // نقطة إلى الخط الأخير system.out.println (rs.getString (1)) ؛ syst.out.println (rs.islast ()) ؛ syst.out.println (rs.isafterlast ()) ؛ syst em.out.println (rs.getRow ()) ؛ rs.previous () ؛ // تحريك نظام الخط. (sqlexception e) {e.printstacktrace () ؛}}}5. مجموعة النتائج القابلة للتحديث
استيراد java.sql.*؛ الفئة العامة testupdatars {public static void main (String args []) {try {new Oracle.jdbc.driver.oracledriver () ؛ String url = "jdbc: oracle: thin:@192.168.0.1: 1521: sxt" conn = drivermanager.getConnection (url ، "scott" ، "tiger") ؛ بيان stmt = conn.createstatement (resultset.type_scroll_insevitive ، resultset.concur_updatable) ؛ resultset rs = stmt.executequery (select * from emp2 ") rs.updateString ("ename" ، "aaaa") ؛ rs.updaterow () ؛ // إدراج صف جديد rs.movetoinsertrow () ؛ rs.updateint (1 ، 9999) ؛ rs.updateString ("ename" ، "aaaa") ؛ rs.updateint ("mgr" ، 99.99) ؛ rs.insertrow () ؛ // نقل المؤشر إلى الخط الذي تم إنشاؤه حديثًا Rs.MovetOcurrentRow () ؛ // حذف الخط rs.absolute (5) ؛ rs.deleterow ()ما سبق هو العمليات التي أستخدمها غالبًا للاتصال بقواعد بيانات SQL في Java التي يشاركها المحرر معك. آمل أن يكون ذلك مفيدًا لك.