지난번 글에서 로컬에 PostgreSQL을 설치하고 DBeaver를 이용해 사용해봤으니 이번에는 PostgreSQL을 JAVA와 연결해보겠습니다.
2022.12.05 - [DATABASE] - PostgreSQL 15.1 설치 (Windows)
2022.12.06 - [DATABASE] - DBeaver 설치 및 PostgreSQL 연결하기(Windows)
저는 나중에는 Mybatis를 사용할거지만 이글에서는 jdbcTemplate을 이용해서 db와 연결해보겠습니다.
This is the central class in the JDBC core package. It simplifies the use of JDBC and helps to avoid common errors. It executes core JDBC workflow, leaving application code to provide SQL and extract results. This class executes SQL queries or updates, initiating iteration over ResultSets and catching JDBC exceptions and translating them to the generic, more informative exception hierarchy defined in the org.springframework.dao package.
JdbcTemplate은 JDBC를 매우 편리하게 사용할 수 있도록 도와줍니다. 아래에서 jdbcTemplate을 사용할때와 사용하지 않을때를 비교해보면 사용하기 더 편리한 것을 확인 할 수 있습니다. maven을 사용할경우pom.xml,application.yml(application.properties)에 다음을 추가하고 java에서 @Autowired jdbcTemplate,dataSource 를 추가 하셔서 사용하시면 됩니다.
설정 (pom.xml)
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
설정 (application.yml)
#Datasource Configuration
---
spring:
datasource:
url: jdbc:postgresql://localhost:5432/postgres
hikari:
maximum-pool-size: 1
username: postgres
password: 1234
platform: postgres
설정 (application.properties)
spring.datasource.url: jdbc:postgresql://localhost:5432/postgres
spring.datasource.username: postgres
spring.datasource.password: 1234
구현(jdbcTemplate 미사용)
package com.myproject.firstproject;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class RunOrgSql implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) {
try {
//1. JDBC 드라이버 로딩(postgresql)
Class.forName("org.postgresql.Driver");
//2. DB 서버 접속
String url = "jdbc:postgresql://localhost:5432/postgres";
Connection conn = DriverManager.getConnection(url,"postgres","1234");
//3. Statement or PreparedStatement 객체 생성하기
Statement stmt = conn.createStatement();
//4. SQL 실행
//'test' 테이블 생성
//stmt.executeUpdate("create table test(id varchar2(5), name varchar(5))");
//행 삽입
stmt.executeUpdate("insert into test values('3','손흥민')");
//select
ResultSet rs = stmt.executeQuery("select * from test");
while(rs.next()){
System.out.println("name:" + rs.getString("id")+":"+rs.getString(2));
}
//5. 자원해제
rs.close();
stmt.close();
conn.close(); // 연결해제
}catch(Exception ex){
ex.printStackTrace();
}
}
}
구현 (jdbcTemplate 사용)
package com.myproject.firstproject;
import java.sql.Connection;
import java.sql.Statement;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class RunSql {
@Autowired
DataSource dataSource;
@Autowired
JdbcTemplate jdbcTemplate;
public void run(String[] args) throws Exception {
//테이블 생성할경우
// try (Connection connection = dataSource.getConnection()){
//Statement statement = connection.createStatement();
//String sql = "CREATE TABLE test(id VARCHAR(2), name VARCHAR(5), PRIMARY KEY (id))";
//statement.executeUpdate(sql);
//}
jdbcTemplate.execute("INSERT INTO TEST VALUES (4, '황희찬')");
String ab = jdbcTemplate.queryForObject("SELECT NAME FROM TEST WHERE id=?", String.class, "4");
System.out.println("조회값:"+ab);
}
}
저는 기존에 test라는 테이블을 이미 생성해 놓았습니다. jdbcTemplate사용법은 기본적으로 jdbcTemplate.execute(sql문) 을 하면 작성된 sql문을 실행해줍니다. jdbcTemplate.queryForObject는 단건의 데이터를 조회할때 사용합니다. 이렇게 실행했을때 정상적으로 데이터가 insert되고 조회되면 정상적으로 JAVA와 DB간 연동이 된 것 입니다.
'BACK-END > JAVA' 카테고리의 다른 글
Spring Boot : application.properties 대신 application.yml 사용하기 (0) | 2022.12.19 |
---|---|
STS : lombok(롬복) 설치 후 사용하기 (0) | 2022.12.15 |
Spring Boot Appliction이 구동 될 때 실행되는 코드 추가하기 (0) | 2022.12.07 |
Java list 동일한 크기로 분할 나누기 (Guava) (0) | 2022.12.05 |
댓글