본문 바로가기

공부/응용 SW

6월21일 - SW활용 JDBC : java에 DB연결하기

테이블 = 스키마 = relationship 

자바- db연동 - 브라우저에 노출

 

1. 오라클 DB서버 연결

try{
        //1)오라클 DB 연결 관련정보
	String url     ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
	String user    ="java0514";
	String password="1234";
	String driver  ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar 
							
	//2)드라이버 로딩
	Class.forName(driver);
			
	//3)오라클 DB 서버 연결
	DriverManager.getConnection(url, user, password);
	System.out.println("오라클 DB 서버 연결 성공!");
}catch(Exception e){
	System.out.println("오라클 DB 연결 실패!"+e);
}//try end

에러뜸, class를 찾을 수 없음 

해당 클래스를 찾을 수 없다는 에러가 나왔다. 

driver에 선언해준 클래스를 연결시켜주는 라이브러리를 추가시킨다.

이 라이브러리는 ojdbc6.jar  

 

-외부 라이브러리 연결하기 (ojdbc6.jar)

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

추가한 다음엔 reflash / validate / project -> clean 하고 실행하기 

외부 라이브러리 연결하기 
추가하기

연결 후 다시 실행하니, 연결이 성공되었다. 

 

시작메뉴-> oracle 11g -> stop db 

를 하고 실행하니 에러가 떴다.

 

2. DB에 행 추가 하기

  1)

try{
	String url     ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
	String user    ="java0514";
	String password="1234";
	String driver  ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar 							
	Class.forName(driver);
	Connection con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다. 
	System.out.println("오라클 DB 서버 연결 성공!");
			
	//4) SQL문 작성
	//   SQL문 종결문자 ; 를 쓰면 오류남 
	String sql="";
	sql +=" INSERT INTO sungjuk(uname,kor,eng,mat) ";
	sql +=" VALUES('박지성',90,50,60) "; //문자열 앞뒤로 공백을 주는 건, 혹시나 생길 오류때문
	//System.out.println(sql);
			
	//5) SQL형식 변환
	PreparedStatement pstmt=con.prepareStatement(sql);
			
	//6) SQL문 실행
	int result=pstmt.executeUpdate(); //리턴형 
	//insert된 행의 갯수 1행이 추가됨
	System.out.println("실행결과:"+result); 
						
}catch(Exception e){
	System.out.println("실패!"+e);
}//try end

출력결과
오라클 DB 서버 연결 성공!
실행결과:1

행이 추가가 되었다.

자바를 계속 실행하면 행은 계속 추가된다. 난 두번 런해서 두번 추가되었다 ㅎ. 원래 10행이었는데..

 

  2)

try{
	String url     ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
	String user    ="java0514";
	String password="1234";
	String driver  ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar 							
	Class.forName(driver);
	Connection con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다. 
	System.out.println("오라클 DB 서버 연결 성공!");
			
	//SQL문 작성시 문자열 연산 속도를 고려하여 StringBuilder클래스 추천 !  
	StringBuilder sql=new StringBuilder(); //class기때문에 new연산자
	//sql의 함수를 불러낸다 
	sql.append(" INSERT INTO sungjuk(uname,kor,eng,mat) "); 
	sql.append(" VALUES('김연아',95,90,100) "); 
			
	PreparedStatement 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("실패!"+e);
}//try end

출력결과
오라클 DB 서버 연결 성공!
행추가 성공~

3. DB에 행 수정하기

try{
	String url     ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
	String user    ="java0514";
	String password="1234";
	String driver  ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar 							
	Class.forName(driver);
	Connection con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다. 
	System.out.println("오라클 DB 서버 연결 성공!");
		
	StringBuilder sql=new StringBuilder();
	sql.append(" UPDATE sungjuk ");
	sql.append(" SET aver=(kor+eng+mat)/3 ");
	sql.append(" WHERE uname in ('박지성','김연아') ");
			
	PreparedStatement 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("실패!"+e);
}//try end

Class Connection과 Class PreparedStatement는 다 썼으면 자원반납해야함 

마지막에 사용한 자원부터 close한다. 

 

4. DB에 행 삭제하기

Connection con=null;
PreparedStatement pstmt=null;
				
try{
	String url     ="jdbc:oracle:thin:@172.16.83.16:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
	String user    ="java0514";
	String password="1234";
	String driver  ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar 							
	Class.forName(driver);
	con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다. 
	System.out.println("오라클 DB 서버 연결 성공!");
		
	StringBuilder sql=new StringBuilder();
	sql.append(" DELETE FROM sungjuk ");
	sql.append(" WHERE uname='박지성' ");
			
	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("실패!"+e);
}finally{
	//자원반납(순서주의~!)
	try{
		if(pstmt!=null){pstmt.close();}
	}catch(Exception e){}
			
	try{
		if(con!=null){con.close();}
	}catch(Exception e){}
}//try end

출력결과
오라클 DB 서버 연결 성공!
행 수정 성공~

 

박지성 삭제 성공

5. DB에 행 읽기

// 행 읽기 연습
String url     ="jdbc:oracle:thin:@localhost:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user    ="java0514";
String password="1234";
String driver  ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar 							

Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
		
try{
	Class.forName(driver);
	con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다. 
	System.out.println("오라클 DB 서버 연결 성공!");
		
	StringBuilder sql=new StringBuilder();
	sql.append(" SELECT uname,kor,eng,mat,aver ");
	sql.append(" FROM sungjuk ");
	sql.append(" WHERE uname='라일락' ");
	//.XML myBatis Framework 민원서류
			
	pstmt=con.prepareStatement(sql.toString());
	rs=pstmt.executeQuery(); //select문 ,리턴형, '라일락'값이 담긴다.
	//cursor : 가리키는 값. 이동할 수 있다. 
	//last, first 얼마든지 이동가능하다.
	if(rs.next()){ //cursor가 있나?
		System.out.println("자료있음!");
	}else{
		System.out.println("자료없음!");
	}//if end
						
}catch(Exception e){
	System.out.println("실패!"+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

 1) 칼럼읽기

- if문안에 넣는다 

- rs에 넣은 값의 커서의 위치를 물어보는 부분에 print하기

if(rs.next()){ //cursor가 있나?
		System.out.println("자료있음!");
		//1)칼럼순서 - 칼럼의 자료형에 맞춘다
		//  (select 칼럼1, 칼럼2,~)
		System.out.println(rs.getString(1)+" ");
		System.out.println(rs.getInt(2)+" ");
		System.out.println(rs.getInt(3)+" ");
		System.out.println(rs.getInt(4)+" ");
		System.out.println(rs.getInt(5)+" ");
		System.out.println();
				
		//2)칼럼명 (select uname,kor,~)
		System.out.println(rs.getString("uname")+" ");
		System.out.println(rs.getInt("kor")+" ");
		System.out.println(rs.getInt("eng")+" ");
		System.out.println(rs.getInt("mat")+" ");
		System.out.println(rs.getInt("aver")+" ");
		System.out.println();
				
}else{
		System.out.println("자료없음!");
}//if end

출력결과 - 같다
라일락 
30 
80 
40 
50 

 

 2) 전체목록 읽기

- sql문에 ORDER BY를 써서 전체목록을 출력하였다.

 

// 행 읽기 연습 (전체목록)
String url     ="jdbc:oracle:thin:@localhost:1521:xe"; //본인 ip, port listener 1521, xe 무료배포용
String user    ="java0514";
String password="1234";
String driver  ="oracle.jdbc.driver.OracleDriver"; //ojdbc6.jar 							
	
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
		
try{
	Class.forName(driver);
	con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다. 
	System.out.println("오라클 DB 서버 연결 성공!");
		
	StringBuilder sql=new StringBuilder();
	sql.append(" SELECT uname,kor,eng,mat,aver ");
	sql.append(" FROM sungjuk ");
	sql.append(" ORDER BY uname ");
	//.XML myBatis Framework 민원서류
			
	pstmt=con.prepareStatement(sql.toString());
	rs=pstmt.executeQuery(); //select문 ,리턴형, sql값이 담긴다.
	//cursor : 가리키는 값. 이동할 수 있다. 
	//last, first 얼마든지 이동가능하다.
	if(rs.next()){ //cursor가 있나?
		System.out.println("자료있음!");
		do{
			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("aver")+" ");
			System.out.println();		
		}while(rs.next());
				
	}else{
		System.out.println("자료없음!");
	}//if end
			
}catch(Exception e){
	System.out.println("실패!"+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

 

->출력결과

전체목록이 출력되었다

6. DB에 행 추가 (변수) 하기

- SQL문에 INSERT~ VALUES(?,?,?,~) 를 써서 ?를 특정값으로 대체한 후 값을 대입

- 쿼리문으로 변환한 후 , 각 칼럼의 자료형에 맞게 셋팅한다.

- 출력결과는 위의 5번 전체목록출력에서 RUN하여 얻어내었다.

try{
	Class.forName(driver);
	con= DriverManager.getConnection(url, user, password); //get이기때문, 리턴형이 있다. 
	System.out.println("오라클 DB 서버 연결 성공!");
		
	StringBuilder sql=new StringBuilder();
	sql.append(" INSERT INTO sungjuk(uname,kor,eng,mat,aver) ");
	sql.append(" VALUES(?,?,?,?,?) "); 
	// ?는 명령어, 직접쓰지않고 특정값으로 대체함 
	// ? 갯수와 값 갯수가 같아야한다.
			
	//쿼리문으로 변환한 후 값을 넣는다
	pstmt=con.prepareStatement(sql.toString());
	//?순서와 ?에 들어갈 자료형 주의한다. 
	pstmt.setString(1, "이강인");  //1 : 첫번째 ?, uname칼럼
	pstmt.setInt(2, 85);          //2 : 두번째 ?, kor칼럼
	pstmt.setInt(3, 75);          //3 : 세번째 ?, eng칼럼
	pstmt.setInt(4, 60);          //4 : 네번째 ?, mat칼럼
	pstmt.setInt(5, (85+75+60)/3);//5 : 다섯번째 ?, aver칼럼
			
	int result=pstmt.executeUpdate();
	if(result==0){
		System.out.println("행 추가 실패!");
	}else{
		System.out.println("행 추가 성공~");
	}//if end

->출력결과

'이강인' 행이 추가 된것을 볼 수 있다.

 

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

6월25일 - 오라클 SQL1  (0) 2019.06.25
6월24일 - SW활용  (0) 2019.06.24
6월20일 - SW활용 Oracle  (0) 2019.06.20
6월19일 - SW활용 : DB  (0) 2019.06.19
6월18일 - SW활용 네트워크  (0) 2019.06.18