자바

sqlplus / as sysdba

-- 테이블 스페이스 생성

create tablespace 
java (테이블 스페이스 이름)
datafile 'D:\oracleDB\XE\java.dbf'  (데이터파일경로)
size 50m (초기사이즈)
autoextend on (자동증가)
next 10m (자동 증가 사이즈)
maxsize unlimited; (최대 사이즈)

 


create tablespace java datafile 'D:\oracleDB\XE\java.dbf'  size 50m autoextend on next 10m maxsize unlimited;

 

11g => 12c

-- 11g 와 호환

alter session set "_ORACLE_SCRIPT"=true;

-- 사용자 계정 만들기

create user 아이디 identified by 비번

default tablespace 테이블스페이스 이름

create user java identified by 1111 default tablespace java;


-- 유저 목록 보기

SELECT USERNAME FROM DBA_USERS

 

--  사용자에게 권한 부여

-- grant 권한 to 아이디;

-- connect : 로그인 권한

-- resource : 자원을 사용할 수 있는 권한

-- dba : db 관리자 권한

grant create view, connect, resource, dba  to java;

-- 점수 테이블
-- 토드 실행 F9
-- 실행
-- varchar , varchar2 : 최대 4000 byte
-- number  실수 값 지원
-- number() 괄호 안에 숫자를 넣으면 제한된 값
-- numer(3) 정수 3자리

create table score (

 student_no varchar2(20) primary key,
 name varchar2(20) not null,
 kor number(3) not null,    
 eng number(3) not null,
 mat number(3) not null

);

 

insert into score values('1' , 'kim' , 90, 80, 70);

select * from score;


commit;

 

select * from score;

update score set name ='김철수', kor=99, eng=88, mat=75
where student_no=1 ;

commit;

--레코드 삭제

delete from score where student_no=4;

commit;

 

 

oracle.prop

url=jdbc:oracle:thin:@localhost:1521:xe
driver=oracle.jdbc.OracleDriver
id=java
password=1111

 

class DBConnectManager

package common.db;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class DBConnectManager {

	public static Connection dbConn(){
		Connection conn=null;
		try{
			//db 접속 정보가 저장되 db.prop 파일을 로딩
			FileInputStream fis =new FileInputStream("db.prop");
			Properties prop=new Properties();
			prop.load(fis);
			String url=prop.getProperty("url");
			String id=prop.getProperty("id");
			String password=prop.getProperty("password");

			//mysql에 접속 처리
			conn=DriverManager.getConnection(url, id, password);
		}catch(Exception e){
			e.printStackTrace();
		}
		return conn;
	}
	
	
	public static Connection oracleConn(){
		Connection conn=null;
		try{
			//db 접속 정보가 저장되 db.prop 파일을 로딩
			FileInputStream fis =new FileInputStream("oracle.prop");
			Properties prop=new Properties();
			prop.load(fis);
			String url=prop.getProperty("url");
			String id=prop.getProperty("id");
			String password=prop.getProperty("password");

			//mysql에 접속 처리
			conn=DriverManager.getConnection(url, id, password);
		}catch(Exception e){
			e.printStackTrace();
		}
		return conn;
	}
	
	
	
	public static void close(Connection conn){
		try {
			if(conn!=null)conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void close(PreparedStatement pstmt){
		try {
			if(pstmt!=null)pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void close(ResultSet rs){
		try {
			if(rs!=null)rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void close(Connection conn, PreparedStatement pstmt ){
				
		try{
			if(pstmt!=null)pstmt.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		
		try {
			if(conn!=null)conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	
	}
	

	public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs){

		try{
			if(rs!=null)rs.close();
		}catch(Exception e){
			e.printStackTrace();
		}
				
		try{
			if(pstmt!=null)pstmt.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		
		try {
			if(conn!=null)conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	
	}
	
	
	
	public static void close(Connection conn, Statement stmt, ResultSet rs){

		try{
			if(rs!=null)rs.close();
		}catch(Exception e){
			e.printStackTrace();
		}
				
		try{
			if(stmt!=null)stmt.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		
		try {
			if(conn!=null)conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	
	}
	
	
	
	
	
}

 

class ScoreDTO

package java20_oracle;

public class ScoreDTO {

	private String student_no;
	private String name;
	private int kor;
	private int eng;
	private int mat;
	private int tot;
	private double avg;
	
	public ScoreDTO() {
		
	}

	public ScoreDTO(String student_no, String name, int kor, int eng, int mat) {
		super();
		this.student_no = student_no;
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}

	public String getStudent_no() {
		return student_no;
	}

	public void setStudent_no(String student_no) {
		this.student_no = student_no;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMat() {
		return mat;
	}

	public void setMat(int mat) {
		this.mat = mat;
	}

	public int getTot() {
		return tot;
	}

	public void setTot(int tot) {
		this.tot = tot;
	}

	public double getAvg() {
		return avg;
	}

	public void setAvg(double avg) {
		this.avg = avg;
	}

	@Override
	public String toString() {
		return "ScoreDTO [student_no=" + student_no + ", name=" + name + ", kor=" + kor + ", eng=" + eng + ", mat="
				+ mat + ", tot=" + tot + ", avg=" + avg + "]";
	}
	
	
	

	
	
	
}

 

class ScoreDAO

package java20_oracle;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

import common.db.DBConnectManager;

public class ScoreDAO {

	private static ScoreDAO dao;
	
	private ScoreDAO(){
		
	}
	
	public static ScoreDAO getInstance(){
		if(dao==null){
			dao=new ScoreDAO();
		}
		return dao;
	}
	
	
	//점수 목록을 벡터에 저장하여 리턴
	public Vector<Object> listScore(){
		Vector<Object> items=new Vector<Object>();
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		try{
			conn=DBConnectManager.oracleConn();
			String sql="select student_no, name , kor, eng, mat , (kor+eng+mat) as tot, "
					+ " ((kor+eng+mat)/3.0) as avg from score ";
			
			pstmt=conn.prepareStatement(sql);
			rs=pstmt.executeQuery();
			while(rs.next()){
				//JTable 이 Vecotr 만 들어간다.
				Vector<Object> row=new Vector<>();
				row.add(rs.getString("student_no"));
				row.add(rs.getString("name"));
				row.add(rs.getInt("kor"));
				row.add(rs.getInt("eng"));
				row.add(rs.getInt("mat"));
				row.add(rs.getInt("tot"));
				row.add(rs.getDouble("avg"));
				items.add(row);
			}
			
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			DBConnectManager.close(conn, pstmt, rs);
		}
		return items;
	}
	
	
	public int insertScore(ScoreDTO dto){
		int result=0;
		Connection conn=null;
		PreparedStatement pstmt=null;
		try{
			conn=DBConnectManager.oracleConn();
			String sql ="insert into score values( ? , ? , ? , ? , ?)";
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, dto.getStudent_no());
			pstmt.setString(2, dto.getName());
			pstmt.setInt(3, dto.getKor());
			pstmt.setInt(4, dto.getEng());
			pstmt.setInt(5, dto.getMat());
			//update 성공한 레코드 갯수가 result 에 리턴
			result=pstmt.executeUpdate();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			DBConnectManager.close(conn, pstmt);
		}
		return result;
	}
	
	
	
	public int updateScore(ScoreDTO dto){		
		int result=0;
		Connection conn=null; // db 접속
		PreparedStatement pstmt=null; //
		try{
			conn=DBConnectManager.oracleConn();
			String sql="update score set name =?, kor=?, eng=?, mat=? where student_no=?";
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, dto.getName());
			pstmt.setInt(2, dto.getKor());
			pstmt.setInt(3, dto.getEng());
			pstmt.setInt(4, dto.getMat());
			pstmt.setString(5, dto.getStudent_no());
			result=pstmt.executeUpdate();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			DBConnectManager.close(conn, pstmt);
		}
	
		return result;
	}
	
	
	
	public int deleteScore(String student_no){
		int result=0;
		Connection conn=null;
		PreparedStatement pstmt=null;
		try{
			conn=DBConnectManager.oracleConn();
			String sql ="delete from score where student_no=?";
			pstmt=conn.prepareStatement(sql);
			pstmt.setString(1, student_no);
			result=pstmt.executeUpdate();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			DBConnectManager.close(conn, pstmt);
		}
		return result;
	}
	
	
}

 

class ScoreList

package java20_oracle;

import java.awt.EventQueue;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ScoreList extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private JPanel contentPane;
	private JTable table;

	private ScoreDAO dao;
	private Vector<Object> data, col; // 테이블의 데이터와 제목 컬럼을 위한  벡터
	private JButton btnAdd;
	private JButton btnEdit;
	
	
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ScoreList frame = new ScoreList();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ScoreList() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 644, 496);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		

		//dao 에서 받은 데이터를  테이블 모델에 입력
		dao =ScoreDAO.getInstance();
		//테이블 헤더 구성
		col=new Vector<>();
		col.add("학번"); col.add("이름"); col.add("국어"); col.add("영어");
		col.add("수학"); col.add("총점"); col.add("평균");
		table = new JTable();
		refreshTable();
		
			
		//스크롤페인에 테이블을 붙임
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(12, 69, 604, 379);
		contentPane.add(scrollPane);
		scrollPane.setViewportView(table);
		
		btnAdd = new JButton("점수 추가");
		btnAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			
				//점수 입력 폼을 오픔함
				//점수 추가 폼을 생성할 때 현재폼의 주소를 전달함
				ScoreSave form=new ScoreSave(ScoreList.this);
				form.setVisible(true);
			}
		});
		btnAdd.setBounds(12, 10, 97, 23);
		contentPane.add(btnAdd);
		
		btnEdit = new JButton("수정/삭제");
		btnEdit.addActionListener(new ActionListener() {
			@SuppressWarnings("unused")
			public void actionPerformed(ActionEvent e) {
				//선택한 행의 내용을 dto 로 저장
				Integer idx=table.getSelectedRow();//현재 클릭한 행의 인덱스값
				
				if(idx==-1){
					JOptionPane.showMessageDialog(ScoreList.this, "테이블의  데이터를 선택해 주세요.");
					return;
				}
				
				//테이블.getValueAt(행의 인덱스, 컬럼의 인덱스)
				String student_no=String.valueOf(table.getValueAt(idx, 0));
				String name=String.valueOf(table.getValueAt(idx, 1));
				int kor=Integer.valueOf(table.getValueAt(idx, 2)+"");
				int eng=Integer.valueOf(table.getValueAt(idx, 3)+"");
				int mat=Integer.valueOf(table.getValueAt(idx, 4)+"");
				
				ScoreDTO dto=new ScoreDTO(student_no, name,kor, eng, mat);
				//ScoreEdit.java 오픈 ( ScoreList의 주소와 dto 를 전달)
				ScoreEdit form =new ScoreEdit(ScoreList.this, dto);
				form.setVisible(true);
				
				
				
			}
		});
		btnEdit.setBounds(131, 10, 97, 23);
		contentPane.add(btnEdit);
		
	}
	
	
	public void refreshTable(){
		//테이블 모델 생성
		//dao 에서 받아온 데이터로 테이블 모델 생성
		DefaultTableModel model=new DefaultTableModel(dao.listScore(), col);
		//테이블에 데이터 모델을 입력함
		table.setModel(model);
	}
	
	
	

}

 

class ScoreSave

package java20_oracle;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ScoreSave extends JFrame {

	//ScoreList 가리킬 변수 추가
	private ScoreList parent;
	
	private JPanel contentPane;
	private JTextField tfStuedentNo;
	private JTextField tfName;
	private JTextField tfKor;
	private JTextField tfEng;
	private JTextField tfMat;


	
	public ScoreSave(ScoreList parent) {
		
		this.parent=parent;
		
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 485, 440);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("학번");
		lblNewLabel.setBounds(62, 62, 57, 15);
		contentPane.add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("이름");
		lblNewLabel_1.setBounds(62, 113, 57, 15);
		contentPane.add(lblNewLabel_1);
		
		JLabel lblNewLabel_2 = new JLabel("국어");
		lblNewLabel_2.setBounds(62, 170, 57, 15);
		contentPane.add(lblNewLabel_2);
		
		JLabel lblNewLabel_3 = new JLabel("영어");
		lblNewLabel_3.setBounds(62, 231, 57, 15);
		contentPane.add(lblNewLabel_3);
		
		JLabel lblNewLabel_4 = new JLabel("수학");
		lblNewLabel_4.setBounds(62, 291, 57, 15);
		contentPane.add(lblNewLabel_4);
		
		tfStuedentNo = new JTextField();
		tfStuedentNo.setBounds(165, 59, 116, 21);
		contentPane.add(tfStuedentNo);
		tfStuedentNo.setColumns(10);
		
		tfName = new JTextField();
		tfName.setBounds(165, 113, 116, 21);
		contentPane.add(tfName);
		tfName.setColumns(10);
		
		tfKor = new JTextField();
		tfKor.setBounds(165, 167, 116, 21);
		contentPane.add(tfKor);
		tfKor.setColumns(10);
		
		tfEng = new JTextField();
		tfEng.setBounds(165, 228, 116, 21);
		contentPane.add(tfEng);
		tfEng.setColumns(10);
		
		tfMat = new JTextField();
		tfMat.setBounds(165, 291, 116, 21);
		contentPane.add(tfMat);
		tfMat.setColumns(10);
		
		JButton btnSave = new JButton("저장");
		btnSave.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ScoreDAO dao=ScoreDAO.getInstance();
				
				dao.insertScore(setScoreDTO());
				
				JOptionPane.showMessageDialog(ScoreSave.this, "추가 되었습니다.");

				//부모창 데이터 갱신
				parent.refreshTable();
				//현재 프레임 닫기
				dispose();
				
			}
		});
		btnSave.setBounds(107, 348, 97, 23);
		contentPane.add(btnSave);
	}
	
	
	
	//textArea 의 데이터 가져오기
	private ScoreDTO setScoreDTO(){
		
		ScoreDTO dto =new ScoreDTO();
		dto.setStudent_no(tfStuedentNo.getText());
		dto.setName(tfName.getText());
		dto.setKor(Integer.valueOf(tfKor.getText()));
		dto.setEng(Integer.valueOf(tfEng.getText()));
		dto.setMat(Integer.valueOf(tfMat.getText()));

		return dto;
	}
	
	
	
	
}



 

 class ScoreEdit

package java20_oracle;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ScoreEdit extends JFrame {

	//ScoreList 가리킬 변수 추가
	private ScoreList parent;
	private ScoreDTO dto;
	
	private JPanel contentPane;
	private JTextField tfStuedentNo;
	private JTextField tfName;
	private JTextField tfKor;
	private JTextField tfEng;
	private JTextField tfMat;
	private JButton btnDelete;


	
	public ScoreEdit(ScoreList parent, ScoreDTO dto) {
		
		this.parent=parent;
		this.dto=dto;
		
	
		
		
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 485, 440);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("학번");
		lblNewLabel.setBounds(62, 62, 57, 15);
		contentPane.add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("이름");
		lblNewLabel_1.setBounds(62, 113, 57, 15);
		contentPane.add(lblNewLabel_1);
		
		JLabel lblNewLabel_2 = new JLabel("국어");
		lblNewLabel_2.setBounds(62, 170, 57, 15);
		contentPane.add(lblNewLabel_2);
		
		JLabel lblNewLabel_3 = new JLabel("영어");
		lblNewLabel_3.setBounds(62, 231, 57, 15);
		contentPane.add(lblNewLabel_3);
		
		JLabel lblNewLabel_4 = new JLabel("수학");
		lblNewLabel_4.setBounds(62, 291, 57, 15);
		contentPane.add(lblNewLabel_4);
		
		tfStuedentNo = new JTextField();
		tfStuedentNo.setBounds(165, 59, 116, 21);
		contentPane.add(tfStuedentNo);
		tfStuedentNo.setColumns(10);
		
		tfName = new JTextField();
		tfName.setBounds(165, 113, 116, 21);
		contentPane.add(tfName);
		tfName.setColumns(10);
		
		tfKor = new JTextField();
		tfKor.setBounds(165, 167, 116, 21);
		contentPane.add(tfKor);
		tfKor.setColumns(10);
		
		tfEng = new JTextField();
		tfEng.setBounds(165, 228, 116, 21);
		contentPane.add(tfEng);
		tfEng.setColumns(10);
		
		tfMat = new JTextField();
		tfMat.setBounds(165, 291, 116, 21);
		contentPane.add(tfMat);
		tfMat.setColumns(10);
		
		JButton btnSave = new JButton("수정");
		btnSave.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ScoreDAO dao=ScoreDAO.getInstance();
				
				dao.updateScore(setScoreDTO());
				
				JOptionPane.showMessageDialog(ScoreEdit.this, "수정 되었습니다.");

				//부모창 데이터 갱신
				parent.refreshTable();
				//현재 프레임 닫기
				dispose();
				
			}
		});
		btnSave.setBounds(62, 348, 97, 23);
		contentPane.add(btnSave);
		
		btnDelete = new JButton("삭제");
		btnDelete.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int response=JOptionPane.showConfirmDialog(ScoreEdit.this, "삭제하시겠습니까?");
				
				if(response==JOptionPane.YES_OPTION){
					//학번 조회
					ScoreDAO dao=ScoreDAO.getInstance();
					dao.deleteScore(tfStuedentNo.getText()); //레코드 삭제
					//ScoreList 의 테이블 삭제
					parent.refreshTable();
					JOptionPane.showMessageDialog(ScoreEdit.this, "삭제 되었습니다.");
					dispose();//현재 창을 닫음
				}			
			}
		});
		btnDelete.setBounds(220, 348, 97, 23);
		contentPane.add(btnDelete);
		
		
		//텍스트 필드에 dto의 값을 입력함
		if(dto!=null){
			tfStuedentNo.setText(dto.getStudent_no());
			tfName.setText(dto.getName());
			tfKor.setText(dto.getKor()+"");
			tfEng.setText(dto.getEng()+"");
			tfMat.setText(dto.getMat()+"");
		}else{
			JOptionPane.showMessageDialog(parent, "잘 못 선택 하셨습니다.");
			dispose();
		}
	}
	
	
	
	//textArea 의 데이터 가져오기
	private ScoreDTO setScoreDTO(){
		
		ScoreDTO dto =new ScoreDTO();
		dto.setStudent_no(tfStuedentNo.getText());
		dto.setName(tfName.getText());
		dto.setKor(Integer.valueOf(tfKor.getText()));
		dto.setEng(Integer.valueOf(tfEng.getText()));
		dto.setMat(Integer.valueOf(tfMat.getText()));

		return dto;
	}
	
	
	
	
}



 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

예술은 정돈된 인생이다. 생명의 제왕이다. - R. 롤랑

댓글 ( 4)

댓글 남기기

작성