1

私はもともとApacheがインストールされたサーバーでコーディングを行っており、この機能を使用してデータベースに接続していました

public Connection getDBConnection()
{
java.sql.Connection conn=null;
//synchrnized(this)
    try
    {
        DriverManager.registerDriver(new OracleDriver());
        conn = DriverManager.getConnection("jdbc:oracle:thin:@dukeorrac01:1521:ORDB1","nrsc","nrsc");

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return conn;        
}

おそらく最善の方法ではありませんが、うまくいきました。しかし、私は自分のローカル マシンでのコーディングに移行し、使用する IDE として jboss を与えられました。別のデータベースに接続しているようです。使い果たされた結果セットが得られます (これは正しくありません)。「getConnection("jdbc:oracle....") が実際のデータベースへの接続を確立したものだと「思った」。

リモート サーバーでは問題なく動作していたのに、ローカル マシンでは動作しないのはなぜですか?

PS私はデータベース/サーバー構成に不慣れです。そのため、データベースまたはサーバーのセットアップの手順を知っていると思い込まないでください。また、これはもともと私が作成したものではありません。使用させて頂きました。

ありがとう

4

1 に答える 1

1

エラーは、結果セットを適切に閉じていないことを示しているようです。次の例では、ステートメントが実行された後、finallyブロック内のこれらのリソースを閉じる必要がある方法を確認します。

以前にこのエラーが表示されなかった理由は、おそらくサーバーに大量のリソースがあったのに対し、ローカルマシンのリソースは限られており、アプリケーションのニーズを反映するようにデフォルト設定が変更されていないためです。

一般に、DBに十分なリソースが割り当てられているかどうかに関係なく、開いているすべての結果セットとステートメントを閉じるなど、基本的なハウスキーピングを行う方が適切です。

public void getDBConnection() {
    Connection conn = null;
    Statement statement = null;
    ResultSet rs = null;

    try {
        connection  = DriverManager.getConnection("jdbc:oracle:thin:@dukeorrac01:1521:ORDB1","nrsc","nrsc");
        statment = connection.createStatement();
        statement.setFetchSize(Integer.MIN_VALUE);

        // Do more stuff, iterate to ResultSet etc...
    } catch (SQLException ex) {
        // Exception handling stuff
        ...
    } finally {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) { /* ignored */}
        }
        if (statment != null) {
            try {
                statment.close();
            } catch (SQLException e) { /* ignored */}
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) { /* ignored */}
        }
    }
}
于 2012-04-13T03:41:36.600 に答える