오늘은 JDBC에서 DB에서 데이터를 "조회" 하는 것이 아닌 "추가" 하는 과정을 해 보았다.
즉, SQL의 DML에는 SELECT, INSERT, UPDATE, DELETE 등이 있는데, 이번에는 insert문을 직접 JAVA에서 JDBC를 이용해 DB로 쿼리를 날리는 작업을 해 보았다.
차이점이 있는데, SELECT 만 쓸 때는, 결과집합(RESULTSET)객체를 만들어주고, 거기서 출력을 해야했었는데, 애초에 조회가 아니라 추가다보니 그럴 일이 없어졌다.(아래의 주석 처리한 부분.)
또 PreparedStatement를 통해 복잡한 인자들을 직접 추가하지말고, 이미 만들어진 SQL에 인덱스별로 추가해주면 된다.
우선 아래의 내가 쓴 코드를 보자. 전혀 문제될 것이 없어보인다.
public class program2 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
String url="jdbc:oracle:thin:@localhost:1521/xepdb1";
String Title="울산광역시";
String writer_id="최동훈";
String content="서울에서도 울산에서 처럼, 꾸준하게 끝까지 하자. ";
String sql="INSERT INTO notice (title,writer_id,content) VALUES (?,?,?);";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(url,"NEWLEC","vdongv1620");
//Statement st=con.createStatement();
//ResultSet rs=st.executeQuery(sql);
PreparedStatement st=con.prepareStatement(sql);
st.setString(1, Title);
st.setString(2, writer_id);
st.setString(3, content);
int result=st.executeUpdate();
System.out.println(result);
st.close();
con.close();
}
}
그런데에러가 났다.
난 SQL을 제대로 썻기 때문에, 틀린 이유를 모르겠어서 계속 해매다가 세미콜론";"이 들어가면 애러가 난다는 사실을 알게 되었다.
INSERT INTO notice (title,writer_id,content) VALUES (?,?,?)
그래서 이렇게 세미콜론을 빼니, 정상적으로 작동되었다.
UPDATE를 통해 JDBC에서 DB에 저장된 테이블 변경을 해보자. 일단 필요한 쿼리와 java코드의 형식은 insert문과 거의 유사하다. 즉, 마찬가지로, SELECT 문과는 달리, executeQuery가 아닌 executeUpdate를 쓴다. 또한 결과집합이 필요 없기떄문에, resultset을 굳이 쓸 필요도 없다.
Update 쿼리를 통해 ID 10에 위치한 레코드를 변경해 보겠다.
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class updatepractice {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// TODO Auto-generated method stub
String url="jdbc:oracle:thin:@localhost:1521/xepdb1";
String title="울산";
String writer_id="개발자";
String content="나 최동훈은 백엔드 개발자가 되어서, 네카라쿠베에 입사할 것이다.";
String sql="update notice set title=? , writer_id=? , content=?" +
"where id='10'";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection(url,"NEWLEC","vdongv1620");
PreparedStatement st=con.prepareStatement(sql);
st.setString(1, title);
st.setString(2, writer_id);
st.setString(3, content);
int result=st.executeUpdate();
System.out.println(result);
st.close();
con.close();
}
}
새로 내가 날린 쿼리가 적용되었다.
JDBC에서의 executeUpdate에 대해서는 내가 그 전에 쓴 포스팅 참고.
공부시간 1시간 20분.
순공시간 1시간.
'기록 > JDBC' 카테고리의 다른 글
CRUD 서비스 만들기, SQL 페이징 쿼리의 이용(ROWNUM).2022-02-14 (0) | 2022.02.14 |
---|---|
JDBC와 DB간의 커밋(commit). 관계, 열 시퀀스. 2022-02-08 (0) | 2022.02.08 |
CRUD 서비스 만들기 3.(페이징쿼리 적용부터~). 2021-09-01 (1) | 2021.09.01 |
CRUD 서비스 만들기 2(Select 문으로 레코드 리스트 형태로 가져오기). 2021-08-31 (0) | 2021.08.31 |
JDBC UPDATE ,DELETE 쿼리의 적용+ PreparedStatement 클래스.+ CRUD 서비스 만들기1. 2021-08-30 (0) | 2021.08.30 |