mingg IT

[Spring] JdbcTemplate 사용법 본문

BackEnd

[Spring] JdbcTemplate 사용법

mingg123 2021. 8. 17. 22:01

이슈를 해결하던 와중 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");
Comments