===========================================================scoreDAO=================================================================
package com.score1;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import com.util.DBConn;
/*
* 오라클 DB연동 할 때 순서
* 1. DriverManager.getConnection()를 이용하여 Connection 객체구함. => 클래스 객체로 만듬
* 2. Connection의 createStatement() 메소드를 이용하여 Statement 객체 구함
* -- Statement : 쿼리를 실행하는 역활을 한다.
* 3. Statement의 메소드를 이용하여 쿼리를 실행한다.
* 2,3번 설명
* => 메소드 안에서 Statement=null;로 선언만 하고 실행문 다음(try catch 다음)에 stmt=conn.createStatement();
* executeUpdate() : INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, 등의 구문 실행
* executeQuery() : SELECT 구문 실행( 셀렉트만 제외 하면 모두 executeUpdate() 쓴다)
* -- SELECT만 리턴값이 resultset
*/
public class ScoreDAO {
private Connection conn=DBConn.getConnection();
public int insertScore(ScoreDTO dto) {
int result=0;
Statement stmt=null;
StringBuffer sb=new StringBuffer();
try{
sb.append("INSERT INTO score(");
sb.append("hak, name, birth, kor,eng,mat)");
sb.append("VALUES('"+dto.getHak()+"'");
sb.append(",'"+dto.getName()+"'");
sb.append(",'"+dto.getBirth()+"'");
sb.append(","+dto.getKor());
sb.append(","+dto.getEng());
sb.append(","+dto.getMat());
sb.append(")");
stmt=conn.createStatement();
// INSERT, UPDATE, DELETE, CREATE 문등을 실행
// INSERT 인 경우 INSERT한 개수를 리턴
// UPDATE 인 경우 UPDATE 한 개수를 리턴
// INSERT ~INTO는 한번에 하나의 테이블에 하나의 레코드만 추가 할 수 있으므로 성공하면 1을 리턴
result=stmt.executeUpdate(sb.toString());
stmt.close();
}catch(Exception e){
System.out.println(e.toString());
}
return result;
}
public int updateScore(ScoreDTO dto){
int result=0;
Statement stmt=null;
StringBuffer sb=new StringBuffer();
try{
sb.append("UPDATE score SET name='"+ dto.getName()+"',");
sb.append(" birth='"+ dto.getBirth()+"',");
sb.append(" kor="+ dto.getKor()+",");
sb.append(" eng="+ dto.getEng()+",");
sb.append(" mat="+ dto.getMat());
sb.append(" WHERE hak='"+ dto.getHak()+"'");
stmt=conn.createStatement();
result=stmt.executeUpdate(sb.toString());
stmt.close();
} catch (Exception e) {
System.out.println(e.toString());
}
return result;
}
public int deleteScore(String hak){
int result=0;
Statement stmt=null;
String sql;
try{
sql="DELETE FROM score WHERE hak='"+hak+"'";
stmt=conn.createStatement();
result=stmt.executeUpdate(sql);
stmt.close();
} catch (Exception e) {
System.out.println(e.toString());
}
return result;
}
public ScoreDTO readScore(String hak){ // hak은 pk라 유일한 값을 가져서 어레이리스트 안씀
ScoreDTO dto=null;
Statement stmt=null;
ResultSet rs=null;
StringBuffer sql=new StringBuffer();
try{
sql.append("SELECT hak, name, birth, kor, ");
sql.append("eng,mat,(kor+eng+mat) tot, ");
sql.append("(kor+eng+mat)/3 ave");
sql.append(" FROM score");
sql.append(" WHERE hak='"+hak+"'");
stmt=conn.createStatement();
rs=stmt.executeQuery(sql.toString());
//기본키 조건에 만족하는 데이터는 최대 하나이므로 WHILE() 문을 사용할 필요가 없다.
// 조건에 만족하는 데이터가 없으면 dto는 null
if(rs.next()){
dto=new ScoreDTO();
dto.setHak(rs.getString("hak"));
dto.setName(rs.getString("name"));
dto.setBirth(rs.getString("birth"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setTot(rs.getInt("tot"));
dto.setAve(rs.getInt("ave"));
}
rs.close();
stmt.close();
} catch (Exception e){
System.out.println(e.toString());
}
return dto;
}
public ArrayList<ScoreDTO> listScore() {
ArrayList<ScoreDTO> list=new ArrayList<ScoreDTO>();
Statement stmt=null;
ResultSet rs=null; //SELECT 문이기 때문에 ResultSet으로 리턴값을 선언하였다. 159번줄
StringBuffer sb=new StringBuffer();
try {
sb.append("SELECT hak, name,"); // append 뒤에 계속해서 입력된 데이터를 붙여준다.
sb.append(" TO_CHAR(birth,'YYYY-MM-DD') birth, ");
sb.append(" kor, eng, mat, ");
sb.append(" (kor+eng+mat) tot,");
sb.append(" (kor+eng+mat)/3 ave,");
sb.append(" RANK() OVER(ORDER BY(kor+eng+mat) DESC) rank");
sb.append(" FROM score"); //실수로 괄호안에 ;세미콜론 붙이면 안된다.
stmt=conn.createStatement();
// excuteQuery() : SELECT 문
rs=stmt.executeQuery(sb.toString()); //executeQuery는 String만 받는다. 그래서 145번줄의 스트링버퍼를 스트링으로 변환 시켜주었다.
while(rs.next()){ // 전체출력을 위해서 반복문 while을 사용함
ScoreDTO dto=new ScoreDTO();
dto.setHak(rs.getString(1));
// dto.setHak(rs.getString("hak")); 오라클의 인데스는 1부터 시작하여 1을 적어줬다.
dto.setName(rs.getString(2));
// dto.setName(rs.getString("name"));
dto.setBirth(rs.getString("birth"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setTot(rs.getInt("tot"));
dto.setAve(rs.getInt("ave"));
dto.setRank(rs.getInt("rank"));
list.add(dto);
}
} catch (Exception e){
System.out.println(e.toString());
}
return list;
}
public ArrayList<ScoreDTO> listNameScore(String name) { // name은 중복될 수도 있기 때문에 어레이리스트로 불러옴
ArrayList<ScoreDTO> list=new ArrayList<ScoreDTO>();
Statement stmt=null;
ResultSet rs=null;
StringBuffer sb=new StringBuffer();
try {
sb.append("SELECT hak, name,");
sb.append(" TO_CHAR(birth,'YYYY-MM-DD') birth, ");
sb.append(" kor, eng, mat, ");
sb.append(" (kor+eng+mat) tot,");
sb.append(" (kor+eng+mat)/3 ave");
sb.append(" FROM score");
sb.append(" WHERE name LIKE'"+name+"%'"); // % => 한글자만 동일해도 출력됨
stmt=conn.createStatement();
rs=stmt.executeQuery(sb.toString());
while(rs.next()){ // 전체출력을 위해서 반복문 while을 사용함
ScoreDTO dto=new ScoreDTO();
dto.setHak(rs.getString(1));
// dto.setHak(rs.getString("hak")); 오라클의 인덱스는 1부터 시작하여 1을 적어줬다.
dto.setName(rs.getString(2));
// dto.setName(rs.getString("name")); 컬럼명을 적어줘도 무방하다.
dto.setBirth(rs.getString("birth"));
dto.setKor(rs.getInt("kor"));
dto.setEng(rs.getInt("eng"));
dto.setMat(rs.getInt("mat"));
dto.setTot(rs.getInt("tot"));
dto.setAve(rs.getInt("ave"));
list.add(dto);
}
} catch (Exception e){
System.out.println(e.toString());
}
return list;
}
}
===========================================================scoreDTO=================================================================
package com.score1;
public class ScoreDTO {
private String hak, name, birth;
private int kor, eng, mat, tot, ave, rank;
public String getHak() {
return hak;
}
public void setHak(String hak) {
this.hak = hak;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
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 int getAve() {
return ave;
}
public void setAve(int ave) {
this.ave = ave;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
}
===========================================================score=================================================================
===========================================================scoreMain=================================================================
package com.score1;
import com.util.DBConn;
public class ScoreMain {
public static void main(String[] args) throws Exception {
char ch;
Score score=new Score();
while(true){
do{
System.out.print("1.입력 2.수정 3.삭제 4.학번검색 5.이름검색 6.전체출력 7.종료 ==>");
ch=(char)System.in.read();
System.in.skip(2);
} while (ch<'1' || ch>'7');
switch (ch){
case '1': score.insertData();break;
case '2': score.updateData();break;
case '3': score.deleteHak();break;
case '4': score.searchHak();break;
case '5': score.listNameData();break;
case '6': score.listAllData();break;
case '7': DBConn.close();
System.exit(0);
}
}
}
}
'자바 DB 연동' 카테고리의 다른 글
OracleTypes.CURSOR 에러 해결하기 (0) | 2013.06.15 |
---|---|
PreparedStatement - 자바에서 오라클 쿼리 실행 (0) | 2013.06.15 |
자바 DB 연동 - 트랜잭션 (0) | 2013.06.14 |
자바 DB 연동 - 테이블의 행을 순차적으로 셀렉트하는 소스 (0) | 2013.06.14 |
자바 DB 연동 - 컬럼명과 타입명,폭을 확인하는 소스 (0) | 2013.06.14 |