2014-01-08 109 views
0

我可以使用證書(用戶名:HR,密碼:*****)從控制檯連接到Oracle XE,DB。但我發現了錯誤信息在Java JDBC連接錯誤ORA-28000:帳戶被鎖定,但數據庫帳戶未被鎖定

ORA-28000:賬戶被鎖

,當我嘗試建立從使用JDBC的java程序連接。

代碼:

public static void main(String args[]) throws Exception{ 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE"; 
      Connection con = DriverManager.getConnection(url,"USER NAME","PASSWORD"); 
      Statement statement = con.createStatement(); 
      ResultSet resultset = statement.executeQuery("select 'Connected' from dual"); 

      while (resultset.next()) { 
       System.out.println(resultset.getString(1)); 
      }   
      statement.close(); 
      con.close(); 
    } 

如何從這個java程序連接到數據庫?

回答

0

當使用憑證進行連接時(用戶名:system,密碼:####),帳戶連接時沒有任何來自java程序的問題。 但是,使用憑證(用戶名:HR,密碼:* *)連接時出現錯誤消息ORA-28000:帳戶被鎖定。但能夠從oracle控制檯使用這些HR憑證進行登錄。 因此,要獲得從java程序的連接,做了以下內容:

public static void main(String args[]) throws SQLException, ClassNotFoundException{ 

      String query; 

      // Connect to system Database first 
      Class.forName("oracle.jdbc.driver.OracleDriver"); 
      String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE"; 
      Connection con = DriverManager.getConnection(url,"system","####"); 
      Statement statement = con.createStatement(); 
      query = "alter user HR identified by HR account unlock"; 

      //Unlock the account 
      ResultSet resultset = statement.executeQuery(query); 

      //Connect to HR database 
      con = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE","HR","****"); 
      statement = con.createStatement(); 

      //Fetch all the tables in HR database 
      query = "select 'Connected' from dual"; 
      resultset = statement.executeQuery(query); 

      //Prints records fetched 
      while (resultset.next()) { 
       System.out.println(resultset.getString(1)); 
      }   

      statement.close(); 
      con.close(); 

    } 

的HR帳戶解除了,現在能夠在沒有問題:)執行其他查詢

+3

它可能是更聰明的找到了爲什麼帳戶被鎖定。這種機制是有原因的。密碼老化就是其中之一。 –

+0

是的,這只是一個快速解決方法,一定適用於這種情況。 – Teela