본문 바로가기

DATA BASE

DB 연결된 Java에서 변수, 배열, 객체, 객체배열에 Data담아서 출력하기 + 맴버 변수에 직접 접근하지 않는 것 까지 수정해봄.

con

stmt

rs

 

데이터베이스 자료들을 자바에서 아래의 4가지로 담을 수 있다.  4가지에 담아서 DB에서 자바로 가져오는 방법 4가지!

1. 변수

2. 배열

3. 객체

4. 객체배열

 

 

자바의 구성요소 중에서 클래스안에 아래 4가지 들어가지요.

1. member variable

2. constructor

3. method

4. Inner class

 

 

아래 예제는 1. 변수, 2. 배열, 3. 객체, 4. 객체배열 방법으로 Book table과 1. 변수, 4. 객체배열 방법으로 Customer table 을 가져와서 출력해보았어요!

 

 

 BookList class

package booklist;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class BookList {
	Connection con; // 멤버 변수
	Statement stmt;
	ResultSet rs;

	// 멤버변수
	// 1. 변수
//	int bookid;
//	String bookname;
//	String publisher;
//	int price;

	// 2. 배열
//	int bookid_arr[] = new int[10];
//	String bookname_arr[] = new String[10];
//	String publisher_arr[] = new String[10];
//	int price_arr[] = new int[10];

	// 3. 객체 (내부 (Inner) 클래스)
	/*
	 * class Book { int bookid; String boookname; String publisher; int price; }
	 */
	// 3. 객체
	Book b1;// 멤버변수 (3.객체)

	// 4. 객체 배열
	Book[] b_array;

	public BookList() {

		// 3.객체방식
//		b1 = new Book();

		// 4.객체배열 초기화
		b_array = new Book[12];

		for (int i = 0; i < b_array.length; ++i)
			b_array[i] = new Book();
	}
//	b_array[0] = new Book();
//	b_array[1] = new Book();
//	b_array[2] = new Book();
//	b_array[3] = new Book();
//	b_array[4] = new Book();

	void getConnection() {
		String url = "jdbc:oracle:thin:@localhost:1521:XE";
		/* 11g express edition은 orcl 대신 XE를 입력한다. */
		String userid = "c##madang"; // c##추가
		String pwd = "c##madang"; // c##추가

		try {/* 드라이버를 찾는 과정 */
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// class 객체에 forName함수. 아마 static일 것이라고 예측해볼 수 있다.
			System.out.println("드라이버 로드 성공");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {/* 데이터베이스를 연결하는 과정 */
			System.out.println("데이터베이스 연결 준비 ...");
			con = DriverManager.getConnection(url, userid, pwd);
			System.out.println("데이터베이스 연결 성공");
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	void getBookDB() { // 하는 일이 뭐야?
		String query = "SELECT Bookid, Bookname, Publisher, Price FROM Book"; /* SQL 문 */
		try { /* 데이터베이스에 질의 결과를 가져오는 과정 */
			stmt = con.createStatement();// 2
			// 아마 createStatement()안에 new Statement있을 거야.
			rs = stmt.executeQuery(query);// 3
			System.out.println("Book ID \tBOOK NAME \t\tPUBLISHER \tPRICE");

			int index = 0;
			while (rs.next()) { // next()은 튜플단위로 읽는다.
				// 1. 변수
//				bookid = rs.getInt(1); // 첫번째칸
//				bookname = rs.getString(2); // 두번째칸
//				publisher = rs.getString(3); // 세번째칸
//				price = rs.getInt(4); // 네번째칸
//
//				printBook(bookid, bookname, publisher, price);
//				printBook2();

				// 2. 배열
//				bookid_arr[index] = rs.getInt(1);
//				bookname_arr[index] = rs.getString(2);
//				publisher_arr[index] = rs.getString(3);
//				price_arr[index] = rs.getInt(4);

				// index = index + 1;

//				index++;
//				++index;

				// printBook(bookid_arr[0], bookname_arr[0], publisher_arr[0], price_arr[0]);

				// 3.객체
//				b1.bookid = rs.getInt(1);
//				b1.bookname = rs.getString(2);
//				b1.publisher = rs.getString(3);
//				b1.price = rs.getInt(4);

//				printBook_Object();

				// 4.객체 배열
				b_array[index].bookid = rs.getInt(1);
				b_array[index].bookname = rs.getString(2);
				b_array[index].publisher = rs.getString(3);
				b_array[index].price = rs.getInt(4);

				index++;
			}
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	void printBook_Obj_array() {
		for (int i = 0; i < 12; ++i) {
			System.out.print(b_array[i].bookid + "\t");
			System.out.print(b_array[i].bookname + "\t");
			System.out.print(b_array[i].publisher + "\t");
			System.out.println(b_array[i].price);
		}
	}

	// 3.객체
	void printBook_Object() {
			System.out.print(b1.bookid + "\t");
			System.out.print(b1.bookname + "\t");
			System.out.print(b1.publisher + "\t");
			System.out.println(b1.price);
		}

// 1.변수
//	void printBook(int bookid, String bookname, String publisher, int price) {
//		System.out.println(bookid + ", " + bookname + ", " + publisher + ", " + price);
//	}
// 1.변수 2방식
//	void printBook2() {
//		System.out.println(bookid + ", " + bookname + ", " + publisher + ", " + price);
//	}
// 2. 배열
/*
 * void printBookArr() { for (int i = 0; i < 10; ++i) {
 * System.out.print(bookid_arr[i] + "\t"); System.out.print(bookname_arr[i] +
 * "\t\t"); System.out.print(publisher_arr[i] + "\t\t");
 * System.out.println(price_arr[i]); } } }
 */
}

Book class

package booklist;

public class Book {
	int bookid;
	String bookname;
	String publisher;
	int price;
}

CustomerList class

package booklist;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CustomerList {
	Connection con; // 멤버 변수
	Statement stmt;
	ResultSet rs;

	// 1. 변수
//	int custid;
//	String name;
//	String address;
//	String phone;

	Customer cl;
	Customer[] c_array;
	
	public CustomerList() {
		c_array = new Customer[4];
		
		for (int i = 0; i< c_array.length; i++)
			c_array[i] = new Customer();	
	}

	void getConnection() {
		String url = "jdbc:oracle:thin:@localhost:1521:XE";
		/* 11g express edition은 orcl 대신 XE를 입력한다. */
		String userid = "c##madang"; // c##추가
		String pwd = "c##madang"; // c##추가

		try {/* 드라이버를 찾는 과정 */
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// class 객체에 forName함수. 아마 static일 것이라고 예측해볼 수 있다.
			System.out.println("드라이버 로드 성공");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {/* 데이터베이스를 연결하는 과정 */
			System.out.println("데이터베이스 연결 준비 ...");
			con = DriverManager.getConnection(url, userid, pwd);
			System.out.println("데이터베이스 연결 성공");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	void getCustomerDB() {
		String queryc = "SELECT Custid, Name, Address, Phone FROM Customer"; /* SQL 문 */
		try { /* 데이터베이스에 질의 결과를 가져오는 과정 */
			stmt = con.createStatement(); // 2
			rs = stmt.executeQuery(queryc); // 3
			System.out.println(" \tCUSTID \tNAME \tADDRESS \tPHONE");
			
			int index = 0;
			while (rs.next()) {
				//custid = rs.getInt(1); // 첫번째칸
				//name = rs.getString(2); // 두번째칸
				//address = rs.getString(3); // 세번째칸
				//phone = rs.getString(4); // 네번째칸

				//printCustomer(custid, name, address, phone);
				//printCustomer2();
				
				c_array[index].custid = rs.getInt(1);
				c_array[index].name = rs.getString(2);
				c_array[index].address = rs.getString(3);
				c_array[index].phone = rs.getString(4);

				index++;				
			}

			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	void printCustomer_Obj_array() {
		for (int i = 0; i < 4; ++i) {
			System.out.print(c_array[i].custid + "\t");
			System.out.print(c_array[i].name + "\t");
			System.out.print(c_array[i].custid + "\t");
			System.out.println(c_array[i].phone);
		}
	}

	// 1.변수
//	void printCustomer(int bookid, String bookname, String publisher, int price) {
//		System.out.println(custid + ", " + name + ", " + address + ", " + price);
//	}

	// 1.변수 2방식
//	void printCustomer2() {
//		System.out.println(custid + ", " + name + ", " + address + ", " + price);
//	}

}

Customer class

package booklist;

public class Customer {
	int custid;
	String name;
	String address;
	String phone;
}

BookStore class

package booklist;

public class BookStore {
	// 만들어진 클래스를 사용하는 부분
//	BookStore()
	void run() {
		BookList bl = new BookList();//
		bl.getConnection();// 연결 open
		bl.getBookDB(); // 연결 close
		bl.printBook_Obj_array();

		// so.printBookArr();

		CustomerList cl = new CustomerList();
		cl.getConnection();
		cl.getCustomerDB();
		cl.printCustomer_Obj_array();
	}

}

basic class

package booklist;

public class Basic {
	public static void main(String[] args) { // 메소드이면서 프로그램실행에 관여함

		new BookStore().run();
	}
}

 

 

 

 

 

 class Customer 맴버 변수에 직접 접근하지 않는 것 까지 수정해 봄.

 

 

class Customer 의 맴버 변수들 직접 접근 금지하려고 private를 앞에 붙히고 getter(), setter() 만들기

호출할 때는

.setCustid( )

.getCustid()

 

아래 CustomerList, Customer 파일만 수정, 나머지 파일들은 그대로

 

class CustomerList

package booklist;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CustomerList {
	Connection con; // 멤버 변수
	Statement stmt;
	ResultSet rs;

	// 1. 변수
//	int custid;
//	String name;
//	String address;
//	String phone;

	Customer cl;
	Customer[] c_array;
	
	public CustomerList() {
		c_array = new Customer[4]; //객체 아니고 배열일 뿐!(공간)
		//객체 배열을 만들었으면 반드시 객체배열안에 들어갈 "객체"원소를 만들어야 된다.
		for (int i = 0; i< c_array.length; i++)
			c_array[i] = new Customer(); //
	}

	void getConnection() {
		String url = "jdbc:oracle:thin:@localhost:1521:XE";
		/* 11g express edition은 orcl 대신 XE를 입력한다. */
		String userid = "c##madang"; // c##추가
		String pwd = "c##madang"; // c##추가

		try {/* 드라이버를 찾는 과정 */
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// class 객체에 forName함수. 아마 static일 것이라고 예측해볼 수 있다.
			System.out.println("드라이버 로드 성공");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		try {/* 데이터베이스를 연결하는 과정 */
			System.out.println("데이터베이스 연결 준비 ...");
			con = DriverManager.getConnection(url, userid, pwd);
			System.out.println("데이터베이스 연결 성공");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	void getCustomerDB() {
		String queryc = "SELECT Custid, Name, Address, Phone FROM Customer"; /* SQL 문 */
		try { /* 데이터베이스에 질의 결과를 가져오는 과정 */
			stmt = con.createStatement(); // 2
			rs = stmt.executeQuery(queryc); // 3
			System.out.println(" \tCUSTID \tNAME \tADDRESS \tPHONE");
			
			int index = 0;
			while (rs.next()) {
				//1. 변수
				//custid = rs.getInt(1); // 첫번째칸
				//name = rs.getString(2); // 두번째칸
				//address = rs.getString(3); // 세번째칸
				//phone = rs.getString(4); // 네번째칸

				//printCustomer(custid, name, address, phone);
				//printCustomer2();
				
				//변수 직접 접근 금지
//				c_array[index].custid = rs.getInt(1);
//				c_array[index].name = rs.getString(2);
//				c_array[index].address = rs.getString(3);
//				c_array[index].phone = rs.getString(4);
				
				//객체 배열에 담기
				c_array[index].setCustid(rs.getInt(1));
				c_array[index].setName(rs.getString(2));
				c_array[index].setAddress(rs.getString(3));
				c_array[index].setPhone(rs.getString(4));
				
				index++;			
			}

			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	void printCustomer_Obj_array() {
		for (int i = 0; i < 4; ++i) {
			//변수 집접 접근 금지!
//			System.out.print(c_array[i].custid + "\t");
//			System.out.print(c_array[i].name + "\t");
//			System.out.print(c_array[i].address + "\t");
//			System.out.println(c_array[i].phone);
			
			System.out.print(c_array[i].getCustid()+ "\t");
			System.out.print(c_array[i].getName()+ "\t");
			System.out.print(c_array[i].getAddress()+ "\t");
			System.out.println(c_array[i].getPhone()+ "\t");
		}
	}

	// 1.변수
//	void printCustomer(int bookid, String bookname, String publisher, int price) {
//		System.out.println(custid + ", " + name + ", " + address + ", " + price);
//	}

	// 1.변수 2방식
//	void printCustomer2() {
//		System.out.println(custid + ", " + name + ", " + address + ", " + price);
//	}

}

 

class Customer

package booklist;

public class Customer {
	private int custid;
	private String name;
	private String address;
	private String phone;

	public int getCustid() {
		return custid;
	}

	public String getName() {
		return name;
	}

	public String getAddress() {
		return address;
	}

	public String getPhone() {
		return phone;
	}

	public void setCustid(int custid) {
		this.custid = custid;
	}

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

	public void setAddress(String address) {
		this.address = address;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

}

 

 

printCustomer_Obj_array() 부분 수정

->print1, print2, print3, print4

 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;



public class CustomerList 
{
	//1.멤버변수
	private Connection con; // 멤버변수
	private Statement stmt;
	private ResultSet rs;
	
	//1.멤버변수
//	private int custid;
//	private String name;
//	private String address;
//	private String phone;
	
	//2.배열
	private int custid2[]; // 쩜! -> 레퍼런스(연결)
	private String name2[];
	private String address2[];
	private String phone2[];
	
	//3.객체
//	class Customer2{
//		private int custid;
//		private String name;
//		private String address;
//		private String phone;
//	}	
	Customer cs;
	
	//4.객체 배열
	Customer cs2[];
	
	//생성자
	public CustomerList()
	{
		//1.변수 초기화
//		custid 	= 0;
//		name 	= "";
//		address = "";
//		phone	= "";
		
		//2.배열 초기화
		custid2  = new int[5];
		name2	 = new String[5];
		address2 = new String[5];
		phone2	 = new String[5];
		
		//3.객체 초기화
		cs = new Customer();
		
		//4.객체 배열 초기화
		cs2 = new Customer[5];//객체 아님! 배열일 뿐(공간)
		//4-1.객체 배열을 만들었으면, 
		//반드시 객체배열안에 들어갈 "객체"원소를 만들어야 된다.
		for(int i=0; i<5; i++)
			cs2[i]  = new Customer();//5개의 객체 생성
	}
	
	

	public void getConnection() 
	{
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String userid =  "c##madang"; //c##추가
		String pwd = "c##madang"; //c##추가
	   
		try 
		{
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("드라이버 로드 성공");
		}
		catch (ClassNotFoundException e) 
		{
		   e.printStackTrace();
		}
		
		try 
		{
		   System.out.println("데이터베이스 연결 준비 .....");
		   con = DriverManager.getConnection(url,userid,pwd);
		   System.out.println("데이터베이스 연결 성공");
		}
		catch (SQLException e) 
		{
		   e.printStackTrace();
		}
	}

	public void getCustomer_DB() //하는 일이 뭐냐?
	{ 
		String query = "SELECT custid, name, address, phone  FROM customer";
		try 
		{
			stmt = con.createStatement(); //2
			rs = stmt.executeQuery(query); //3
			System.out.println("BOOK ID \tBOOK NAME \t\tPUBLISHER \t\t\tPRICE");
			
			int index=0;
			while (rs.next ()) 
			{
				//1.변수에 담기
//				custid 	= rs.getInt(1);
//				name 	= rs.getString(2);
//				address	= rs.getString(3);
//				phone	= rs.getString(4);
				
//				print1();
				
				//2.배열에 담기
//				custid2[index] 	= rs.getInt(1);
//				name2[index] 	= rs.getString(2);
//				address2[index]	= rs.getString(3);
//				phone2[index]	= rs.getString(4);
//				
//				index++;
				
				//3.객체에 담기 //변수 직접 접근 금지!
//				cs.custid 	= rs.getInt(1);
//				cs.name 	= rs.getString(2);
//				cs.address	= rs.getString(3);
//				cs.phone	= rs.getString(4);
				
//				cs.setCustid(rs.getInt(1));
//				cs.setName(rs.getString(2));
//				cs.setAddress(rs.getString(3));
//				cs.setPhone(rs.getString(4));
//				
//				print3();
				
				//4.객체 배열에 담기,  멤버변수에 직접 접근 금지!
//				cs2[0].custid 	= rs.getInt(1);
//				cs2[0].name 	= rs.getString(2);
//				cs2[0].address	= rs.getString(3);
//				cs2[0].phone	= rs.getString(4);
				
				cs2[index].setCustid(rs.getInt(1));
				cs2[index].setName(rs.getString(2));
				cs2[index].setAddress(rs.getString(3));
				cs2[index].setPhone(rs.getString(4));
				
				index++;
			}
			con.close();
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}
	
//	private void print1()
//	{
//		System.out.print(custid + "\t");
//		System.out.print(name+ "\t");
//		System.out.print(address+ "\t");
//		System.out.println(phone+ "\t");
//	}
	
//	void print2()
//	{
//		for(int index=0; index<5; ++index)
//		{
//			System.out.print(custid2[index] + "\t");
//			System.out.print(name2[index]+ "\t");
//			System.out.print(address2[index]+ "\t");
//			System.out.println(phone2[index]+ "\t");
//		}
//	}
	
	void print3()
	{
		//변수 직접 접근 금지!
//		System.out.print(cs.custid + "\t");
//		System.out.print(cs.name+ "\t");
//		System.out.print(cs.address+ "\t");
//		System.out.println(cs.phone+ "\t");
		
		//그래서 멤버 메소드를 통해서 접근
		System.out.print(cs.getCustid() + "\t");
		System.out.print(cs.getName()+ "\t");
		System.out.print(cs.getAddress()+ "\t");
		System.out.println(cs.getPhone()+ "\t");
	}
	
	void print4()
	{
		//변수 직접 접근 금지!
//		for(int i=0; i<5;i++)
//		{
//			System.out.print(cs2[i].custid + "\t");
//			System.out.print(cs2[i].name+ "\t");
//			System.out.print(cs2[i].address+ "\t");
//			System.out.println(cs2[i].phone+ "\t");
//		}
		
		//그래서 멤버 메소드를 통해서 접근
		//변수 직접 접근 금지!
		for(int i=0; i<5;i++)
		{
			System.out.print(cs2[i].getCustid() + "\t");
			System.out.print(cs2[i].getName()+ "\t");
			System.out.print(cs2[i].getAddress()+ "\t");
			System.out.println(cs2[i].getPhone()+ "\t");
		}
		
	}

}

'DATA BASE' 카테고리의 다른 글

JSP(JavaServer Pages) 맛보기  (0) 2020.04.23
설계 - 데이터 모델링  (0) 2020.04.23
자바랑 DB연동  (0) 2020.04.22
SQL 내장 함수 숫자, 문자, 날짜, 시간  (0) 2020.04.16
관계 데이터 모델  (0) 2020.04.16