①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);とかってする。
値をセットするため、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);とかってする。