2015-04-07 1 views
1

Я получаю ORA-12519нет соответствующего обработчика службы -exception, когда я использую бесконечные петли в своем коде. Однако этот код отлично работает в других системах.ora-12519, не найдено соответствующего сервисного обработчика

Это мой код

public static void main(String args[]) { 
    try { 
     Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
     String dbHost = "localhost"; 
     String database = "scott"; 
     String dbUsername = "scott"; 
     String dbPassword = "scott"; 
     String smsReceiver = ""; 

     String dbUrl = "jdbc:oracle:thin:@localhost:1521:xe"; 

     while (true) { 
      ResultSet rs = null; 
      conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword); 

      try { 
       Statement smnt = null; 
       smnt = conn.createStatement(); 
       String sql = "select count(*) from ozekismsin"; 
       rs = smnt.executeQuery(sql); 
       rs.next(); 

       int count = rs.getInt(1); 
       if (count != 0) { 
        System.out.println("success"); 
        sql = "select * from ozekismsin"; 
        rs = smnt.executeQuery(sql); 
        rs.next(); 
        String msg = rs.getString("msg"); 
        // smsReceiver=rs.getString("sender"); 
        System.out.println(msg); 
        StringTokenizer st = new StringTokenizer(msg, " "); 
        st.nextToken(); 
        String source = st.nextToken(); 
        st.nextToken(); 
        String dest = st.nextToken(); 
        System.out.println(source + " " + dest); 
        PreparedStatement preparedStatement = null; 
        sql = "select id from new1 where name=?"; 
        preparedStatement = conn.prepareStatement(sql); 
        preparedStatement.setString(1, source); 

        rs = preparedStatement.executeQuery(); 

        rs.next(); 

        int s = rs.getInt("id"); 
        System.out.println(source + " " + dest); 
        sql = "select id from new1 where name=?"; 
        preparedStatement = conn.prepareStatement(sql); 
        preparedStatement.setString(1, dest); 
        System.out.println(s); 
        rs = preparedStatement.executeQuery(); 
        rs.next(); 
        int d = rs.getInt(1); 
        a = s; 

        test1 ob = new test1(); 
        ob.dijkstra(s, d); 

        String sqlInsert = "INSERT INTO " 
          + "ozekismsout (receiver,msg,status) " 
          + "VALUES " + "('" + smsReceiver + "','" 
          + message + "','send')"; 

        if (smnt.executeUpdate(sqlInsert) != 0) { 
         System.out.println("OK"); 
         System.out.println(message); 
        } else { 
         System.out.println("ERROR"); 
        } 
        sql = "delete from ozekismsin"; 
        smnt.executeQuery(sql); 
        sql = "commit"; 
        smnt.executeQuery(sql); 
       } // end of if 

       smnt.close(); 
       conn.close(); 
      } // end of try in while 
      finally { 
       try { 
        rs.close(); 
       } catch (Exception e) { 
        System.out.println("exception caught"); 
       } 
      } // end of finally 
     } // end of while 
    } // end of outer try 
    catch (Exception ex) { 
     System.out.println("Exception: " + ex.getMessage()); 
     ex.printStackTrace(); 
    } 
} // end of main 

Этот код прекрасно работает и в других системах. Но здесь он работает, только если я удаляю бесконечный цикл.

Пожалуйста, помогите мне.

+1

Почему вы только закрываете результирующий набор один раз и в предложении finally? Вы повторно используете переменные, не очищая их, что может привести к тому, что у вас будет больше открытых курсоров и соединений, чем вы думаете. Почему вы неоднократно открываете и закрываете соединение и неоднократно пересматриваете подготовленные заявления? Получаете ли вы какие-либо другие исключения - полагаетесь ли вы на исключение, чтобы закончить цикл? –

ответ

0

Ошибка ORA-12519 может быть вызвана использованием текущего соединения (например, сеансы concurrernt) превышает допустимую величину для экземпляра Oracle.

Обратитесь к администратору базы данных, чтобы сообщить вам, какие ограничения подключены, - эти параметры являются специфичными для базы данных, а некоторые значения имеют значения по умолчанию. Просить.

Поскольку ваши циклы кода @AlexPoole отмечают, что вы исчерпываете ресурсы, вы можете создавать множество соединений и не выпускать их, например. Я не могу точно сказать. ошибка 12519 - проблема ресурса соединения. Период. Как ты это сделал, я не знаю.

Смежные вопросы