どちらかというとごはん派

主に仕事用のメモブログ。

【java】 prepareStatementとstatementの違い

2008年10月24日 04時01分43秒 | java
①statementと違い、SQLに?を含ませてから、
 値をセットするため、nullの処理が楽になる
 例:
 ■statementだと・・
  // 値を設定
  String id = "001";
  String name = "太郎";
  String phone = null; //nullにする
  
  StringBuffer sb = new StringBuffer();
  sb.append("insert into t_table (id, name, phone) values ('");
  sb.append(id);
  sb.append("','");
  sb.append(name);
  sb.append("','");
  sb.append(phone);
  sb.append("')");
  
  この場合t_tableというテーブルのphoneという値には、nullという
  文字列が入ってしまう。null許可している項目の場合、
  '←これが邪魔になる。
  if分で文章を構成しないといけない。
  
 ■prepareStatementだと・・・
  String str = "insert into t_table (id, name, phone) values ( ?, ?, ? )";
  st.setString(1, id);
  st.setString(2, name);
  st.setString(3, phone);
  
  とすれば勝手に文字列は文字列としてInsertされて
  null値の場合、nullが入るため、とても便利。
  
②①と似ているが、「'(シングルコート)」が入った文字列も問題なく入る。
 先ほどのnameが、「bobb'ie」とかいう名前(・・・。)の場合、statementだと
 正規表現せねばならないが、prepareStatementだと問題なし。

③スピードが違う
 1万件ほどのデータをInsertした場合、prepareStatementだとstatementの倍ぐらい早い。
 
◎結論◎
 DBの取り扱いはprepareStatementを使うこと!!!!
 
●最後に・・・
 主な使用方法を明記しておく
 
 Connection conn = null;

 try {
  conn = DriverManager.getConnection("DBに接続するためのURL", "ユーザID", "パスワード");

  String sql = "insert into kabukatable (code, company) values (?, ?)";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  pstmt.setInt(1, 4755);
  pstmt.setString(2, "(株)ABC");

  int num = pstmt.executeUpdate();

 }catch (SQLException e){
  System.out.println("SQLException:" + e.getMessage());
 }
 
 ちなみに、executeUpdate()だと件数が帰ってくるので、
 いらない場合には、execute()だけでおk。
 
 あとあと、タイムスタンプを設定したい場合は、
 setTime(1, time);とかってする。