CREATE TABLE member (
memId VARCHAR2(10) CONSTRAINT memId_pk PRIMARY KEY,
memPw VARCHAR2(10),
memMain VARCHAR2(15),
memPurcNum NUMBER(3) DEFAULT 0 CONSTRAINT memPurNum_ck CHECK (memPurcNum < 3)
);
CONSTRAINT (제약조건명) (제약조건)
ALTER TABLE member RENAME COLUMN memMain to memMail;
INSERT INTO member (memId, memPw, memMail) values ('b', 'bb', 'bbb@gmail.com');
DELETE FROM member WHERE memId='b';
SELECT * FROM member;
DROP TABLE member;
Java 언어를 이용한 DB와의 통신 방법
JDBC 만으로는 드라이버를 설정하고 DB와 연결하고 쿼리를 날리고 할당을 해제하는 과정을 매번 해줘야하는 번거로움과 중복이 발생한다.
개발자는 SQL문만 신경쓰면 된다.
DB 연결과 관련된 정보를 가지고 있는 DataSource는 스프링 또는 c3p0에서 제공하는 클래스를 이용할 수 있다.
Spring : org.springframework.jdbc.datasource.DriverManagerDataSource
c3p0 : com.mchange.v2.c3p0.DriverManagerDataSource
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5</version>
</dependency>
maven respository에는 없기에 oracle repsitory를 추가해놔야 함
private DriverManagerDataSource dataSource;
private JdbcTemplate template;
public MemberDAO() {
dataSource = new DriverManagerDataSource();
dataSource = setDriverClass(driver);
dataSource = setJdbcUrl(url);
dataSource = setUser(userId);
dataSource = setPassword(userPw);
template = new JdbcTemplate();
template.setDataSource(dataSource);
}
API에 따라 사용방법 차이가 있을 수 있음
public int memberInsert(Member member) {
int result = 0;
String sql = "INSERT INTO member (memId, memPw, memMail) values (?,?,?)";
result = template.update(sql, member.getMemId(), member.getMemPw(), member.getMemMail());
return result;
}
요청마다 매번 DB 연결을 새로 하는 것은 서버에 부하를 줄 수 있기 때문에 DB 연결을 미리 준비해놓고 사용하는 방법이다. 대표적인 커넥션풀을 지원하는 오픈소스는 아파치 DBCP와 c3p0가 있으며 spring, mybatis, hibernate 등과 통합되어 DataSource를 구성하여 사용한다.
<beans:bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<beans:property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<beans:property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<beans:property name="user" value="scott" />
<beans:property name="password" value="tiger" />
<beans:property name="maxPoolSize" value="200" />
<beans:property name="checkoutTimeout" value="60000" />
<beans:property name="maxIdleTime" value="1800" />
<beans:property name="idleConnectionTestPeriod" value="600" />
</beans:bean>