💡 과제 주제
Kakao Book Open API를 활용하여 책을 검색하고, 검색한 책 데이터를 데이터베이스에 저장하는 기능을 제공하는
Java Application 개발 할 수 있다.
1차 과제에서 DB 활용이 추가된 과제이다.
Java로만 구성된 애플리케이션에 JDBC 연결은 오랜만이라 그 부분만 정리하였다.
💡 JDBC 연결
Maven, Gradle 없이 연결하기
1. java의 sql package 로드
import java.sql.*;
2. MySQL Driver 로드
Class.forName('com.mysql.cj.jdbc.Driver');
- Class.forName는 클래스를 로드해주는 역할이다. com.mysql.cj.jdbc.Driver란 MySQL Driver를 로드해준다.
3. MySQL 과 Connection
Connection conn = DriverManager.getconnection("dburl,dbUser,dbpasswd");
- DriverManager는 JDBC 드라이버를 통해 커넥션을 만드는 역할을 한다.
Gradle 로 연결하기
1. 연결DB의 JDBC Driver 를 Dependency에 등록하기
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
...
implementation group: 'mysql', name:'mysql-connector-java', version:'8.0.28'
// mysql JDBC driver 외부 라이브러리
// 내가 사용하는 mysql 버전과 맞춰줘야한다.
....
}
test {
useJUnitPlatform()
}
2. 위 과정의 3번 과정을 진행하면 된다.
전체 코드
package common;
import java.sql.*;
import java.util.Properties;
public class JDBC_Connection {
//JDBC Connection
public static Connection getConnection() throws SQLException {
Properties properties = CommonUtils.getPropertiesFile("config.properties");
String db_url = properties.getProperty("db_url");
String db_id = properties.getProperty("db_id");
String db_pw = properties.getProperty("db_pw");
Connection conn = DriverManager.getConnection(db_url,db_id,db_pw);
System.out.println("Connection Success");
return conn;
}
//update, insert 시 close
public static void DBClose(PreparedStatement ps, Connection conn) throws SQLException{
if(ps == null){
ps.close();
}
if(conn == null){
conn.close();
}
}
//select 시 close
public static void DBClose(ResultSet rs, PreparedStatement ps, Connection conn) throws SQLException{
if(rs == null){
rs.close();
}
DBClose(ps,conn);
}
}
- 연결 메서드와 종료 메서드를 분리하여 구성하였다.
💡 연결된 Connection 으로 쿼리 작성
기본적으로 책검색이므로 Book 이라는 클래스가 구성되어 있다.
해당 과제에선 전체검색 과 인서트만 있으면 해결이 가능했다.
1. Select 문
public List<Book> getBooks() {
List<Book> list = new ArrayList<>();
try {
Connection conn = JDBC_Connection.getConnection(); // 1. DB 연결
String sql = "SELECT * FROM book order by title"; // 2. 실행할 SQL문 준비
PreparedStatement ps = conn.prepareStatement(sql);
// 3. SQL 실행하고 결과 가져옴
ResultSet rs = ps.executeQuery();
while (rs.next()) { // rs.next(): 레코드 한 줄씩 가져옴
long id = rs.getLong("id");
String title = rs.getString("title");
int price = rs.getInt("price");
int sale_price = rs.getInt("sale_price");
String publisher = rs.getString("publisher");
String isbn = rs.getString("isbn");
String authors = rs.getString("authors");
Book book = new Book(id, title, price, publisher, isbn, sale_price, authors.split(","));
list.add(book);
}
JDBC_Connection.DBClose(rs, ps, conn); // 4. SQL 실행 후 DB 연결 해제
} catch (Exception ex) {
System.out.println("DB 관련 오류: " + ex.getMessage());
}
return list;
}
2. Insert 문
public int addBook(Book book) {
int updateCount = 0;
try {
Connection conn = JDBC_Connection.getConnection(); // 1. DB 연결
String sql = "INSERT INTO book(title, price, publisher, isbn, sale_price, authors) VALUES(?, ?, ?, ?, ?, ?)"; // 2. 실행할 SQL문 준비
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, book.getTitle());
ps.setInt(2, book.getPrice());
ps.setString(3, book.getPublisher());
ps.setString(4, book.getIsbn());
ps.setInt(5, book.getSale_price());
ps.setString(6, CommonUtils.authorsToString(book.getAuthors()));
updateCount = ps.executeUpdate(); // SQL 실행하고 실행된 건 수를 반환한다.
JDBC_Connection.DBClose(ps, conn); // 4. SQL 실행 후 DB 연결 해제, INSERT문이므로 ps, conn 2가지만 닫아주면 된다.
} catch (Exception ex) {
System.out.println("DB 관련 오류: " + ex.getMessage());
}
return updateCount;
}
💡 후기
과제 자체 난이도는 높지않아 최대한 빠르게 해결할려고 노력했다. 그러다보니 객체지향을 지키며 개발이 되지 못한거 같다. 아마 피드백을 받으면 그 부분에 대한 지적이 있을거 같아 후에 수정작업이 필요한 거 같다.
'프로젝트&부트캠프 > 패스트캠퍼스x야놀자 백엔드과정' 카테고리의 다른 글
[패스트캠퍼스x야놀자 개발자벡엔드 부트캠프] 미니프로젝트를 마치며 정리할 내용 기록하기 (0) | 2023.12.06 |
---|---|
[패스트캠퍼스x야놀자 개발자벡엔드 부트캠프] 토이 프로젝트 1차 후기 (0) | 2023.09.15 |
[패스트캠퍼스x야놀자 개발자벡엔드 부트캠프] Java 과제 1 (0) | 2023.08.25 |