【问题标题】:In java JDBC connection error ORA-28000: the account got locked, but db account is not locked在 java JDBC 连接错误 ORA-28000: 帐户被锁定,但 db 帐户未锁定
【发布时间】:2014-01-26 02:44:59
【问题描述】:

我可以使用凭据(用户名:HR,密码:*****)从控制台连接到 Oracle XE、数据库。但我收到错误消息

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程序连接到数据库?

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

    当使用凭据(用户名:系统,密码:####)连接时,帐户已连接,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 帐户已解锁,现在可以毫无问题地执行其他查询 :)

    【讨论】:

    • 找出帐户被锁定的原因可能更聪明。这种机制是有原因的。密码老化就是其中之一。
    • 是的,这只是一个快速解决方法,肯定适用于这种情况。
    【解决方案2】:

    只需将用户名更改为“系统”而不是“人力资源”。和它!您现在可以连接到您的数据库了。

    【讨论】:

    • SYSTEM 用户帐户不适用于最终用户。除维护任务外,切勿使用系统登录。所以这不是一个好建议。
    猜你喜欢
    • 2015-01-07
    • 2015-06-29
    • 2023-03-17
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多