시퀀스란 오라클 DB에서 연속적인 숫자를 만들어내는 것을 말한다.(자동 일련번호)
시퀀스 만드는 법 (쿼리문을 이용하는 방법도 있음)
시퀀스를 생성할 테이블을 선택한 후 편집을 선택한다. 열 목록에서 해당 열을 선택한 후 하단에 ID 열을 누른다.
여기서 유형을 열 시퀀스로 바꿔준 후 확인을 누른다.
해당 시퀀스의 다음 값을 구하는 쿼리문으로 실행하면 NEXTVAL 값은 1씩 증가한다.
SELECT 시퀸스명.NEXTVAL FROM dual;
여기서 dual이란 DBMS에서 제공하는 임시 테이블을 말하는데
내장 함수나 계산식을 출력할 때 사용되는 테이블이다.
시퀀스 편집 창에서 시퀀스 시작을 지정하면 그 이후부터 데이터들이 생성된다.
만약 시퀀스 시작을 10으로 지정하고 위에서 사용한 쿼리문을 실행한다면 NEXTVAL 값은 10이 된다.
< Oracle SQL Developer에서 insert하기 >
INSERT INTO notice (
title,
writer_id,
content,
files
) VALUES (
'TEST',
'corine',
'test content',
''
);
Oracle SQL Developer에서 시퀀스에 해당하는 열 부분은 삭제한 후 위 코드처럼 insert할 수 있다.
insert를 실행한 후에 ID 값(앞에서 열 시퀀스로 지정한 열)은 11이 된다.
< 이클립스에서 insert하기 >
prepareStatement는 ?를 채워주고 ?의 인덱스는 1부터 시작한다.
select는 executeQuery()를 이용해 결과 집합을 얻지만
insert, update, delete(select가 아닐 경우)에는 결과 집합이 없기 때문에 executeUpdate()를 사용한다.
Statement를 사용할 땐 executeQuery() 안에 sql을 사용했지만
PreparedStatement를 사용할 땐 executeUpdate() 안에 sql을 사용하지 않는다.
그리고 executeUpdate()는 반환 타입으로 입력, 수정, 삭제할 때의 row 수를 알려준다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class Program {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String title ="TEST2";
String writerId ="corine2";
String content="hello";
String files="";
String url = "jdbc:oracle:thin:@localhost:1521/xe";
String sql = "INSERT INTO notice ("
+ " title,"
+ " writer_id,"
+ " content,"
+ " files"
+ ") VALUES (?,?,?,?)";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"사용자 이름","비밀번호");
// ??를 채워주는 prepareStatement
PreparedStatement st = con.prepareStatement(sql);
// ?의 인덱스가 1부터 시작
st.setString(1, title);
st.setString(2, writerId);
st.setString(3, content);
st.setString(4, files);
// SELECT는 executeQuery()를 이용해 결과 집합을 얻지만
// SELECT가 아닐 경우(insert, update, delete(조작))에는
// 결과 집합이 없기 때문에 executeUpdate() 사용
// PreparedStatement를 사용할 땐 executeUpdate() 안에 sql 사용x
// executeUpdate()는 반환타입으로 row 수를 알려줌(입력, 수정, 삭제할 때의 row 수)
int result = st.executeUpdate();
System.out.println(result); // 1
st.close();
con.close();
}
}
데이터 읽어오기 (SELECT)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class Program {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@localhost:1521/xe";
String sql = "SELECT * FROM NOTICE WHERE HIT>9";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"사용자 이름","비밀번호");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
// next()가 값을 정상적으로 가져왔으면 true, 그렇지 않으면 false
// 가져온게 없으면 false니까 {} 안에는 실행되지 않음
while(rs.next()) {
int id =rs.getInt("ID");
String title = rs.getString("TITLE");
String writerId = rs.getString("WRITER_ID");
Date regDate = rs.getDate("REGDATE");
String content = rs.getString("CONTENT");
int hit = rs.getInt("hit");
System.out.printf("id :%d, title :%s, writerId :%s, regDate :%s, content :%s, hit :%d\n",
id,title,writerId,regDate,content,hit);
}
rs.close();
st.close();
con.close();
}
}
HIT가 10이상(HIT>9)인 데이터들만 출력된다.
'강의 정리하기 > JDBC' 카테고리의 다른 글
뉴렉처 JDBC 예제 코드 (0) | 2023.03.17 |
---|---|
데이터 수정, 삭제하기 (0) | 2023.03.15 |
오라클 DB와 JDBC 연결하기 (0) | 2023.03.14 |