티스토리 뷰

예외처리 없이 DB처리

JdbcTemplate

package ex3;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcTemplate {

	public static Connection getConnection() {
		Connection conn = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(
					"jdbc:oracle:thin:@127.0.0.1:1521:XE", "edu", "1234");
			conn.setAutoCommit(false); //자동커밋해제
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	public static boolean isConnection(Connection conn) {
		boolean valid = true;
		try {
			if (conn == null || conn.isClosed())
				valid = false;
		} catch (SQLException e) {
			valid = false;
			e.printStackTrace();
		}
		return valid;
	}

	public static void commit(Connection conn) {
		if (isConnection(conn)) {
			try {
				conn.commit();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public static void rollback(Connection conn) {
		if (isConnection(conn)) {
			try {
				conn.rollback();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	// Connection객체 닫기
	public static void close(Connection conn) {
		if (isConnection(conn)) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	// Statement or PreparedStatement객체 닫기
	public static void close(Statement stmt) {
		try {
			if (stmt != null)
				stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// ResultSet 객체 닫기
	public static void close(ResultSet rs) {
		try {
			if (rs != null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

User

package ex3;

//기본생성자, 인자4개 받는 생성자, getter & setter
public class User {
	private int num;
	private String name;
	private String phone;
	private String addr;
	
	public User() {
		super();
	}
	public User(int num, String name, String phone, String addr) {
		super();
		this.num = num;
		this.name = name;
		this.phone = phone;
		this.addr = addr;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
}

UserMain

package ex3;

import java.sql.SQLException;
import java.util.Scanner;

public class UserMain {
	Scanner sc=null;
	UserController control=null;
	User entity=null;
	
	public UserMain() {
		sc=new Scanner(System.in);
		control=new UserController();
		entity=new User();
	}
	
	public void menu(){
		int n=0;
		String name=null, phone=null, addr=null;
		
		while(true) {
			System.out.print("1.전체 2.추가 3.수정 4.삭제 5.검색 6.종료\n선택하시오(1-6):");
			n=sc.nextInt();
			
			switch(n) {
				case 1:
					control.listSQL();
					break;
				case 2:
					System.out.print("이름을 입력하시오:"); entity.setName(sc.next());
					System.out.print("전화를 입력하시오:"); entity.setPhone(sc.next());
					System.out.print("주소를 입력하시오:"); entity.setAddr(sc.next());
					control.insertSQL(entity);
					break;
				case 3:
					System.out.print("수정할 사람을 입력하시오:"); name=sc.next();
					if(control.searchSQL(name)) {
						System.out.print("바뀐 전화번호를 입력하시오:"); phone=sc.next();
						System.out.print("바뀐 주소를 입력하시오:");    addr=sc.next();
					}
					control.updateSQL(name, phone, addr);
					break;
				case 4:
					System.out.print("삭제할 사람을 입력하시오:"); name=sc.next();
					control.deleteSQL(name);
					break;
				case 5:
					System.out.print("찾는 사람을 입력하시오:"); name=sc.next();
					control.searchSQL(name);
					break;
				case 6:
					sc.close();
					System.exit(0);
				default:
					System.out.println("다시 입력하시오");
					continue;
			}
		}
	}
	public static void main(String[] args){
		new UserMain().menu();
	}
}
/*
1.전체 2.추가 3.수정 4.삭제 5.검색 6.종료
선택하시오(1-6):3
찾는 사람을 입력하시오:kim
1  kim   010-1111-1111   서울


1.전체 2.추가 3.수정 4.삭제 5.검색 6.종료
선택하시오(1-6):3
수정할 사람을 입력하시오:kang
4	kang	010-9999-9090	김해

바뀐 전화번호 입력하시오: 010-0000-0000
바뀐 주소를 입력하시오: 남해
kang님의 데이터가 수정되었습니다

1.전체 2.추가 3.수정 4.삭제 5.검색 6.종료
선택하시오(1-6):4
삭제할 사람을 입력하시오:kang
kang님 데이터를 삭제하였습니다.

*/

/* [프로젝트 작성순서]
1. 화면설계
2. 데이터베이스(테이블생성)
3. 엔티티생성(User.java)
4. 화면코딩(UserMain.java)
5. UserController -> UserDao -> UserView

추가하기 -> 전체보기 -> 수정하기 or 삭제하기
*/

UserView

package ex3;

import java.util.List;

public class UserView {
	
	public void insertSQL(int n) {
		if(n > 0) {
			System.out.println(n + "건의 데이터를 추가 했습니다");
		}else {
			System.out.println("데이터를 추가하지 못했습니다");
		}
	}

	public void listSQL(List<User> list) {
		if(list != null) {
			for(User ob: list) {
				System.out.print(ob.getNum()+"\t");
				System.out.print(ob.getName()+"\t");
				System.out.print(ob.getPhone()+"\t");
				System.out.println(ob.getAddr());
			}
		}		
	}

	public void searchSQL(User ob) {
		if(ob == null) {
			System.out.println("찾는 사람이 없습니다");
		}else {
			System.out.print(ob.getNum()+"\t");
			System.out.print(ob.getName() +"\t");
			System.out.print(ob.getPhone() +"\t");
			System.out.println(ob.getAddr());
		}
	}

	public void updateSQL(String name, int n) {
		if(n > 0) {
			System.out.println(name + "님의 데이터가 수정되었습니다");
		}else {
			System.out.println("데이터를 수정하지 못했습니다");
		}	
	}
	public void deleteSQL(String name, int n) {
		if(n > 0) {
			System.out.println(name + "님의 데이터를 삭제 하였습니다");
		}else {
			System.out.println("데이터를 삭제하지 못했습니다");
		}	
	}
}

UserDao

package ex3;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import static ex3.JdbcTemplate.getConnection;
import static ex3.JdbcTemplate.close;
import static ex3.JdbcTemplate.commit;
import static ex3.JdbcTemplate.rollback;

public class UserDao {
	//추가하기--------------------------------------
	public int insertSQL(User entity) {
		Connection conn=getConnection(); // or  Connection conn=JdbcTemplate.getConnection();
		// final 또는 static 처리시 이탤릭체 처리 됨 getConnection();
		
		Statement stmt=null;
		int n=0;
		
		try { //대문자 바꾸기 ctrl + shift + x 
			String sql="INSERT INTO USERDB(NUM,NAME,PHONE,ADDR) VALUES(NUM_SEQ.NEXTVAL,'"
					    + entity.getName() + "','" + entity.getPhone() + "','" 
					    + entity.getAddr() +"')";
			System.out.println("SQL:" + sql);
			stmt=conn.createStatement();
			n = stmt.executeUpdate(sql);
			
			if(n > 0) {
				commit(conn);
			}
			
		}catch(SQLException e) {
			e.printStackTrace();
			rollback(conn);
		}finally {
			close(stmt);    //or  JdbcTemplate.close(stmt);
			close(conn);    //or  JdbcTemplate.close(conn);
		}
		return n;
	}
	//전체보기--------------------------------------
	public List<User> listSQL() {
		
		return null;
	}
	//검색하기--------------------------------------
	public User searchSQL(String name) {
		
		return null;
	}
	//수정하기--------------------------------------
	public int updateSQL(String name, String phone, String addr) {
		
		return 0;
	}
	//삭제하기--------------------------------------
	public int deleteSQL(String name) {
		
		return 0;
	}

}

UserController

package ex3;

import java.sql.SQLException;
import java.util.List;

// View와 Model에서 중간처리하는 역할
public class UserController {
	UserDao dao=null;
	UserView view=null;
	
	public UserController() {
		dao=new UserDao();
		view=new UserView();
	}
	
	public void insertSQL(User entity)  {
		int n=dao.insertSQL(entity);
		view.insertSQL(n);
	}
	
	public void listSQL() {
		List<User> list=dao.listSQL();
		view.listSQL(list);
	}

	public boolean searchSQL(String name) {
		User ob=dao.searchSQL(name);
		view.searchSQL(ob);		
		
		return (ob != null)?true:false;
	}

	public void updateSQL(String name, String phone, String addr){
		int n=dao.updateSQL(name,phone,addr);
		view.updateSQL(name, n);		
	}
	
	public void deleteSQL(String name){
		int n=dao.deleteSQL(name);
		view.deleteSQL(name, n);
	}
}

 

 

싱글톤 패턴

 메모리를 복수번 할당하지 않고 한번만 할당해서 사용하는 것

elfinlas.github.io/2019/09/23/java-singleton/

 

Java에서 싱글톤(Singleton) 패턴을 사용하는 이유와 주의할 점

Java에서 Singleton 패턴이란?Singleton(이하 싱글톤) 패턴은 자바에서 많이 사용한다.먼저 싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자

elfinlas.github.io

 

커넥션 개체를 (고구마 운반할 차를 한대만 한 구입하는 것처럼) 하나만 만들어서

공유하는 것(Static으로 설정한 이유)

 

close를 안해주면 에러가 생긴다. 하나 만드록 클로즈 클로즈 해야함.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함