먼저 관리자에서

/*유저확인*/
select username from dba_users;

/*유저생성*/
create user java identified by pass;

/*유저권한*/
grant connect, resource, dba to java;

유저를 생성해주고, 권한을 주고 java를 생성한다.

java테이블 유저확인을 해보면 java 가 생긴것을 확인할 수 있다.

java 새접속을 만들고 이름과 패스워드를 설정해준다. 생성했을때 패스워드를입력해준다.

/*주소관리 테이블 생성*/
create table tbl_address (
   sno char(2) primary key ,
   sname varchar(20),
   saddress varchar(200),
   stel varchar(20)
);

/*테이블 내용확인*/
select * from tbl_address;

/*테이블에 테이터 입력*/
insert into tbl_address
values('30', '홍길동', '인천', '110');

insert into tbl_address(sno, sname, saddress, stel)
values('20', '심청이', '서울', '112');

/*테이블 데이터 수정*/
update tbl_address set sname='김길동' where sno='30'; 



select * from tbl_address;
select * from tbl_score;


drop table tbl_score;

create table tbl_score(
  sno char(2) not null,
  sdate char(10) default 2021-01-01,
  kor int default 0,
  eng int default 0,
  math int default 0,
  primary key(sno,sdate),
  foreign key(sno) references tbl_address(sno)
);
  
insert into tbl_score(sno, sdate, kor, eng, math)
values('10', '2021-12-01',90, 90, 90);
insert into tbl_score(sno, sdate, kor, eng, math)
values('10', '2021-12-30',100, 95, 95);
insert into tbl_score(sno, sdate, kor, eng, math)
values('20', '2021-12-30',80, 90, 80);
  
  select * from tbl_score;
  
  select s.sno, sdate, sname, kor, eng, math, (kor+math+eng) tot, (kor+math+eng)/3 avg
  from tbl_address a, tbl_score s
  where a.sno=s.sno and a.sno = 10
  order by kor desc;

tbl_address의 테이블 내용을 확인하면 내가 입력한대로 밑의 사진처럼 나오는걸 볼수있다. 어드레스

tbl_score의 테이블내용 스코어


그럼 db를 가지고 java 에서 프로그램을 짜보자.

일단 오라클의 jar을 내가 쓰는 프로젝트 안으로 가져와야한다. 내가 쓸 프로젝트를 누르고 -> Bulid path-> libraries ->add external jars-> 오라클폴더 -> app->oracle->product -> 11.2.0 -> server->jdbc->lib -> ojdbc6.jar 을 선택한다.

Database class


import java.sql.*;

public class Database {
	public static Connection CON;
		static {
		      try {
		         Class.forName("oracle.jdbc.driver.OracleDriver");
		         String url="jdbc:oracle:thin:@localhost:1521:xe";
		         CON = DriverManager.getConnection(url,"java","0000");
//		         System.out.println("접속성공");
		      }catch(Exception e) {
		         System.out.println("접속오류:" + e.toString());
		      }
		}
}

처음에 접속이 되는지 확인하기 위해서 주석되있는부분을 달았다. 메인에서 Connection CON=Database.CON; 를 찍어보면 접속이 되는지안되는지 확인가능하다.

Address class

public class Address {
	private String sno;
	private String sname;
	private String stel;
	private String saddress;
	
	public String getSno() {
		return sno;
	}
	public void setSno(String sno) {
		this.sno = sno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public String getStel() {
		return stel;
	}
	public void setStel(String stel) {
		this.stel = stel;
	}
	public String getSaddress() {
		return saddress;
	}
	public void setSaddress(String saddress) {
		this.saddress = saddress;
	}
	
	@Override
	public String toString() {
		return "address [sno=" + sno + ", sname=" + sname + ", stel=" + stel + ", saddress=" + saddress + "]";
	}
}

변수를 생성하고, getters setters 로 가져오는것은 전과 동일하다. tostring은 아무것도 고치지않아도된다.

AddressDAO class

import java.sql.*;
import java.util.*;
public class AddressDAO {
	

	//주소입력
	public void insert(Address vo) {
		try {
			String sql= "insert into tbl_address(sno,sname,stel,saddress) values(?,?,?,?)";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ps.setString(1, vo.getSno());
			ps.setString(2, vo.getSname());
			ps.setString(3, vo.getStel());
			ps.setString(4, vo.getSaddress());
			ps.execute();
			System.out.println("주소등록완료!");
		}catch (Exception e) {
			System.out.println("insert 에러:" +e.toString());
		}
	}
	
	
	//목록출력
	public ArrayList<Address> list() {
		ArrayList<Address> array = new ArrayList<>();
		try {
			String sql = "select * from tbl_address";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			while(rs.next()) {
				Address vo = new Address();
				vo.setSno(rs.getString("sno"));
				vo.setSname(rs.getString("sname"));
				vo.setStel(rs.getString("stel"));
				vo.setSaddress(rs.getString("saddress"));
				array.add(vo);
			}
		}catch (Exception e) {
			System.out.println("list 에러:" +e.toString());
		}
		
		return array;
	}
	
	//주소 검색
	public Address read(String sno) {
		Address vo = new Address();
		try {
			String sql = "select * from tbl_address where sno=?";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ps.setString(1, sno);
			ResultSet rs = ps.executeQuery();
			if(rs.next()) {
				vo.setSno(rs.getString("sno"));
				vo.setSname(rs.getString("sname"));
				vo.setStel(rs.getString("stel"));
				vo.setSaddress(rs.getString("saddress"));
			}
		}catch (Exception e) {
			System.out.println("read 에러:" +e.toString());
		}
		return vo;
	}
	
	//주소삭제
	public void delete(String sno) {
		try {
			String sql= "delete from tbl_address where sno=?";
			PreparedStatement ps = Database.CON.prepareStatement(sql);
			ps.setString(1, sno);
			ps.execute();
			System.out.println("주소삭제완료!");
		}catch (Exception e) {
			System.out.println("delete 에러:" +e.toString());
		}
	}
}

훨씬 간단해지고 프로그램 짜기가 쉬워졌다. 아직 정확하게 어떤역할인지 헷갈리기도하고 낯설다. 외워야지뭐 ..ㅎㅎ

Main


import java.sql.Connection;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
//		Connection CON=Database.CON;
		Scanner s = new Scanner(System.in);
		boolean run =true;
		Address avo = new Address();
		AddressDAO adao = new AddressDAO();
			while(run) {
				System.out.println("┌───────────────────────────────────────────┐");
				System.out.print("│1.주소등록  ");
				System.out.print("2.주소목록  ");
				System.out.print("3.주소검색  ");
				System.out.print("4.주소삭제  ");
				System.out.print("0.종료    │\n");
				System.out.println("└───────────────────────────────────────────┘");
				System.out.print("선택>");
				String menu = s.nextLine();
				switch(menu) {
				case "1": 
					System.out.print("학번>"); avo.setSno(s.nextLine());
					System.out.print("성명>"); avo.setSname(s.nextLine());
					System.out.print("전화>"); avo.setStel(s.nextLine());
					System.out.print("주소>"); avo.setSaddress(s.nextLine());
					adao.insert(avo);
					break;
				case "2": 
					ArrayList<Address> array=adao.list();
					for(Address a:array) {
						System.out.printf("%s\t%s\t%s\t%s\n",
								a.getSno(),a.getSname(),a.getStel(),a.getSaddress());
					}
					break;
				case "3": 
					System.out.print("학번>"); String sno = s.nextLine();
					Address vo = adao.read(sno);
					if(vo.getSname()==null) {
						System.out.println("해당학생이 없습니다.");
					}else {
						System.out.println("성명:" +vo.getSname());
						System.out.println("전화:" +vo.getStel());
						System.out.println("주소:" +vo.getSaddress());
					}
					break;
				case "4": 
					System.out.print("삭제할 학번>"); sno = s.nextLine();
					vo = adao.read(sno);
					if(vo.getSname()==null) {
						System.out.println("해당학생이 없습니다.");
					}else {
						System.out.println("성명:" +vo.getSname());
						System.out.println("전화:" +vo.getStel());
						System.out.println("주소:" +vo.getSaddress());
						System.out.print("삭제하실래요?(y/n)>");
						String sel = s.nextLine();
						if(sel.equals("Y")||sel.equals("y")) {
							adao.delete(sno);
						}
					}
					break;
				case "0":
					run =false;
					break;
				default: 
					System.out.println("0~4메뉴를 선택하세요!");
				}
			}
			System.out.println("프로그램종료!");
	}
}

메인에 프로그램은 거의 똑같은것 같다.

출력해보면 이순신

이클립스에서 주소를 등록하고 검색,삭제할수있고 db에 저장된다. 주소목록도 잘 찍히는걸 볼수있다.

태그:

카테고리:

업데이트:

댓글남기기