티스토리 뷰
예외처리 없이 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를 안해주면 에러가 생긴다. 하나 만드록 클로즈 클로즈 해야함.
댓글