티스토리 뷰

java 반복문 내 prepareStatement 사용시 유의사항.



■ 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(int i=0 ; i<arr.size() ; i++) {
 
    sql = new StringBuffer();
    
    sql.append("insert into tbltot_order_detail \n");
    sql.append(" (a,b,c) \n");
    sql.append("values (?, ?, ?) ");
    
    psmt = conn2.prepareStatement(sql.toString());
    
    pstmt.setString(1"A"); //order_no
    pstmt.setString(2"B"); //order_seq
    pstmt.setString(3"C"); //lot_id
    pstmt.executeUpdate();
    
    conn2.commit();
}
cs



■ 수정 1 

 - pstmt 초기화 추가


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
for(int i=0 ; i<arr.size() ; i++) {
    sql = new StringBuffer();
 
    sql.append("insert into tbltot_order_detail \n")
    sql.append(" (a,b,c) \n")
    sql.append("values (?, ?, ?) ");
 
    psmt = conn2.prepareStatement(sql.toString());
 
    pstmt.setString(1"A"); //order_no
    pstmt.setString(2"B"); //order_seq
    pstmt.setString(3"C"); //lot_id
    
    pstmt.executeUpdate();
    conn2.commit();
 
    try {
    
        if (psmt != null)
            psmt.close();
    }
    catch(Exception e){
        psmt=null;
    }
}
cs


■ 수정 2
 - pstmt 생성 부분을 for문 밖으로 꺼냄
 - addBatch() 사용
 - executeBatch() 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
dm = new makeElecInfoDM();
sql = new StringBuffer();
 
sql.append("insert into tbltot_order_detail \n")
sql.append(" (a,b,c) \n")
sql.append("values (?, ?, ?) ");
 
psmt = conn2.prepareStatement(sql.toString());
 
for(int i=0 ; i<arr.size() ; i++) {
    dm = (makeElecInfoDM)arr.get(i);
    pstmt.setString(1, dm.getOrderNo()); //order_no
    pstmt.setString(2, dm.getOrderSeq()); //order_seq
    pstmt.setString(3, dm.getLotId()); //lot_id
 
    psmt.addBatch();
}
 
psmt.executeBatch();
conn2.commit();
cs

이런식으로 사용하면 된다.

끗~!


'개발 > 언어' 카테고리의 다른 글

[마이바티스] if문  (0) 2017.04.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함