본문 바로가기

공부/응용 SW

6월27일 - MySQL2 자바에 연결하기 / 서브쿼리 / MongoDB

자체교재 CHAP25

 

어제 만들었던 sungjuk 테이블을 조회해봤는데 나오지않았다. 

 

나오지않아 새로 만들어주었는데, 

데이버베이스 변경을 잊어주었다. 내가 어제 만든 sungjuk테이블은 java0514 데이터베이스 안에 있는데

그걸 찾아주지않고 엉뚱하게 그냥 mysql폴더에서만 찾아 나오지 않았던 것이다. 

새로이 찾으니 어제 만든 sungjuk 테이블이 나왔다.

 

원래의 테이블에 행추가하기 

insert into sungjuk(uname,kor,eng,mat,addr,wdate)
values('트럼프',70,80,95,'India',now());

insert into sungjuk(uname,kor,eng,mat,addr,wdate)
values('송중기',90,85,95,'KOREA',now());

 

1. 자바에 MySQL 연결하기 

 

1) mysql-connector-java-5.1.47.zip 압축풀기

mysql과 자바의 연결고리

2) eclips open! 

mysql jar파일 연결해주기

jdbcMysql 우클릭-> build path-> configure build path...

 

3) java에 mysql 파일경로 설정하기

add external JARs 클릭

 

4) mysql-connector 연결하기

 

5) 연결성공!

연결성공!

 

2. 자바에 MySQL 실행하기 

 

package jdbc0627;

import java.sql.DriverManager;

public class Test01_DBOpen {
	public static void main(String[] args) {
        //JDBC(Java Database Connection)
        //자바와 데이터베이스를 연동
        //mysql-connector-java-5.1.47.jar 라이브러리 필요
		//DB명->java0514
		try{ 
            //1)MySQL DB 연결 관련 정보
            String url     ="jdbc:mysql://localhost:3306/java0514?useUnicode=true&characterEncoding=euckr";
            String user    ="root";
            String password="1234";
            String driver  ="org.gjt.mm.mysql.Driver";
            
            //2)드라이버 로딩
            Class.forName(driver);
            
            //3)MySQL DB 서버 연결
            DriverManager.getConnection(url, user, password);
            System.out.println("MySQL DB 서버 연결 성공!!");
                       
        }catch(Exception e){
            System.out.println("MySQL DB 연결 실패!!"+e);
        }//try end
 	}//main() end
}//class end

출력결과
MySQL DB 서버 연결 성공!!

 

3. 자바에 MySQL 연습하기 

- 오라클 DB참고해서 풀기 ! 똑같음 ! 

 

문제 1) 행추가

package jdbc0627;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Test02_Insert {
	public static void main(String[] args) {
        String url     ="jdbc:mysql://localhost:3306/java0514?useUnicode=true&characterEncoding=euckr";
        String user    ="root";
        String password="1234";
        String driver  ="org.gjt.mm.mysql.Driver";

		Connection con=null;
		PreparedStatement pstmt=null;

		try{ 
            Class.forName(driver);
            con=DriverManager.getConnection(url, user, password);
            System.out.println("MySQL DB 서버 연결 성공!!");
            
            StringBuilder sql=new StringBuilder();
            sql.append(" INSERT INTO sungjuk(uname,kor,eng,mat,wdate) ");
            sql.append(" VALUES(?,?,?,?,now()) ");

            pstmt=con.prepareStatement(sql.toString());
            pstmt.setString(1, "공유");
            pstmt.setInt(2, 95);
            pstmt.setInt(3, 85);
            pstmt.setInt(4, 65);
            
            int result=pstmt.executeUpdate();
            if(result==0){
            	System.out.println("행 추가 실패!");
            }else{
            	System.out.println("행 추가 성공!");
            }//if end
            
		}catch(Exception e){
            System.out.println("MySQL DB 연결 실패!!"+e);
        }finally{
			//자원반납(순서주의~!)
			try{
				if(pstmt!=null){pstmt.close();}
			}catch(Exception e){}
			
			try{
				if(con!=null){con.close();}
			}catch(Exception e){}
		}//try end
		
 	}//main() end
}//class end

 

출력결과

 

문제2) 상세보기 (sno에 변수처리해서) 

package jdbc0627;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Test03_SelectOne {
	public static void main(String[] args) {

	    String url     ="jdbc:mysql://localhost:3306/java0514?useUnicode=true&characterEncoding=euckr";
        String user    ="root";
        String password="1234";
        String driver  ="org.gjt.mm.mysql.Driver";
        
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        
		try{ 
            Class.forName(driver);
            con=DriverManager.getConnection(url, user, password);
            System.out.println("MySQL DB 서버 연결 성공!!");
            
            StringBuilder sql=new StringBuilder();
            sql.append(" SELECT sno,uname,kor,eng,mat,tot,aver,addr,wdate ");
            sql.append(" FROM sungjuk ");
            sql.append(" WHERE sno=? ");
            
            pstmt=con.prepareStatement(sql.toString());
            pstmt.setInt(1, 1);
            rs=pstmt.executeQuery();
            
            if(rs.next()){
            	System.out.println("자료있음 !");
            	
            	System.out.println("sno : "+rs.getInt("sno")+" ");
            	System.out.println("uname : "+rs.getString("uname")+" ");
            	System.out.println("kor : "+rs.getInt("kor")+" ");
            	System.out.println("eng : "+rs.getInt("eng")+" ");
            	System.out.println("mat : "+rs.getInt("mat")+" ");
            	System.out.println("tot : "+rs.getInt("tot")+" ");
            	System.out.println("aver : "+rs.getInt("aver")+" ");
            	System.out.println("addr : "+rs.getString("addr")+" ");
            	System.out.println("wdate : "+rs.getDate("wdate")+" ");
            	System.out.println();
            }else{
            	System.out.println("자료없음 !");
            }//if end
            
        }catch(Exception e){
            System.out.println("MySQL DB 연결 실패!!"+e);
        }finally{
			//자원반납(순서주의~!)
			try{
				if(rs!=null){rs.close();}
			}catch(Exception e){}
			
			try{
				if(pstmt!=null){pstmt.close();}
			}catch(Exception e){}
			
			try{
				if(con!=null){con.close();}
			}catch(Exception e){}
		}//try end

 	}//main() end
}//class end

 

출력결과

->나는 sno변수에 1을 넣어주었다.

 

문제3) 전체 목록보기

package jdbc0627;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Test04_SelectAll {
	public static void main(String[] args) {
		
	    String url     ="jdbc:mysql://localhost:3306/java0514?useUnicode=true&characterEncoding=euckr";
        String user    ="root";
        String password="1234";
        String driver  ="org.gjt.mm.mysql.Driver";
        
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        
		try{ 
            Class.forName(driver);
            con=DriverManager.getConnection(url, user, password);
            System.out.println("MySQL DB 서버 연결 성공!!");
            
            StringBuilder sql=new StringBuilder();
            sql.append(" SELECT sno,uname,kor,eng,mat,tot,aver,addr,wdate ");
            sql.append(" FROM sungjuk ");
            sql.append(" ORDER BY sno desc ");
            
            pstmt=con.prepareStatement(sql.toString());
            rs=pstmt.executeQuery();
            
            if(rs.next()){
            	System.out.println("자료있음 !");
            	do{
	            	System.out.print(rs.getInt("sno")+" ");
	            	System.out.print(rs.getString("uname")+" ");
	            	System.out.print(rs.getInt("kor")+" ");
	            	System.out.print(rs.getInt("eng")+" ");
	            	System.out.print(rs.getInt("mat")+" ");
	            	System.out.print(rs.getInt("tot")+" ");
	            	System.out.print(rs.getInt("aver")+" ");
	            	System.out.print(rs.getString("addr")+" ");
	            	System.out.print(rs.getDate("wdate")+" ");
	            	System.out.println();
            	}while(rs.next());	
            }else{
            	System.out.println("자료없음 !");
            }//if end
            
        }catch(Exception e){
            System.out.println("MySQL DB 연결 실패!!"+e);
        }finally{
			//자원반납(순서주의~!)
			try{
				if(rs!=null){rs.close();}
			}catch(Exception e){}
			
			try{
				if(pstmt!=null){pstmt.close();}
			}catch(Exception e){}
			
			try{
				if(con!=null){con.close();}
			}catch(Exception e){}
		}//try end

 	}//main() end
}//class end

 

출력결과

->내림차순으로 해주었기때문에 4,3,2,1 순서로 나왔다.

 

문제4) 총점, 평균 구하기

package jdbc0627;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Test05_Update {
	public static void main(String[] args) {
		
	    String url     ="jdbc:mysql://localhost:3306/java0514?useUnicode=true&characterEncoding=euckr";
        String user    ="root";
        String password="1234";
        String driver  ="org.gjt.mm.mysql.Driver";
        
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        
		try{ 
            Class.forName(driver);
            con=DriverManager.getConnection(url, user, password);
            System.out.println("MySQL DB 서버 연결 성공!!");
            
            //문제) 총점,평균 구하기
            StringBuilder sql=new StringBuilder();
            sql.append(" UPDATE sungjuk ");
            sql.append(" SET tot=(kor+eng+mat) ");
            sql.append(" , aver=(kor+eng+mat)/3 ");
            
            pstmt=con.prepareStatement(sql.toString());
			int result=pstmt.executeUpdate();
			if(result==0){
				System.out.println("행 수정 실패!");
			}else{
				System.out.println("행 수정 성공~");
			}//if end
            
        }catch(Exception e){
            System.out.println("MySQL DB 연결 실패!!"+e);
        }finally{
			//자원반납(순서주의~!)
			try{
				if(rs!=null){rs.close();}
			}catch(Exception e){}
			
			try{
				if(pstmt!=null){pstmt.close();}
			}catch(Exception e){}
			
			try{
				if(con!=null){con.close();}
			}catch(Exception e){}
		}//try end

 	}//main() end
}//class end

 

출력결과

 

 

서브쿼리

 

>sqlplus java0514/1234

>select * from sungjuk

 

1) 국어점수의 평균을 구하시오

select avg(kor) from sungjuk;

 

- 제주지역의 국어점수 평균을 구하시오 *지역이름의 대문자 구분해주기!

select avg(kor) from sungjuk where addr='Jeju';

 

2) 국어점수의 평균보다 못한 레코드를 조회 

select kor,uname from sungjuk where kor<(select avg(kor) from sungjuk);

 

- 국어점수의 평균보다 잘한 레코드를 조회

select kor,uname from sungjuk where kor>(select avg(kor) from sungjuk);

 

- 제주지역의 영어점수 평균보다 잘한 레코드를 조회

select eng,uname,addr from sungjuk where eng>(select avg(eng) from sungjuk where addr='Jeju');

 

3) 수학점수의 최고점이 국어점수에도 있는지 조회

select uname,mat,kor from sungjuk where kor=(select max(mat) from sungjuk);

 

4) 칼럼추가 : tot
alter table sungjuk add (tot number);
select tot from sungjuk;


5) nvl() 함수

->null값을 다른값으로 치환


select max(tot) from sungjuk;
select count(tot) from sungjuk;

 

select nvl(max(tot),0) from sungjuk;

->현재 max값이 null값이므로 null인 max값을 0으로 치환하기

 

select nvl(max(tot),0)+1 from sungjuk;

->nvl() 함수에 1 더해주기

select nvl(max(tot),0)+1 as num from sungjuk; 

->nvl() 함수 이름변경해주기

 

6) max()를 이용해서 일련번호 발생

select max(sno) from sungjuk;

select max(sno)+1 from sungjuk;

select nvl(max(sno),5)+1 from sungjuk;

select max(tot)+1 from sungjuk;

select nvl(max(tot),5)+1 from sungjuk;

 

- max() 함수를 이용해서 일련번호 발생한 후 행추가하기

insert into sungjuk(sno,uname,kor,eng,mat,addr,wdate)

values( (select nvl(max(tot),5)+1 from sungjuk),'라일락',60,80,55,'Jeju',sysdate);

 

insert into sungjuk(sno,uname,kor,eng,mat,addr,wdate)

values( (select nvl(max(sno),0)+1 from sungjuk),'라일락',60,80,55,'Jeju',sysdate);

 

select sno,uname from sungjuk order by sno desc;

 

->sno의 value값에 nvl(max)함수를 주어 6을 만들어주었다. 

   sno의 value값에 nvl(tot)함수를 주어 11을 만들어주었다.

-위의 Oracle SQL문을 MySQL SQL문으로 수정하시오 

insert into sungjuk(sno,uname,kor,eng,mat,addr,wdate)
values( (select ifnull(max(sno),0)+1 from sungjuk as a),'라일락',60,80,55,'Jeju',now());

->oracle에서의 nvl()함수는 mysql에서 ifnull() 로 쓰인다

mysql에서 서브쿼리를 써줄 때엔 sungjuk테이블을 sungjuk as a로 다른 이름으로 명칭해주어

출력한다. 이때 as는 생략도 가능하므로 , sungjuk a로 해도 무관하다. 

 

 

Mongo DB

 

1. 설치하기

https://www.mongodb.com/download-center/community

version : 3.2.22

os : Windows 64-bit x64

package : MSI

 

NoSQL Database 

-> 구조가 없다

-> {key1:value1, key2:value2, ~} 안에 아는 정보를 전부다 적는다. 

-> JASON 구조라고 한다.

 

{이름:손흥민, 나이:25, 직업:축구선수, 주소:영국}

{이름:김연아, 성별:여, 직업:백수}

{이름:박지성, 전화번호:01065495756}

 

2. 작업폴더

 1) 폴더생성 c:\data\db

 2) 몽고DB 서버실행
     cmd
     cd C:\Program Files\MongoDB\Server\3.2\bin>mongod

 3) 몽고DB 실행
     cmd
     cd C:\Program Files\MongoDB\Server\3.2\bin>mongo  

'공부 > 응용 SW' 카테고리의 다른 글

6월28일 - MongoDB  (0) 2019.06.28
6월26일 - MySQL1 설치하기  (0) 2019.06.26
6월26일 - 오라클 SQL2 문제  (0) 2019.06.26
6월25일 - 오라클 SQL1  (0) 2019.06.25
6월24일 - SW활용  (0) 2019.06.24