--------------------------------
DI 테스트2
- 콘솔 프로젝트
- 오라클에 대해서 로컬 서버와 원격 서버를 동시 사용할 수 있도록 설정.
1. 프로그램 구성
//Member.java -> 자료형 클래스
//DAO.java -> 인터페이스
//LocalDAO.java -> 클래스. DAO 인터페이스 구현.
//RemoteDAO.java -> 클래스. DAO 인터페이스 구현.
//MemberDAO.java -> DAO 객체의 list() 메소드 호출 클래스. DAO 인터페이스를 구현한 클래스에 대해서 의존 관계 설정.
//Main.java -> main() 메소드
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
2. 프로젝트 환경 설정
- Java Project 생성
- 프로젝트 선택>Build Path>Configure Build Path...>Libraries탭 선택>Add External JARS... 선택
- 아래 .jar 파일 선택
경로명1 : C:\spring-docs\spring-framework-3.0.2.RELEASE\dist
파일명 :
org.springframework.asm-3.0.2.RELEASE.jar
org.springframework.beans-3.0.2.RELEASE.jar
org.springframework.context-3.0.2.RELEASE.jar
org.springframework.core-3.0.2.RELEASE.jar
org.springframework.expression-3.0.2.RELEASE.jar
경로명2 : C:\spring-dependencies\org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1
파일명 :
com.springsource.org.apache.commons.logging-1.1.1.jar
ojdbc6.jar 추가할 것.
3. 데이터베이스 준비
CREATE TABLE memberList(
mid NUMBER --PK
,name VARCHAR2(30)
,telephone VARCHAR2(30)
);
CREATE SEQUENCE memberListSeq;
ALTER TABLE memberList
ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);
INSERT INTO memberList (mid, name, telephone)
VALUES (memberListSeq.nextval, 'kim', '010-123-1234');
COMMIT;
SELECT mid, name, telephone
FROM memberList
ORDER BY mid;
SELECT COUNT(mid) AS count FROM memberList;
4. 프로그램 소스 코드
//Member.java -> 자료형 클래스
package com.test;
public class Member {
private String mid, name, telephone ;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
}
//DAO.java -> 인터페이스
package com.test;
import java.sql.SQLException;
import java.util.ArrayList;
public interface DAO {
public ArrayList<Member> list() throws SQLException, ClassNotFoundException;
}
//LocalDAO.java -> 클래스. DAO 인터페이스 구현.
package com.test;
import java.sql.*;
import java.util.ArrayList;
public class LocalDAO implements DAO {
@Override
public ArrayList<Member> list() throws SQLException, ClassNotFoundException {
ArrayList<Member> result = new ArrayList<Member>();
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:사용자아이디/패스워드@localhost:1521:xe";
Connection conn = DriverManager.getConnection(url);
String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery(sql);
while(rs.next()) {
Member member = new Member();
member.setMid(rs.getString("mid"));
member.setName(rs.getString("name"));
member.setTelephone(rs.getString("telephone"));
result.add(member);
}
rs.close();
pstmt.close();
conn.close();
return result;
}
}
//RemoteDAO.java -> 클래스. DAO 인터페이스 구현.
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class RemoteDAO implements DAO {
@Override
public ArrayList<Member> list() throws SQLException, ClassNotFoundException {
ArrayList<Member> result = new ArrayList<Member>();
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:사용자아이디/패스워드@아이피주소:1521:xe";
Connection conn = DriverManager.getConnection(url);
String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery(sql);
while(rs.next()) {
Member member = new Member();
member.setMid(rs.getString("mid"));
member.setName(rs.getString("name"));
member.setTelephone(rs.getString("telephone"));
result.add(member);
}
rs.close();
pstmt.close();
conn.close();
return result;
}
}
//MemberDAO.java -> DAO 객체의 list() 메소드 호출 클래스. DAO 인터페이스를 구현한 클래스에 대해서 의존 관계 설정.
package com.test;
public class MemberDAO {
private DAO dao;
public void setDao(DAO dao) {
this.dao = dao;
}
public void list() {
try {
for (Member member : dao.list()) {
System.out.printf("%s %s %s %n"
, member.getMid()
, member.getName()
, member.getTelephone());
}
}catch(Exception e){
e.printStackTrace();
}
}
}
//Main.java -> main() 메소드
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("applicationContext.xml");
MemberDAO dao
= context.getBean("memberDAO", MemberDAO.class);
dao.list();
}
}
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="localDAO" class="com.test.LocalDAO"></bean>
<bean id="remoteDAO" class="com.test.RemoteDAO"></bean>
<bean id="memberDAO" class="com.test.MemberDAO">
<property name="dao">
<ref bean="remoteDAO" />
</property>
</bean>
</beans>
--------------------------------
DI 테스트3
- 콘솔 프로젝트
- 오라클에 대해서 로컬 서버와 원격 서버를 동시 사용할 수 있도록 설정.
1. 프로그램 구성
//Member.java -> 자료형 클래스
//Conn.java -> 인터페이스
//LocalConn.java -> 클래스. Conn 인터페이스 구현.
//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
//MemberDAO2.java -> Conn 객체에 대해서 의존 관계 설정.
//Main.java -> main() 메소드
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
2. 프로그램 소스 코드
//Member.java -> 자료형 클래스
package com.test;
public class Member {
private String mid, name, telephone ;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
}
//Conn.java -> 인터페이스
package com.test;
import java.sql.*;
public interface Conn {
Connection getConn()
throws ClassNotFoundException, SQLException;
void close() throws SQLException;
}
//LocalConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;
import java.sql.*;
public class LocalConn implements Conn {
//Connection(데이터베이스 연결) 객체 저장용 변수 선언
private static Connection conn = null;
//1. 데이터베이스 연결 과정
public Connection getConn()
throws ClassNotFoundException, SQLException {
//Connection 객체가 생성되지 않은 경우에만
//신규 객체를 생성한다. -> SingleTone
if (conn == null) {
//데이터베이스 연결 액션(로그인 과정)
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:username/password@211.63.89.83:1521:xe";
conn = DriverManager.getConnection(url);
}
return conn;
}
//2. 데이터베이스 연결 종료 과정
public void close() throws SQLException {
if (conn != null) {
conn.close();
}
conn = null; //멤버변수를 NULL 값으로 초기화
}
}
//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;
import java.sql.*;
public class RemoteConn implements Conn {
//Connection(데이터베이스 연결) 객체 저장용 변수 선언
private static Connection conn = null;
//1. 데이터베이스 연결 과정
public Connection getConn()
throws ClassNotFoundException, SQLException {
//Connection 객체가 생성되지 않은 경우에만
//신규 객체를 생성한다. -> SingleTone
if (conn == null) {
//데이터베이스 연결 액션(로그인 과정)
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:username/password@211.63.89.72:1521:xe";
conn = DriverManager.getConnection(url);
}
return conn;
}
//2. 데이터베이스 연결 종료 과정
public void close() throws SQLException {
if (conn != null) {
conn.close();
}
conn = null; //멤버변수를 NULL 값으로 초기화
}
}
//MemberDAO2.java -> Conn 객체에 대해서 의존 관계 설정.
package com.test;
import java.sql.*;
import java.util.*;
public class MemberDAO2 {
//커넥션 객체에 대한 의존 객체 주입 준비
//LocalConn, RemoteConn 클래스의 객체
private Conn conn;
public void setConn(Conn conn) {
this.conn = conn;
}
public ArrayList<Member> list() {
ArrayList<Member> result = new ArrayList<Member>();
Connection conn = null;
PreparedStatement pstmt = null;
try {
//Connection 객체 얻는 방법
conn = this.conn.getConn();
String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
Member member = new Member();
member.setMid(rs.getString("mid"));
member.setName(rs.getString("name"));
member.setTelephone(rs.getString("telephone"));
result.add(member);
}
rs.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try{
if (pstmt != null) {
pstmt.close();
}
//연결 종료시 conn.close(); 사용하면 안됨.
this.conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
return result;
}
}
//Main.java -> main() 메소드
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("applicationContext.xml");
MemberDAO2 dao
= context.getBean("memberDAO2", MemberDAO2.class);
for (Member member : dao.list()) {
System.out.printf("%s %s %s %n"
, member.getMid()
, member.getName()
, member.getTelephone());
}
}
}
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="localConn" class="com.test.LocalConn"></bean>
<bean id="remoteConn" class="com.test.RemoteConn"></bean>
<bean id="memberDAO2" class="com.test.MemberDAO2">
<property name="conn">
<ref bean="localConn"></ref>
</property>
</bean>
</beans>
--------------------------------
DI 테스트4
- 콘솔 프로젝트
- 오라클에 대해서 로컬 서버와 원격 서버를 동시 사용할 수 있도록 설정.
1. 기능 구현
- 이름, 전화번호를 입력 받아서 데이터베이스에 저장
- 번호, 이름, 전화번호를 콘솔에 출력
2. 화면 구성
이름 전화번호(x exit)?kim 010-123-1234
1명의 회원이 추가되었습니다.
이름 전화번호(x exit)?x
------------------
전체 회원수 : 1명
------------------
번호 이름 전화번호
1 kim 010-123-1234
------------------
3. 데이터베이스 준비 (local, remote 오라클 서버에 동시에 설정)
CREATE TABLE memberList (
mid NUMBER --PK
,name VARCHAR2(30)
,telephone VARCHAR2(30)
);
CREATE SEQUENCE memberListSeq;
ALTER TABLE 테이블이름
ADD CONSTRAINT 제약이름 제약종류(제약대상);
ALTER TABLE 테이블이름
DROP CONSTRAINT 제약이름;
ALTER TABLE memberList
ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);
INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, 'kim', '010-123-1234');
ROLLBACK;
SELECT mid, name, telephone FROM memberList;
SELECT COUNT(mid) AS count FROM memberList;
4. 프로그램 구성
//Member.java -> 자료형 클래스
//Conn.java -> 인터페이스
//LocalConn.java -> 클래스. Conn 인터페이스 구현.
//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
//MemberDAO.java -> Conn 객체에 대해서 의존 관계 설정.
//Main.java -> main() 메소드
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
//문제) 이름, 전화번호를 입력 받아서 데이터베이스에 저장하는 액션 추가할 것.
5. 프로그램 구성
//Member.java -> 자료형 클래스
package com.test;
public class Member {
private String mid, name, telephone ;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
}
//Conn.java -> 인터페이스
package com.test;
import java.sql.Connection;
import java.sql.SQLException;
public interface Conn {
public Connection getConnection() throws SQLException, ClassNotFoundException;
}
//LocalConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class LocalConn implements Conn {
@Override
public Connection getConnection() throws SQLException,
ClassNotFoundException {
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:username/password@localhost:1521:xe";
conn = DriverManager.getConnection(url);
return conn;
}
}
//RemoteConn.java -> 클래스. Conn 인터페이스 구현.
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class RemoteConn implements Conn {
@Override
public Connection getConnection() throws SQLException,
ClassNotFoundException {
Connection conn = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:username/password@211.63.89.85:1521:xe";
conn = DriverManager.getConnection(url);
return conn;
}
}
//MemberDAO.java -> Conn 객체에 대해서 의존 관계 설정.
package com.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class MemberDAO {
private Conn conn;
public void setConn(Conn conn) {
this.conn = conn;
}
public ArrayList<Member> list() throws SQLException, ClassNotFoundException {
ArrayList<Member> result = new ArrayList<Member>();
Connection connection = conn.getConnection();
String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";
PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery(sql);
while(rs.next()) {
Member member = new Member();
member.setMid(rs.getString("mid"));
member.setName(rs.getString("name"));
member.setTelephone(rs.getString("telephone"));
result.add(member);
}
rs.close();
pstmt.close();
connection.close();
return result;
}
public int count() throws SQLException, ClassNotFoundException {
int result = 0;
Connection connection = conn.getConnection();
String sql = "SELECT COUNT(*) AS count FROM memberList";
PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
result = rs.getInt("count");
}
rs.close();
pstmt.close();
connection.close();
return result;
}
public int add(Member member) throws SQLException, ClassNotFoundException {
int result = 0;
Connection connection = conn.getConnection();
String sql = "INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, ?, ?)";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, member.getName());
pstmt.setString(2, member.getTelephone());
result = pstmt.executeUpdate();
pstmt.close();
connection.close();
return result;
}
}
//Main.java -> main() 메소드
package com.test;
import java.util.Scanner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("applicationContext.xml");
MemberDAO dao
= context.getBean("memberDAO", MemberDAO.class);
Scanner sc = new Scanner(System.in);
do {
System.out.print("이름 전화번호(x exit)?");
String name = sc.next();
if (name.equalsIgnoreCase("x")) {
break;
}
String telephone = sc.next();
Member member = new Member();
member.setName(name);
member.setTelephone(telephone);
try {
dao.add(member);
System.out.println("회원이 추가 되었습니다.");
}catch(Exception e){
System.out.println(e.toString());
}
}while(true);
sc.close();
try {
System.out.println("-----------------------");
System.out.printf("전체 인원수 : %d 명 %n"
, dao.count());
System.out.println("-----------------------");
for( Member member : dao.list()){
System.out.printf("%s %s %s %n"
, member.getMid()
, member.getName()
, member.getTelephone());
}
} catch (Exception e) {
}
}
}
//applicationContext.xml -> 스프링 환경 설정 파일. (src 폴더 하위에 생성)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="localConn" class="com.test.LocalConn"></bean>
<bean id="remoteConn" class="com.test.RemoteConn"></bean>
<bean id="memberDAO" class="com.test.MemberDAO">
<property name="conn">
<ref bean="localConn" />
</property>
</bean>
</beans>
----------------------------------------
'Spring' 카테고리의 다른 글
Spring 기본 설정방법! (0) | 2015.07.01 |
---|---|
Spring 모듈 다운로드~ (0) | 2015.07.01 |
04일차_Spring MVC, 데이터송수신, 회원관리.txt (0) | 2015.07.01 |
03일차_DI테스트 (0) | 2015.06.30 |
01일차_DI 설명 (0) | 2015.06.30 |