1. 程式人生 > 其它 >sqlserver複製oracle的表,SQLServer資料庫的複製表及資料的兩種方法

sqlserver複製oracle的表,SQLServer資料庫的複製表及資料的兩種方法

我的部落格

何為異常

異常是程式中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。

說得簡單通俗點就是報錯。

異常分類

這兩張圖可以讓我們全面看到報錯的型別。

Error

  • Error是程式無法處理的錯誤,表示執行應用程式中較嚴重問題。

  • 大多數的錯誤與程式碼編寫所執行的操作是沒有什麼關係的,而表示程式碼執行的時候Java虛擬機器出現的系列問題。

  • 常見的有虛擬機器錯誤、記憶體溢位、執行緒死鎖等,這些錯誤往往是不可查的,因為它們在應用程式的控制和處理能力之外,而且絕大多數是程式執行時不允許出現的狀況。

  • 對於設計合理的應用程式來說,即使確實發生了錯誤,本質上也不應該試圖去處理它所引起的異常狀況。

所以,我們的異常處理機制,一般可不是對於Error的報錯的。

Exception

  • Exception是程式本身可以處理的異常。異常處理通常指的是針對這類異常的處理。
  • Exception類的異常包括Unchecked ExceptionChecked Exception
  • Unchecked Exception(非檢查異常):編譯器不要求強制處理的異常,包含RuntimeException以及它的相關子類。
  • Checked Exception(檢查異常):編譯器要求必須處理的異常,除了RuntimeException以及它的相關子類其他的Exception子類都是檢查異常,如IOException
    SQLException

如何處理異常

異常處理

在Java應用程式中,異常處理機制為:丟擲異常、捕獲異常

我們經常看到執行程式程式碼,如果出現錯誤,我們的控制檯就是一片紅,這是JVM有一個預設的異常處理機制,即將該異常的名稱、異常的資訊、異常出現的位置列印在了控制檯上,同時將程式停止執行。

但是,這樣只是我們看到報錯資訊罷了,而且如果是我們在專案開始上線執行時,出現報錯,使用者將看到一片亂碼,那這就會影響體驗感。

捕獲異常

既然我們要對異常做出反應,那我們就需要先捕捉到異常,就像JavaScript捕捉到一些動作一樣。

  • 在Java中,一旦方法丟擲異常,系統自動根據該異常物件尋找合適異常處理器(Exception Handler)來處理該異常,把各種不同的異常進行分類,並提供了良好的介面。
  • 在 Java 中,每個異常都是一個物件,它是Throwable類或其子類的例項。當一個方法出現異常後便丟擲一個異常物件,該物件中包含有異常資訊,呼叫這個物件的方法可以捕獲到這個異常並可以對其進行處理。
  • Java 的異常處理涉及了 5 個關鍵詞:trycatch、 finallythrow 和throws

這裡有5個關鍵詞,那這些關鍵詞分別有啥用呢?

  • throw : 用於丟擲異常。

  • try : 用於監聽。

  • catch :用於捕獲異常。

  • finally : finally語句塊總是會被執行。它主要用於回收在try塊裡開啟的資源(如資料庫連線、網路連線和磁碟檔案)。

注意:只有finally塊,執行完成之後,才會回來執行try或者catch塊中的return或者throw 語句,如果finally中使用了return或者throw等終止方法的語句,則就不會跳回執行,直接停止。

  • throws: 用在方法簽名中,用於宣告該方法可能丟擲的異常。

而許多時候,我們的這些關鍵詞有常用的搭配。

try{
             
}catch () {
           
}finally {
             
}

而在處理的時候,我們會有如下流程。

示例

import java.util.Scanner;
public class TryDemo {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("輸入數字:");
        int num = input.nextInt();
    }
}

這裡,我輸入了一個a,控制檯直接紅紅火火。

我們試試異常捕捉。

package Box;
import java.util.Scanner;
public class TryDemo {
    public static void main(String[] args) {
        try {
            Scanner input=new Scanner(System.in);
            System.out.println("輸入數字:");
            int num = input.nextInt();
        }catch (Exception e) {
            System.out.println(e);
        }
    }
}

此時,我們只輸出一句報錯資訊。

我們想讓他變得可以讓人接受一點或者輸出提示。

}catch (Exception e) {
    System.out.println("程式出錯");
}

這樣就人性化許多了。

多重異常處理

這玩意和迴圈一樣,也可以多重巢狀。

當程式可能會產生多種型別的異常,針對可能出現的不同異常如果希望做不同的處理,那麼就可以使用多重catch。 注意多重catch塊中的異常型別不能一致,且捕獲父型別的catch塊應該在子型別的後面,比如Exception應該在最後面。

Finally

我們還有一個關鍵詞finally,咋一看,好像沒啥用處啊?

不管報錯還是不報錯,我們的finally內的語句都會被執行,那我們這個就肯定有用了。至於有什麼具體用處,到要用時,就會明白。

Return

當代碼中出現return時,一定是finally語句塊執行完成後才會去執行相應的return程式碼,無論return語句在什麼位置。

搜了張圖,這樣就更清晰了。

Throw和Throws

可以通過throws宣告將要丟擲何種型別的異常,通過throw將產生的異常丟擲

這裡看好,s結尾的時宣告,沒s的時產生。

Throw定義的格式是這樣的:throw new 異常類名(引數)

先看看throw的輸出。

Throws定義是這樣的:修飾符 返回值型別 方法名(引數) throws 異常類名1,異常類名2…{ }

一般來說,Throws和Throw都是成對出現的。

我們知道,有時候,看程式碼時,他可能要你開始執行才開始丟擲錯誤。比如下面這段程式碼。

而我使用Throws來宣告一個這段程式碼可能存在的錯誤時,如果恰好有錯誤,將會直接提示出現,不需要執行。

然後如果你這種情況下執行,他就提示如下。

也就是說,這裡的異常需要你用trycatch捕獲後,在使用throw來丟擲異常。

擴充套件

try-with-resources結構

JDK7 之後,Java 新增的 try-with-resource 語法糖來開啟資源,並且可以在語句執行完畢後確保每個資源都被自動關閉 。

JDK7 之前所有被開啟的系統資源,比如流、檔案或者Socket連線等,都需要被開發者手動關閉,否則會造成資源洩露將。

語法如下。

try (resource declaration) {
  // 使用的資源
} catch (ExceptionType e1) {
  // 異常塊
}

自定義異常

在 Java 中你可以自定義異常。編寫自己的異常類時需要記住下面的幾點。

  • 所有異常都必須是Throwable的子類。
  • 如果希望寫一個檢查性異常類,則需要繼承Exception類。
  • 如果你想寫一個執行時異常類,那麼需要繼承RuntimeException類。

其他

在Java中定義了兩種型別的異常和錯誤。

  • JVM 異常:由JVM丟擲的異常或錯誤。例如:NullPointerException類,ArrayIndexOutOfBoundsException 類,ClassCastException類。
  • 程式級異常:由程式或者API程式丟擲的異常。例如IllegalArgumentException 類,IllegalStateException類。