ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL의 Select구문을 이용하기
    JAVA/DataBase 2020. 10. 19. 23:44

    SQL Scrapbook에서 오라클의 HR 데이터베이스에 하나의 테이블을 만들어서 데이터를 추가한 후에 자바로 

    데이터 탐색을 해보자.

    SQL Scrapbook에서 다음과 같이 명령어를 적고 실행해서 테이블을 만들고 데이터를 추가해보자.

    오라클에서 했던 때와 마찬가지로 블록 단위로 드래그를 해서 우클릭한 후에 Execute Selected Text를 클릭하면 된다.

    Select구문은 DB에서 데이터를 가지고 오는 쿼리이다. 즉, DB에서 자바로 데이터를 가지고 오는 것이다. 
    데이터를 가지고 오는 것이기 때문에 데이터를 저장할 collection framework가 필요하다. 

     

    자바에서 클래스를 다음과 같이 만들자.

    프로그램 실행결과

    소스 코드

    더보기
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    //	오라클에 접속하면, 가장 기본적인 SQL의 select 구문을 실행해보자.
    public class SelectDB {
    	public static void main(String[] args) throws ClassNotFoundException, SQLException 
    	{
    		Class.forName("oracle.jdbc.driver.OracleDriver");	
    
    		Connection conn = DriverManager.getConnection(
    				"jdbc:oracle:thin:@localhost:1521:xe",
    				"HR",
    				"1234");
    		
    		if (conn == null)	{System.out.println("DB접속에 실패");}
    		else 				{System.out.println("DB접속 성공");}
    		
    		//	접속에 성공하면 conn객체를 이용해서 SQL문을 작성해서 데이터베이스에서 데이터 가져오기
    		Statement stmt = null;	
    		ResultSet rs = null;			//	Frame work의 Set
    			
    		String sql = "select * from message";
    		stmt = conn.createStatement();	//	위의 SQL문을 처리하기 위해 객체 생성
    		rs = stmt.executeQuery(sql);	//	작성한 문장을 대입
    		
    		//	결과를 가지고 출력하는 방법 살펴보기. DB의 필드의 데이터 타입을 잘 기억하고 있어야 한다.
    		while (rs.next()) 
    		{
    			int no = rs.getInt(1);
    			String name = rs.getNString(2);
    			String content = rs.getNString("content");	//	열의 이름을 가지고 데이터 가지고 오기
    			
    			System.out.printf("%d %s %s \n",no,name,content);
    		}
    		rs.close();
    		stmt.close();
    		conn.close();
    	}
    }

     

     

    위에서 예외처리를 메인함수에서 예외를 날리는데,

    try ~ catch문으로 바꿔쓰면 다음과 같다.

     

    프로그램 실행결과

    소스 코드

    더보기
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TrySelectDB {
    	public static void main(String[] args) {
    		
    		Connection conn = null;
    		Statement stmt = null;	
    		ResultSet rs = null;
    		String sql = "select * from message";
    		
    		try 
    		{
    			Class.forName("oracle.jdbc.driver.OracleDriver");	
    	
    			conn = DriverManager.getConnection(
    					"jdbc:oracle:thin:@localhost:1521:xe",
    					"HR",
    					"1234");
    			
    			if (conn == null)	{System.out.println("DB접속에 실패");}
    			else 				{System.out.println("DB접속 성공");}
    			
    			stmt = conn.createStatement();	//	위의 SQL문을 처리하기 위해 객체 생성
    			rs = stmt.executeQuery(sql);	//	작성한 문장을 대입
    			
    			//	결과를 가지고 출력하는 방법 살펴보기. DB의 필드의 데이터 타입을 잘 기억하고 있어야 한다.
    			while (rs.next()) 
    			{
    				int no = rs.getInt(1);
    				String name = rs.getNString(2);
    				String content = rs.getNString("content");	//	열의 이름을 가지고 데이터 가지고 오기
    				
    				System.out.printf("%d %s %s \n",no,name,content);
    			}
    		}
    		catch(Exception e) {System.err.println(e);}
    		
    		finally 	//	디버깅 해본 결과 finally 블록을 쓰지 않아도 된다.
    		{
    			try {rs.close();} 
    			catch (SQLException e) {e.printStackTrace();}
    			try {stmt.close();} 
    			catch (SQLException e) {e.printStackTrace();}
    			try {conn.close();} 
    			catch (SQLException e) {e.printStackTrace();}
    		}
    	}
    }

     

     

    PreparedStatement을 이용해서, 위의 데이터를 탐색하는 프로그램을 다음과 같이 쓸 수 있다.

    소스 코드

    더보기
    import java.sql.*;
    
    public class SelectDB {
    	public static void main(String[] args) throws ClassNotFoundException, SQLException 
    	{
    		//1.ojdbc6.jar 드라이버를 라이브러리로 포함(bulid path)
    		//2.드라이버 로딩
    		Class.forName("oracle.jdbc.driver.OracleDriver");
    		Connection conn=DriverManager.getConnection(
    		"jdbc:oracle:thin:@localhost:1521:xe","hr","1234");
    		//url,id,password
    		
    		if(conn==null) {System.out.println("DB접속에 실패");}
    		System.out.println("DB접속 성공");
    		
    		//sql문을 작성해서 conn객체를 이용하여 데이터 베이스에 데이터 가져오기
    				
    		String sql="select * from message where no=?";
    		PreparedStatement pstmt=conn.prepareStatement(sql);//위의 sql문을 처리하기 위해 객체 생성
    		pstmt.setInt(1, 3);
    		ResultSet rs=pstmt.executeQuery();
    		
    		//결과를 가지고 출력하는 방법 알아보기
    		while(rs.next()) {
    			int no=rs.getInt(1);
    			String name=rs.getString(2);
    			String content=rs.getNString("content");
    			
    			System.out.printf("%d %s %s \n",no, name, content);
    		}
    		rs.close();
    		pstmt.close();
    		conn.close();
    	}
    }

     

    댓글

Designed by Tistory.