Programming/JDBC 9

CRUD 서비스 만들기, SQL 페이징 쿼리의 이용(ROWNUM).2022-02-14

우선적으로 사용자에게 DB의 테이블들을 보여주기 위해서는 전부 다 보여주는 것이 아니라, 특정한 갯수대로 끊어서 보여주어야 한다. ROWNUM에 대한 자세한 설명은 내가 SQL공부할떄 작성했던 포스팅을 참고: ROWNUM을 이용한 페이징 출력, 중복제거 distinct 키워드, 문자열 자르기 SUBSTR 함수. 2021-07-29 — "꾸준하게, 지속하자" (tistory.com) select * from (select RowNUM as num, N.* from (select * from notice ORDER BY REGDATE DESC) as N ) where num between 1 and 10; 이렇게 2개의 서브쿼리를 사용하면 페이징을 구현 할 수 있다. 이유는 문법에 있다. SQL의 selec..

Programming/JDBC 2022.02.14

JDBC에서 insert 쿼리 날리기, SQL 쿼리문법 불일치 오류해결(';' 세미콜론 지우기). 2022-02-09.

오늘은 JDBC에서 DB에서 데이터를 "조회" 하는 것이 아닌 "추가" 하는 과정을 해 보았다. 즉, SQL의 DML에는 SELECT, INSERT, UPDATE, DELETE 등이 있는데, 이번에는 insert문을 직접 JAVA에서 JDBC를 이용해 DB로 쿼리를 날리는 작업을 해 보았다. 차이점이 있는데, SELECT 만 쓸 때는, 결과집합(RESULTSET)객체를 만들어주고, 거기서 출력을 해야했었는데, 애초에 조회가 아니라 추가다보니 그럴 일이 없어졌다.(아래의 주석 처리한 부분.) 또 PreparedStatement를 통해 복잡한 인자들을 직접 추가하지말고, 이미 만들어진 SQL에 인덱스별로 추가해주면 된다. 우선 아래의 내가 쓴 코드를 보자. 전혀 문제될 것이 없어보인다. public clas..

Programming/JDBC 2022.02.09

JDBC와 DB간의 커밋(commit). 관계, 열 시퀀스. 2022-02-08

그전에는 커밋을 단지 SQL DEVELOPER의 접속 세션에만 영향을 주는줄 알았는데, 실제 JDBC로 DB에 불러올때도 똑같은 원리가 적용되는줄 이제 알았다. 이전 나의 포스팅을 참고바람. 커밋과 롤백, DATE 형 칼럼에 값 insert 하기. 2021-07-23 — "꾸준하게, 지속하자" (tistory.com) session2에서 notice 테이블에 새로운 테이블을 추가 했음에도, session1에 반영이 안된 모습. (해당 테이블이 ROCK걸린 상태). session2에서 커밋을 완료하고, session1에서 바로 반영된 모습. 그런데 위에 보면 hit가 10 이상인 레코드만 뽑아내는 기능은 session1 ,2 둘다 같은데 코드의 방식이 서로 다르다. session1 은 java 로 if(1..

Programming/JDBC 2022.02.08

CRUD 서비스 만들기 3.(페이징쿼리 적용부터~). 2021-09-01

우선 지난시간에 내가 짠 쿼리대로, notice 테이블을 서버로부터 가져올때, 등록시간이 최신순으로(등록순 내림차순 한다음), 10개씩 가져오는 쿼리를 적용해 보겠다. NoticeService 클래스가 너무 길어서 SELECT 기능을 담당하는 getList() 부분만 가져왔다. public List getList(int page) throws ClassNotFoundException, SQLException{ String url="jdbc:oracle:thin:@localhost:1521/xepdb1"; String sql ="select * from(select ROWNUM as num, n.* from (select * from notice order by regdate disc) n ) " + "w..

Programming/JDBC 2021.09.01

CRUD 서비스 만들기 2(Select 문으로 레코드 리스트 형태로 가져오기). 2021-08-31

우선 이전 포스팅에서 완성하지 못했던, NoticeService 클래스와 서버에서 레코드를 저장하는 그릇역할을 할, Notice 클래스를 완성했다. NoticeService 클래스 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.ulsanboy.app.entity.Notice; //다른패키지에 만들어놓은 Notice 클래스를 참조. public class NoticeService { publ..

Programming/JDBC 2021.08.31

JDBC UPDATE ,DELETE 쿼리의 적용+ PreparedStatement 클래스.+ CRUD 서비스 만들기1. 2021-08-30

우선 지난 포스팅에는, INSERT 쿼리를 JDBC에서 실행하는 방법을 보였다. 이번엔 DBMS에 저장되있는 레코드를 변경하는 UPDATE 쿼리를 보이겠다. 우선 SQL로 현재 저장되있는 레코드를 수정하는 쿼리는 이렇다. update notice set title='남구 옥동', content='어깨가 빨리 나았으면 좋겠다.' where writer_id='모리'; 이 쿼리를 자바 프로그램에서 DB에 넣을려면, 아래와 같은 쿼리를 쓰면 된다. public class program { static String url="jdbc:oracle:thin:@localhost:1521/xepdb1"; public static void main(String[] args) throws ClassNotFoundExcep..

Programming/JDBC 2021.08.30

JDBC에서 레코드 가져오기, insert문으로 레코드 입력하기 + 트리거 개념+ 시퀀스 개념.+ statement 클래스의 DML에 따른 함수들. 2021-08-27

이젠 실질적으로 자바 프로그램으로 DB에 접근해서 데이터를 얻어와 보자. 1. 만약 내가 DB에 저장된 모든 데이터를 가지고 오고 싶다면 어떻게 해야 할까? 쉽다. rs.next의 특성을 이용하면 된다. rs.next는 서버의 결과집합을 가리키는 포인터가 EOF에 도달했을때, false를 반환한다. 이걸 이용해서 반복문을 돌리면 된다. public class program { static String url="jdbc:oracle:thin:@localhost:1521/xepdb1"; public static void main(String[] args) throws ClassNotFoundException, SQLException { // TODO Auto-generated method stub Strin..

Programming/JDBC 2021.08.27

JDBC Driver설치. JDBC 기본코드와 동작원리.2021-08-25

모든 DBMS를 만드는 회사들은 각 DBMS의 연결 인등 문장실행 결과패치를 할수있게 해 주는 client를 제공한다. SQL DEVELOPER 처럼 말이다. 그런데 우리가 일반 사용자들에게 만들어서 제공하는 UI는 이런 기능을 제공해 주지 않는다. 또한 ORACLE, My SQL , MS SQL 등 다양한 DBMS 를 프로그램이 지원하는데 각각의 종류에 맞는 클라이언트를 그때마다 바꿔 쓸수도 없는 노릇이다. 즉, 기존에 SQL DEVELOPER 같은 DBMS 종속적인 클라이언트 들이 해줬던 연결/인증,문장실행, 결과패치 등을 우리가 대신 해 줘야 한다는 것이다. 또한 여러 DBMS에 범용적으로 적용시킬수 있는 기능도 필요하다. 이런 역할을 각 DBMS마다 최적화된 JDBC Driver가 해준다. JDB..

Programming/JDBC 2021.08.25

JDBC의 작동원리, 기본 코드. 2021-06-10

우선, JDBC는 자바에서 클라이언트로부터 받은 데이터의 요청(쿼리)를 인터페이스를 통해 표준화된 함수들로 Connection(연결), Statement(쿼리 문장실행), Resultset(결과패치) 등을 제공하는 템플릿이다. 왜 이런 JDBC가 필요하냐면, 사용자가 UI에서 어떤 정보를 클릭하면, 그 쿼리를 실질적인 DBMS(데이터 저장소)에 넘겨 줄 수 있다. 그런데 이 DBMS는 많은 종류가 있다. MySQL, ORACLE, RADIS 등... 이런 dbms의 종류에 함수의 이름이 각각 다를 것이고, 그렇다면, DBMS 를 바꿀때 마다, 그에 맞는 코드를 또 다시 짜야 할 것이다. 이런 애로사항을 방지하기위해 JDBC라는 자바에서 표준적으로 제공하는 라이브러리를 통해 쿼리를 작성하면, 각 DBMS에..

Programming/JDBC 2021.06.10