DB- 실습01
먼저 관리자에서
/*유저확인*/
select username from dba_users;
/*유저생성*/
create user java identified by pass;
/*유저권한*/
grant connect, resource, dba to 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에 저장된다. 주소목록도 잘 찍히는걸 볼수있다.
댓글남기기