2012-04-08 2 views
0

У меня проблема с MySQL в моем маленьком проекте JSP. Я задал вопрос об этом ранее (http://stackoverflow.com/questions/9860129/jsp-mysql-jar-file-stops-working), и это следующий вопрос, основанный на информационной форме этого вопроса.JSP: Является ли это подходящим классом MySQL?

Класс работает, и страница извлекает информацию из базы данных в течение нескольких дней, а затем прекращает работу, пока я не перезапустил сервер Tomcat или не развернул файл войны еще раз.

Вот мой класс подключения MySQL, любые идеи были бы оценены:

public class Connect { 
    final String host = "localhost"; 
    final String username = "admin"; 
    final String password = "admin"; 
    String connectionURL = "jdbc:mysql://" + host + ":3306/db?user=;password="; 
    Connection connection = null; 
    Statement statement = null; 

    public Connect() { 
     try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      connection = (Connection) DriverManager.getConnection(connectionURL, username, password); 
      statement = (Statement) connection.createStatement(); 
     } catch (SQLException ex) { 
      Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (ClassNotFoundException ex) { 
      Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public ResultSet executeQuery(String query) { 
      ResultSet result = null; 
      try { 
        if (statement != null) { 
          result = statement.executeQuery(query); 

        } else { 
          System.out.println("Null"); 
        } 
     } catch (SQLException ex) { 
       Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
     } 
      return result; 
    } 
    public boolean execute(String query) { 
      System.out.println(query); 
      boolean result = false; 
      try { 
        if (statement != null) { 
          result = statement.execute(query); 
        } else { 
          System.out.println("Null"); 
        } 
     } catch (SQLException ex) { 
       Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
     } 
      return result; 
    } 
+0

Ваших отступов попали. – ThiefMaster

+0

Что вы подразумеваете под этим? – user1163278

ответ

1
public class Connect { 
      final String host = "localhost"; 
      final String username = "admin"; 
      final String password = "admin"; 
      String connectionURL = "jdbc:mysql://" + host + ":3306/db?user=;password="; 
      Connection connection = null; 
      Statement statement = null; 

    public Connect() { 
    try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      connection = (Connection) DriverManager.getConnection(connectionURL,  username, password); 

      } catch (Exception ex) { 
        out.println("Exception is: " +ex) 
        } 
      } 

      public ResultSet executeQuery(String query) { 
        ResultSet result = null; 
        try { 

          statement=(Statement)connection.createStatement(); 
          result = statement.executeQuery(query); 
          if(result>0){ 
           result=true; 
           }else{ 
            result=false; 
            } 
         } catch (SQLException ex) { 
          Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
         }finally{ 
         if(statement!=null){try{statement.close;}catch(SQLException logOrIgnore){}} 
          if(connection!=null){try{connection.close;}catch(SQLException logOrIgnore){}} 
     } 
        return result; 
      } 
      public boolean execute(String query) { 
        System.out.println(query); 
        boolean result = false; 
        try { 

          statement=(Statement)connection.createStatement(); 
          result = statement.executeQuery(query); 
          if(result>0){ 
           result=true; 
          }else{ 
           result=false; 
          } 
         } catch (SQLException ex) { 
          Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex); 
          }finally{ 
          if(statement!=null){try{statement.close;}catch(SQLException logOrIgnore){}} 
          if(connection!=null){try{connection.close;}catch(SQLException logOrIgnore){}} 
     } 
         return result; 
     } 

    } 
+0

и, как цитируется пулом соединения @Chris White, предпочтительнее, поскольку он позволяет нескольким пользователям использовать одно соединение с базой данных. – mykey

+0

Да, я надеюсь увидеть позже. На данный момент это нужно будет сделать. Это очень маленький веб-сайт. – user1163278

+0

Является ли этот код пулом или вы можете направить меня в место, где я могу это прочитать? – user1163278

1

Похоже, вы никогда не закрывать соединения, так что через несколько дней пул соединений и/или сервер MySQL побежал из бесплатных подключений.

Вы создаете новый класс Connect для каждого запроса, или повторно использовать те же один (как вы обработку многопоточности, если так?)

+0

Я использую тот же самый. Я создал метод closeResultSet() и closeConnection() (который также закрывает оператор) в классе, который я вызываю каждый раз, когда он закончил получать/отправлять информацию из/в db. Считаете ли вы, что это будет трюк? – user1163278

+0

Возможно, это сработает, но вы должны изучить не использование одного и того же объекта Connect между сеансами (рано или поздно вы столкнетесь с некоторыми проблемами). Можете ли вы поделиться своим JSP-кодом, который использует этот объект Connect? Я также хотел бы изучить JSTL SQL-теги - http://www.ibm.com/developerworks/library/j-jstlsql/ –

+0

. Так что лучше всего создавать новый объект класса Connect каждый раз, когда выполняется операция? – user1163278

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