insert할때는 select할때와 좀 다른부분이 있다
slect가 아닐땐 결과집합이 없다
select문장은 쿼리를 이용해서 결과집합 유저셋을 얻는다.
다시 말하면, 결과집합이 있는 셀렉트를 실행할때는 유저셋을 반환하는 쿼리를 사용한다.
인서트, 업데이트, 딜리트 등 조작할때는 executeQuery()를 쓰는게아니라 executeUpdate()를쓴다.
INSERT 문을 직접 코드에 입력하면 컬럼갯수만큼 복잡한 문자열이 나온다. 예를들어서 VALUES 뒤에 값을 넣어줄때 '
따옴표를 넣어줘야 하는데 "'" 라고 까지 찍어주고 복잡해보인다
String sql = "insert into `mynewlecture`.`notice`" +
"(" +
"`title`," +
"`writer_id`," +
"`content`," +
"`files`" +
")" +
"values" +
"(" +
"'" + title + "'" + "," +
"'" + writedId + "'" + "," +
"'" + content + "'"+ "," +
"'" + files + "'" +
")";
이걸 위해 나온게 PreparedStatement 인데 위 코드처럼 복잡한 코드를 아래처럼 값을 ?
로 해결할 수 있다
String sql = "insert into `mynewlecture`.`notice`" +
"(" +
"`title`," +
"`writer_id`," +
"`content`," +
"`files`" +
")" +
"values" +
"(?,?,?,?)"
물음표로 넣고 PreparedStatement 를 이용하면
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, title);
st.setString(2, writerId);
st.setString(3, content);
st.setString(4, files);
위와 같이 준비를 시킬 수 있다.
준비가되면 이제 실행하는 메서드를 사용해야한다
int result = st.executeUpdate();
executeUpdate()는 row의 갯수를 반환한다. 예를들어서 insert를 지금은 한개를 넣어서 1을 반환하는데 6개를 넣는 코드를 넣으면 6을 반환하고 insert외에도 delete나 update도 똑같이 동작한다.
보통 조건검사를 하기 위해서 쓴다.