2017-12-04 1 views
-1

私は、JDBC "Statement"を使用してCRUD操作を実行するコードを用意しています。今、私はすべてのステートメントを "PreparedStatement"に置き換える必要がありますが、私は以下のコードのようにそれを返す/使用する方法について混乱しています。助けてください。ユーティリティクラスからPreparedStatementを返す/使用する

MyDao.java

public class MyDao extends BaseDao{ 

    public MyDao() { 
     super(); 
    } 

    public void search(){ 
     ResultSet rs = null; 

     try { 
      statement.executeQuery("SELECT * FROM testTable"); 
      rs = statement.getResultSet(); 
      reset(); 
     } 
     catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 

} 

BaseDao

public class BaseDao { 

Connection connection=null; 
Statement statement = null; 

public BaseDao() { 
     try { 
      Class.forName("org.postgresql.Driver"); 
      connection = (Connection) DriverManager.getConnection("url","user","password"); 
      statement = connection.createStatement(); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 


    public void reset(){ 
     try{ 
      statement.close(); 
      connection.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

答えて

-1

まず、データベースの接続パラメータをチェックし、私は、あなたがそうローカルホストでそれをテストするローカルデータベースを使用していることを前提とユーザーのパスワード。接続がOKならば、コンソールメッセージを表示してからCRUDを実行してください。

+0

質問には一切答えません。 – EJP

+0

私の質問はPreparedStatementに関するものです。上記のコードでStatementが使用される方法でPreparedStatementを使用できますか? – AbhiN

0

前述のとおり、できません。準備するSQLを提供する必要があります。しかし、全体のデザインが間違っています。クラスのインスタンスメンバーとしてConnectionsおよびStatementを持ち歩くべきではありません。接続は、いつでもデータベースサーバーによって終了できます。特に長寿命の接続は、新しいものが必要な場合に使用します。チャンスを与えないでください。必要に応じて両方を取得し、接続プールを使用してコストを償却する必要があります。

+0

あなたが言ったように*クラスのインスタンスメンバーとしてコネクションとステートメントを持ち歩くべきではありません*、私はあなたが理由を含めることができれば、それは将来のユーザーのために役立つだろうと思う。あなたの考えを共有してください。 – SpringLearner

+0

@EJP:合意しました!数年前に書かれたレガシーコードであり、クライアントは大きなコード変更を望まない。私は混乱していると言っていたので、私の理解を確認するためにこの質問を投稿しました。でも、ありがとうございます:-) – AbhiN

+0

あなたは一切変更しないでください。いずれにしても、要求通りに変更することはできません。 SQLを準備せずにPreparedStatementを作成することはできません。 – EJP

関連する問題