English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يسمح معالجة الاستثناءات بمعالجة حالات الاستثناء بشكل ضبط، مثل الأخطاء المحددة من قبل البرنامج.
عند حدوث حالة استثناء، يتم إطلاق الاستثناء. يعني كلمة throw أن البرنامج يتوقف عن التنفيذ، ويتم إعادة توجيه التحكم إلى جملة catch الأقرب للتطبيق. إذا لم يكن هناك جملة catch تطبيقية، ينتهي تنفيذ البرنامج.
معالجة استثناءات JDBC مشابهة جدًا لمعالجة استثناءات Java، ولكن بالنسبة لـ JDBC، فإن الاستثناءات التي يجب معالجتها بشكل شائع هي java.sql.SQLException.
قد تحدث SQLException في محرك التشغيل وقاعدة البيانات. عند حدوث هذا الاستثناء، يتم نقل كائن SQLException إلى جملة catch.
传递的SQLException对象具有以下可用于检索有关异常的其他信息的方法-
方法 | 描述 |
---|---|
getErrorCode( ) | 获取与异常关联的错误号。 |
getMessage( ) | 获取错误的 JDBC 驱动程序错误消息,由驱动程序处理,或者获取数据库错误的 Oracle 错误号和消息。 |
getSQLState( ) | 获取 XOPEN SQLstate 字符串。对于 JDBC 驱动程序错误,此方法不返回任何有用信息。对于数据库错误,将返回五位数的 xopensqlstate 代码。此方法可以返回 null。 |
getNextException( ) | 获取异常链中的下一个 Exception 对象。 |
printStackTrace( ) | 打印当前异常或可调用异常,并将其回溯到标准错误流。 |
printStackTrace(PrintStream s) | 将此可丢弃对象及其回溯打印到指定的打印流。 |
printStackTrace(PrintWriter w) | 打印这个一次性文件,并将其回溯到指定的打印编写器。 |
通过利用Exception对象提供的信息,您可以捕获异常并适当地继续执行程序。这是try块的一般形式-
try { // 您的异常代码介于这些大括号之间!!! } catch(Exception ex) { // 您的异常处理代码介于这两者之间 // 花括号,类似于exception子句 // 在PL / SQL块中。 } finally { // 您必须始终执行的代码介于这两者之间 // 大括号。就像关闭数据库连接一样。 }
研究以下示例代码以了解try....catch...finally块的用法。
// 步骤1.导入所需的软件包 import java.sql.*; public class JDBCExample { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/EMP"; // معلومات وثائق البيانات الأساسية static final String USER = "username"; static final String PASS = "password"; public static void main(String[] args) { Connection conn = null; try{ // الخطوة 2: تسجيل برنامج JDBC Class.forName("com.mysql.jdbc.Driver"); // الخطوة 3: إنشاء اتصال System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // الخطوة 4: تنفيذ الاستعلام System.out.println("Creating statement..."); Statement stmt = conn.createStatement(); String sql; sql = "SELECT id, first, last, age FROM Employees"; ResultSet rs = stmt.executeQuery(sql); // الخطوة 5: استخراج البيانات من مجموعة النتائج while(rs.next()){ // البحث بواسطة اسم العمود int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); // عرض القيم System.out.print("ID: " + id); System.out.print(", Age: " + age); System.out.print(", First: " + first); System.out.println(", Last: " + last); } // الخطوة 6: تنظيف البيئة rs.close(); stmt.close(); conn.close(); catch(SQLException se){ // معالجة أخطاء JDBC se.printStackTrace(); catch(Exception e){ // معالجة خطأ Class.forName finally{ } // تمنع النهاية النهائية من إغلاق الموارد try{ if(conn!=null) conn.close(); catch(SQLException se){ se.printStackTrace(); } // انتهاء try System.out.println("Goodbye!"); // انتهاء main // انتهاء JDBCExample
الآن، دعونا نعدل الأمثلة أعلاه كما يلي:
C:\>javac JDBCExample.java C:\>
في الوقت الحاليJDBCExample، إذا لم يكن هناك خطأ، سيتم إنتاج النتائج التالية، وإلا سيتم إلتقاط الخطأ المناسب وعرض رسالة الخطأ.-
C:\>java JDBCExample الاتصال بقاعدة البيانات... إنشاء تعليمة... ID: 100, Age: 18, First: Zara, Last: Ali ID: 101, Age: 25, First: Mahnaz, Last: Fatma ID: 102, Age: 30, First: Zaid, Last: Khan ID: 103, Age: 28, First: Sumit, Last: Mittal C:\>
حاول تنفيذ الأمثلة أعلاه عبر إدخال اسم قاعدة البيانات غير صحيح أو اسم مستخدم أو كلمة المرور غير صحيحة، ثم قم بالتحقق من النتائج.