0

小さな JSP プロジェクトで MySQL に問題があります。以前にこれについて質問しました (http://stackoverflow.com/questions/9860129/jsp-mysql-jar-file-stops-working)。これは、その質問フォームの情報に基づくフォローアップの質問です。

クラスは機能し、ページは数日間データベースから情報をフェッチします。その後、Tomcat サーバーを再起動するか、war ファイルを再度デプロイするまで機能しなくなります。

これが私の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;
    }
4

2 に答える 2

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;
      }

     }
于 2012-04-08T20:29:04.517 に答える
1

接続を閉じていないように見えるため、数日後に接続プールや MySQL サーバーで空き接続が不足しています。

すべてのクエリに対して新しい Connect クラスを作成していますか、それとも同じものを再利用していますか (そうであれば、マルチスレッドをどのように処理していますか?)

于 2012-04-08T15:07:12.607 に答える