2014-01-08 105 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