일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 가상면접3장
- gitsquash
- awss3
- s3이미지다운로드됨
- 리액트구글애널리틱스
- 시스템설계
- 시스템설계면접팁
- 리팩터링2판테스트
- 가상면접으로대규모시스템
- formik submitting not working
- 테스트코드책
- 시스템설계방법
- 시스템설계면접
- 헤드퍼스트전략패턴
- git commit merge
- 전략패턴
- 시스템설계면접예시
- cypress React
- FirebaseAnalytics
- 가상면접2장
- formik react-query submitting not working
- git squash
- 디자인패턴
- react
- git commit 협업
- cypressBDD
- file not found Error
- 리팩토링2판4장
- Git commit 합치기
- react-ga
- Today
- Total
mingg IT
[Spring] JdbcTemplate 사용법 본문
이슈를 해결하던 와중 JdbcTemplate.execute()에서 에러가 발생하여 bad SQL grammer exception을 내뱉었다.
원인은 orderBy 사용시 DDL문법 오류가 발생한것.
이슈를 해결하는 김에 오늘 jdbcTemplate에 대해 알아보려고 한다.
Spring JDBC 사용과정은
1. DataSource를 설정한다.
driverClassName(), url, username, password 를 설정한다.
2.이후 해당 DataSource를 Bean으로 등록한다.
JdbcTemplate(DataSource)
(Spring JDBC를 사용하려면 DB Connection의 정보가 담긴 DataSource를 Bean으로 등록해야함)
3. jdbcTemplate.execute (String query) 를 활용한다.
String query = "CREATE TABLE TEMP AS (SELECT * FROM EMP WHERE EMPNO = 10)"
jdbcTemplate.execute(query) 를 이용하면
CREATE 문이기 때문에 DDL명령어가 수행된다.
나중에 무조건 사용할 pstmt예제를 추가해서 적어 놓도록 하겠다.update 메소드에서 createPreparedStatement를 Override해서 사용해야 한다.
jdbcTemplate.update(new PreparedStatementCreator(){
@Override public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
String query = "insert into NEWJOB (ID, NAME, USER_ID) values (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, JOBID);
pstmt.setString(2, JOBNAME);
pstmt.setString(3, USERID);
return pstmt;
return pstmt; } });
4. JdbcTemplate 구조에 대해서 조금 더 알아보자면
DAO : 원하는 작업 수행. query exequte()
Spring JDBC : JdbcTemplate
Conn 과 Statement의 열고 닫음을 관리해준다. (개발하면서 안닫은적 많은데 알아서 해주니 좋다. stmt.close()와 같은)
stmt실행해준다.
Rs(ResultSet을 처리해준다)
Exception을 처리해준다
Transaction을 처리해준다.
JDBC Driver : DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터
DataBase : 우리가 정한 타겟 DB
즉 우리가 JDBC를사용하게되면 드라이버를 로딩하고, DB를연결하고, conn을 열고 닫아주고 와 같은 작업을 매번 동일하게 했었다. 허나 JdbcTemplate는 위 같은 작업은 스프링 프레임워크에 맡기고 개발자는 쿼리문을 excute해주는 역할만 하면된다.
DB Connection Pool 은 무엇인가?
DB와 연결을 미리 준비해놓고 요청이 들어왔을 때 만들어 둔것에 연결하여 사용하는 것으로 자원을 아낄 수 있다.
커넥션 풀에 DB와 연결을 해 놓은 객체를 두고 필요할 떄 마다 커넥션 풀에서 빌려온다 라고 생각하자.
연결이 끝나면 다시 풀에 돌려준다.
import com.mchange.v2.c3p0.ComboPooledDataSource;
를 사용하면 됨.
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("driverclass");
dataSource.setJdbcUrl("url");
dataSource.setUser("admin");
dataSource.setPassword("admin");
'BackEnd' 카테고리의 다른 글
[Spring] 내가 보기 위해 만드는 편리한 annotation 모음 (0) | 2021.11.18 |
---|---|
[Spring] 스프링 log level 변경하기 (0) | 2021.11.17 |
[Spring] EntityListeners 사용하기 (0) | 2021.08.10 |
[Spring] Swagger UI 사용법 (0) | 2021.07.27 |
[Spring] 네이버 API 사용 예시 (0) | 2021.07.19 |