2015-02-23 153 views
1

這是我嘗試使用jdk進行編譯的程序。在程序中的「satya」引用msaccess數據庫文件的數據庫。當我嘗試編譯它顯示錯誤時"MyClass.java:0:error:unreported exception ClassNotFoundException;must be caught or declared to be thrown"。即使我將程序中的異常從SQLException更改爲異常,它也可以成功編譯。但運行程序時拋出異常。如何執行?未報告的異常ClassNotFoundException;必須被捕獲或聲明爲拋出

import java.sql.*; 

class MyClass 
{ 
    public static void main(String args[]) 
    { 

     try{ 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      Connection con=DriverManager.getConnection("jdbc:odbc:satya","",""); 
      Statement st=con.createStatement(); 
      ResultSet rs=st.executeQuery("select * from studentinfo"); 
      while(rs.next()) 
      { 
      System.out.println(rs.getInt(1)+"\t"+ 
      rs.getString(2)+"\t"+ 
      rs.getString(3)+"\t"); 
      } 
     rs.close(); 
     st.close(); 

     } 
     catch (SQLException e) { 
      System.out.println("<P>" + "There was an error doing the query:"); 
      System.out.println ("<PRE>" + e + "</PRE> \n <P>"); 
      } 
} 
} 

回答

0

你的方法之一會拋出一個ClassNotFoundException,你有責任處理這些例外。 在這種情況下,異常OT打印到控制檯了一個quickfix

public static void main(String args[]) throws Exception 

(請拓展與輸出你的問題)。

此外請確保您將jdbc驅動程序庫添加到您的項目中。

0

ClassNotFoundException是Exception的子類,這就是爲什麼你通過編譯器。 SQLException類不包裝ClassNotFoundException。由於「Class」類的forName()方法聲明爲「throws ClassNotFoundException」,編譯器將要求您使用調用方法的try/catch塊或throws子句包裝方法調用。 catch塊必須使用ClassNotFoundException或其一個父類Exception類。

您需要找出在運行時拋出的異常,以檢查它未能提前運行的原因。

相關問題