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;
}
}