2013-12-10 82 views
0

我想在java應用程序中調用java存儲過程。我正在使用ORACLE數據庫和JDeveloper。異常在線程「主」java.lang.NullPointerException錯誤JDeveloper 12c

我收到錯誤「異常線程‘main’顯示java.lang.NullPointerException。我不知道我究竟是做錯了。

我有一個表‘啤酒’,我想選擇所有數據從一個存儲過程,而我召喚出的Java應用程序的

我有我與LOADJAVA加載到Oracle數據庫的java.class文件Store_A.java:

import java.sql.*; 
import java.io.*; 

public class Store_a { 

    public static void apskatit() 
    throws SQLException 
    { String sql = 
     "SELECT * FROM Beer"; 
    try { Connection conn = DriverManager.getConnection("jdbc:default:connection:"); 
     PreparedStatement pstmt = conn.prepareStatement(sql); 
     ResultSet rset = pstmt.executeQuery(); 
     rset.close(); 
     pstmt.close(); 
     } 
    catch (SQLException e) {System.err.println(e.getMessage()); 
    } 
    } 
} 

然後我創建我打算在java中調用一個過程:

CREATE OR REPLACE PACKAGE Store_a AS 
PROCEDURE apskatit; 
END Store_a; 

CREATE OR REPLACE PACKAGE BODY Store_a AS 
PROCEDURE apskatit AS LANGUAGE JAVA 
NAME 'Store_a.apskatit()'; 
END Store_a; 

我有,我已經與JDeveloper 12c所產生的Java文件:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

public class Class1 { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) throws SQLException { 
     Connection conn = null; 
     try { 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      //Izveidojam savienojumu 
      conn = DriverManager.getConnection("jdbc.oracle.thin:@localhost:1521", "SYSTEM", "asdasd"); 
      // Izveidojam callable statement 
      CallableStatement stmt = conn.prepareCall("CALL Store_a.apskatit()"); 
      ResultSet resul = stmt.executeQuery(); 
      while (resul.next()) { 
       System.out.println(resul.getInt(1) + "\t" + resul.getString(2)); 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       conn.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

當我試圖運行java文件,我得到主的‘Java這個錯誤「在線程異常’。 lang.NullPointerException在client.Class1.main(Class1.java:29)。我得到錯誤的行是

conn.close(); 

如何解決這個問題?

非常感謝您提前。

+0

另一天,另一個沒有堆棧跟蹤的Java異常。您的錯誤消息會告訴您發生異常的確切類別和行號,因此如果您不想自己閱讀並找出錯誤,則需要至少複製並粘貼確切的堆棧跟蹤。 – nhgrif

+0

對不起,忘了補充一下。錯誤client.class1.main(Class.java:29) – user3074445

+0

我相信它是這一行 - conn.close(); – user3074445

回答

0

如果你得到一個NPE(空指針異常),原因是你的conn對象爲null。在您的finally塊中,嘗試關閉連接而不檢查連接是否已設置。 我想你在NPE之前有另一個例外。檢查你的日誌輸出。

相關問題