Spring_DB

song·2023년 11월 1일

Spring

목록 보기
13/19

1. 데이터베이스 연결

  • Connection conn = ds.getConnection();

2. sql문 생성

  • String sql = "insert into user_info values (?, ?, ?, ?, ?, ?, now())";
    • 위 sql에 ? 부분에 값넣음.
    • parameterIndex 쓴 순서대로 값 넣어짐. 코드 순서 바꿔도 Index값으로 넣어짐.
  • PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, user.getId());
    pstmt.setString(2, user.getPw());
    pstmt.setString(3, user.getName());
    pstmt.setString(4, user.getEmail());
    pstmt.setDate(5, new java.sql.Date(user.getBirth().getTime()));
    pstmt.setString(6, user.getSns());
    • date의 타입이 util.date(java에서 사용하는 date)가 아니라 sql.date(db에서 사용하는 date)라서 변환 필요.
    • user.getBirth()값을 .getTime() 밀리초로 바꿔서 java.sql.Date값으로 변환.

3. sql문 실행

  • db가서 실행.
    • select 할 때는 executeQuery
    • 나머지 할 때는 executeUpdate
  • int rowCount = pstmt.executeUpdate();
    • 결과 개수 받을 수 있다.
  • ResultSet rs = pstmt.executeUpdate();
    • 결과값을 가져올 수 있다.
    • rs.next() :
    • rs.getString(컬럼번호) : 가져올 타입적고(getString) 가져올 컬럼번호를 적으면 된다.

4. 리소스 반납 (close)

  • pstmt.close();
  • conn.close();

소스코드

package com.bitstudy.app;

import org.junit.Test;
import org.junit.runner.Result;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import static org.junit.Assert.*;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class Ex02_2_DBConnectionTest2Test {

    @Autowired
    DataSource ds;

    public void deleteAll() throws Exception{
        // 데이터베이스 연결
        Connection conn = ds.getConnection();
        // sql문 생성
        String sql = "delete from user_info";
        // sql문 실행
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.executeUpdate();
        // 리소스 반환
        pstmt.close();
        conn.close();
    }

    @Test
    public void insertUserTest() throws Exception{
        User user = new User("asdf10", "1234", "김개똥", "김개통@aaa.com", new Date(), "facebook", new Date());

        int rowCount = insertUser(user);

        assertTrue(rowCount == 1);
    }

    public int insertUser(User user) throws SQLException {
        // 데이터베이스 연결
        Connection conn = ds.getConnection();
        // sql문 생성
        String sql = "insert into user_info values (?, ?, ?, ?, ?, ?, now())";
        // sql문 실행
        // 위 sql에 ? 부분에 값넣음.
        // parameterIndex 쓴 순서대로 값 넣어짐. 코드 순서 바꿔도 Index값으로 넣어짐.
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, user.getId());
        pstmt.setString(2, user.getPw());
        pstmt.setString(3, user.getName());
        pstmt.setString(4, user.getEmail());
        // date의 타입이 util.date(java에서 사용하는 date)가 아니라 sql.date(db에서 사용하는 date)라서 변환 필요.
        // user.getBirth()값을 .getTime() 밀리초로 바꿔서 java.sql.Date값으로 변환.
        pstmt.setDate(5, new java.sql.Date(user.getBirth().getTime()));
        pstmt.setString(6, user.getSns());

        // select 할 때는 executeQuery
        // 나머지 할 때는 executeUpdate
        // db가서 실행.
        int rowCount = pstmt.executeUpdate();

        // 리소스 반환
        pstmt.close();
        conn.close();

        return rowCount;
    }

    @Test
    public void selectUserTest() throws Exception{
//        deleteAll();
        User user = selectUser("asdf");
    }
    public User selectUser(String id) throws SQLException {
        // 데이터베이스 연결
        Connection conn = ds.getConnection();
        // sql문 생성
        String sql = "select * from user_info where id=?";
        // sql문 실행
        // 위 sql에 ? 부분에 값넣음.
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, id);
        ResultSet rs = pstmt.executeQuery();

        if(rs.next()){
            User user = new User();

            user.setId(rs.getString(1));
            user.setPw(rs.getString(2));
            user.setName(rs.getString(3));
            user.setEmail(rs.getString(4));
            user.setBirth(new Date(rs.getDate(5).getTime()));
            user.setSns(rs.getString(6));
            user.setJoinDate(new Date(rs.getDate(7).getTime()));

            return user;
        }
        return null;
    }
}
profile
계속 나아가기

0개의 댓글