package java18_0129;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;


public class SingerDao implements SingerDB {

// 생성자를 private으로 만듭니다.

private SingerDao() {

}


// 자신의 클래스 타입으로 된 static 변수를 생성

private static SingerDao dao;


// 앞에서 만든 static 변수가 null 일 때만 객체를 생성하고

// 리턴하는 static 메소드를 생성

public static SingerDao sharedInstance() {

if (dao == null) {

dao = new SingerDao();

}

return dao;

}


// 데이터베이스 사용에 필요한 변수를 선언

private Connection con;

private PreparedStatement pstm;

private ResultSet rs;


// 데이터 베이스 연결 메소드

private void connect() {

try {

con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.200:1521:xe", "scott", "tiger");

System.out.println("<★Connect Complete★>");

} catch (Exception e) {

System.out.println("예외(커넥트문제)" + e.getMessage());

e.printStackTrace();

}

}


private void close() {

try {

if (rs != null)

rs.close();

if (pstm != null)

pstm.close();

if (con != null)

con.close();

} catch (Exception e) {

System.out.println("예외(Close문제)" + e.getMessage());

e.printStackTrace();

}


}


// 전체보기 : Singer 테이블의 데이터를 전부 가져와서 리턴해주는 메소드

// 테이블의 데이터를 가져올 때는 매개변수 자리에 데이터가 필요가 없다.

// 세로로 여러개가 나올거 같으면, List

public List<Singer> getSingerlist() {

// 여러 개의 데이터를 저장할 List를 생성

List<Singer> list = new ArrayList<Singer>();

// Singer 테이블의 전체 데이터를 가져오는 SQL

String sql = "select userid, username, age, birthday from singer order by userid";

try {

// 데이터베이스 연결

connect();

// SQL 실행 객체 생성

pstm = con.prepareStatement(sql);

// select 구문 실행

rs = pstm.executeQuery();

// 데이터 읽기

while (rs.next()) {


Singer singer = new Singer();

singer.setUserid(rs.getString("userid"));

// 공백제거를 위한 trim

singer.setUsername(rs.getString("username").trim());

singer.setAge(rs.getInt("age"));

singer.setBirthday(rs.getDate("birthday"));


list.add(singer);


}

} catch (Exception e) {


System.out.println("예외" + e.getMessage());

e.printStackTrace();

} finally {

close();

}

return list;


}


// 상세보기 : Singer 테이블에서 userid를 가지고

// 데이터를 찾아오는 메소드

// id를 가지고 하나의 데이터를 가져오는 메소드 

public Singer lookUserid(String userid) {

// 데이터를 못찾으면 null을 리턴하고 데이터를 찾으면

// 그 데이터를 리턴

Singer singer = null;

String sql = "select * from singer where userid=?";

try {

// 데이터베이스 연결

connect();

// SQL 실행 객체 생성

pstm = con.prepareStatement(sql);

// pstm에 값을 바인딩

pstm.setString(1, userid);

// SQL 실행

rs = pstm.executeQuery();

// 읽어온 데이터가 있으면 singer에 대입

while (rs.next()) {

// while문 밖에다가 만들면, 없어도 만들어버리기 때문에 null이 나온다

singer = new Singer();

singer.setUserid(rs.getString("userid"));

singer.setUsername(rs.getString("username").trim());

singer.setAge(rs.getInt("age"));

singer.setBirthday(rs.getDate("birthday"));

}


} catch (SQLException e) {

System.out.println("예외" + e.getMessage());

e.printStackTrace();

} finally {

close();

}

System.out.println(singer);

return singer;

}


/****************** 데이터를 삽입하는 메소드 ********************/

public int insertSinger(Singer singer) {

int result = -1;

String sql = "insert into singer (userid, username, age, birthday) values(?,?,?,?)";


try {

// 데이터베이스 연결

connect();

// 데이터 바인딩 데이터에 값을 집어 넣기

pstm = con.prepareStatement(sql);

pstm.setString(1, singer.getUserid());

pstm.setString(2, singer.getUsername());

pstm.setInt(3, singer.getAge());

pstm.setDate(4, singer.getBirthday());


// sql실행

result = pstm.executeUpdate();


} catch (Exception e) {

System.out.println("예외(삽입메소드)" + e.getMessage());

} finally {

close();

}

return result;

}

/****************** 데이터를 삭제하는 메소드 ********************/

public int deleteSinger(String userid) {

int result = -1;

String sql = "delete singer where userid=? ";

try {

connect();

Singer singer= new Singer();

// 데이터 바인딩해서 넣기 

pstm =con.prepareStatement(sql);

pstm.setString(1, userid);

result = pstm.executeUpdate();

} catch (Exception e) {

System.out.println("예외(삭제메소드)" + e.getMessage());

}finally {

close();

}

return result ;

}

/****************** 데이터를 수정하는 메소드 ********************/

public int UpdateSinger(Singer singer ) {

int result= -1;

//userid 인 데이터를 찾아서 username을 수정

String sql = "update singer set username =? where userid=? ";

try {

connect();

pstm = con.prepareStatement(sql);

pstm.setString(1, singer.getUsername());

pstm.setString(2, singer.getUserid());

result = pstm.executeUpdate();

} catch (SQLException e) {

System.out.println("예외(삭제메소드)" + e.getMessage());

e.printStackTrace();

}finally {

close();

}

return result;

}

}


'Java > 자바 공부' 카테고리의 다른 글

테이블  (0) 2018.02.06
main  (0) 2018.01.29
view  (0) 2018.01.29
스트링을 숫자로 바꾸기  (0) 2018.01.21
꼭공부) 로또번호  (0) 2018.01.21

package java18_0129;


import java.sql.Date;

import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.List;

import java.util.Scanner;


//화면 출력을 위한 클래스

public class SingerView {

Scanner sc;


// 생성자 : 객체가 만들어 질 때 바로 수행

public SingerView() {

sc = new Scanner(System.in);

}


// 메뉴 화면을 출력하고 사용자로부터 메뉴를 입력받아서

// 리턴하는 메소드

public String menuDisplay() {

System.out.println("1.전체보기 2.상세보기 3.데이터삽입 " + "4.데이터 수정 5.데이터삭제:");

System.out.print("메뉴 선택:");

String menu = sc.nextLine();

return menu;

}


// 전체 데이터를 출력하는 메소드

public void listView(List<Singer> list) {

// 제목 출력

System.out.printf("%15s%20s%15s%15s", "아이디", "이름", "나이", "생년월일");

// 전체 데이터를 순회하면서 출력

for (Singer singer : list) {

System.out.println();

System.out.printf("%15s%15s%15d%15s", singer.getUserid(), singer.getUsername(), singer.getAge(),

singer.getBirthday());

}

System.out.println();

}


// 데이터를 조회하거나 삭제하기 위해서

// userid를 입력받는 화면출력을 하고, 입력받은 id를 리턴하는 메소드


public String setSingerUserId() {

System.out.print("Id를 입력:");

String userId = sc.nextLine();


return userId;

}


// 데이터 1개를 받아서 출력하는 메소드

public void singerDisplay(Singer singer) {

if (singer == null) {

System.out.println("찾고자 하는 아이디가 없습니다.");


} else {

System.out.print("아이디 : " + singer.getUserid());

System.out.print("이름 : " + singer.getUsername());

System.out.print("나이 : " + singer.getAge());

System.out.print("생년월일 : " + singer.getBirthday());

}

}

// 아이디, 이름, 나이, 생년월일을 입력받아서 Singer 객체로 만든 후

// 리턴해주는 메소드


public Singer insertview() {

Singer singer = new Singer();

/********************* 아이디입력 ************************/

while (true) {

System.out.println("아이디 입력 : ");

String userid = sc.nextLine();

// 아이디 필수 입력 검사

if (userid.trim().length() < 1) {

System.out.println("아이디는 필수 입력입니다/.");

continue;

}

// 아이디 중복 검사

SingerDao dao = SingerDao.sharedInstance();

Singer check = dao.lookUserid(userid);

if (check != null) {

System.out.println("중복된 아이디입니다./");

continue;

} else {

singer.setUserid(userid);


}

/********************* 이름입력 **************************/

System.out.println("이름 입력");

String username = sc.nextLine();

if (username.trim().length() < 1) {

System.out.println("이름은 필수입력 입니다 !!!!!");

continue;

} else {

singer.setUsername(username);

}

/********************* 나이입력 **************************/

System.out.println("나이 입력");

String age = sc.nextLine();

if (age.trim().length() < 1) {

System.out.println("나이는 필수 입력입니다~");

continue;

}

// 모두 숫자로 되어 있는지 검사

boolean flag = true;

for (int i = 0; i < age.length(); i = i + 1) {

char ch = age.charAt(i);

if (ch < '0' || ch > '9') {

flag = false;

break;

}

}

if (flag == false) {

System.out.println("나이는 숫자로만 구성되어야합니다. ");

continue;

} else {

singer.setAge(Integer.parseInt(age));

}


/********************* 날짜입력 **************************/

Calendar cal = new GregorianCalendar();

Date birthday = new Date(cal.getTimeInMillis());

singer.setBirthday(birthday);

break;

}

return singer;

}

//삭제할 userid를 입력받아서 리턴하는 메소드 

public String deleteView() {

System.out.print("삭제하고 싶은 아이디를 입력하시오");

String userid = sc.nextLine();

return userid;

}

//갱신할 userid 와 나머지 데이터를 입력받아서 리턴하는 메소드 


public Singer UpdateView() {

Singer singer = new Singer();

System.out.print("아이디를 입력하시오");

String userid = sc.nextLine();

singer.setUserid(userid);

System.out.print("이름 입력 : ");

String username = sc.nextLine();

singer.setUsername(username);

return singer;

}

}



'Java > 자바 공부' 카테고리의 다른 글

main  (0) 2018.01.29
dao  (0) 2018.01.29
스트링을 숫자로 바꾸기  (0) 2018.01.21
꼭공부) 로또번호  (0) 2018.01.21
버블정렬  (0) 2018.01.20
[문제] 출처 https://programmers.co.kr/learn/challenge_codes/112

strToInt 메소드는 String형 str을 매개변수로 받습니다.
str을 숫자로 변환한 결과를 반환하도록 strToInt를 완성하세요.
예를들어 str이 1234이면 1234를 반환하고, -1234이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.




package programs;

public class StrToInt {

	    public int getStrToInt(String str) {

	    	
	    	
	        return Integer.parseInt(str);
	    }
	    //아래는 테스트로 출력해 보기 위한 코드입니다.
	    public static void main(String args[]) {
	        StrToInt strToInt = new StrToInt();
	        System.out.println(strToInt.getStrToInt("-1234"));
	    }
	}





package programs;

public class StrToInt {
	public int getStrToInt(String str) {
		boolean Sign = true;
		int result = 0;

		for (int i = 0; i < str.length(); i++) {
			char ch = str.charAt(i);
			if (ch == '-')
				Sign = false;
			else if (ch != '+')
				// 아스키 코드에서 문자 1은 49 0은 48입니다. 두문자를 빼면 1
				// 아스키 코드에서 문자 2은 50 0은 48입니다. 두문자를 빼면 2
				// result에서 rsult *10을 해준 이유는 자리수를 맞추기 위해서 입니다. 
				// 처음 1이 나올 때는 result깞이 0이기에 곱했을때 1은첫째자리에 위치하게 됩니다.
				// 다음 result 값은 1이기에 곱하면 1*10하면 10+(2)를 더하면 12가되고 
				// 다음 result 값은 12이기에*10을통해 120+(3)을해서 조금씩 자릿수를 늘려나갈 수 있습니다. 
				result = result * 10 + (ch - '0');
		}
		return Sign ? 1 : -1 * result;
	}

	// 아래는 테스트로 출력해 보기 위한 코드입니다.
	public static void main(String args[]) {
		StrToInt strToInt = new StrToInt();
		System.out.println(strToInt.getStrToInt("-1234"));
	}
}


'Java > 자바 공부' 카테고리의 다른 글

dao  (0) 2018.01.29
view  (0) 2018.01.29
꼭공부) 로또번호  (0) 2018.01.21
버블정렬  (0) 2018.01.20
선택정렬  (0) 2018.01.20

package Lotto;


import java.util.ArrayList;

import java.util.HashSet;

import java.util.Random;


public class LottoMain {

public static void main(String[] args) {


// 로또 번호 출력하기

// 클래스 랜덤을 가져온다.

// Random 클래스 : 랜덤한 숫자를 만들어내기 위한 클래스

// 매개 변수 없는 생정자로 만들면 정말 랜덤이 되고

// 매개변수에 seed값을 설정하면 seed에 있는 숫자들이 하나씩

// 순서대로 리턴됩니다.

Random Lotto = new Random();

// 45나눈 나머지 값만 랜덤한 수를 만들어냅니다.

// System.out.println(Lotto.nextInt());


/// 1-45사이의 숫자를 6개 랜덤하게 저장햇거 출력

// 숫자는 중복되면 안됩니다.


// for (int i = 1; i <= 6; i++) {

// int a = Lotto.nextInt(45);

// boolean b =true;

// for (int j=0; j<= 6; j++) {

// if (a == j + 1) {

// i = i - 1;

// System.out.println();

// break;

// }

//

// if(false==b) {

//

// continue;

// }

//

// }

// System.out.println();

// }

// Set은 중복된 데이터를 저장하지 않음

// Tree는 크기순으로 저장

//

// TreeSet<Integer> random = new TreeSet<Integer>();

// while (random.size() < 6) {

// random.add(Lotto.nextInt(45) + 1); // 랜덤한 숫자를 넣어라

// }

// System.out.println(random);


System.out.println("=====================================================");

// 데이터 샘플링

// 정해진 데이터 내에서 랜덤하게 데이터를 추출하는 것

// 동일한 데이터가 추출되도 되는 경우와 그렇지 않은 경우로

// 나누어서처리

// 배열이나 리스트에 정해진 데이터를 배치하고 난 후

// 배열이나 리스트이 인덱스를 랜덤한 정수로 대입하면 됩니다.


// A,B,C,D,E 중에서 랜덤하게 3개 추출

// 중복을 허용

String[] ar = { "A", "B", "C", "D", "E", "F" };

for (int i = 0; i < 3; i = i + 1) {

System.out.print(ar[Lotto.nextInt(ar.length)] + ",");

}


// 시드 고정 -일정한 패턴의 숫자가 순서대로 출력

// Lotto.setSeed(1000);

System.out.println(Lotto.nextInt());

// ABCDEFGHIJ -- 각각은 하나의 스트링

// 10개중에서 3개를 랜덤하게 추출

// 중복된 데이터 없이 추출

// 1 . 데이터를 하나에 배열이나 리스트로 만들어야한다.

ArrayList<String> si = new ArrayList<String>();

si.add("A");

si.add("B");

si.add("C");

si.add("D");

si.add("E");

si.add("F");

si.add("G");

si.add("H");

si.add("I");

si.add("J");


// 2. 데이터가 10이므로 0-9까지의 숫자 3개를 랜덤하게

// 생서해야합니다. -중복되지 않게

Random b = new Random();

// 중복된 데이터를 저장하지 않는 컬렉션을 생성

HashSet<Integer> set = new HashSet<Integer>();

while (set.size() < 3) {

set.add(b.nextInt(5)); // 추가한다. set.size 하나씩 넣어지는 것

}

System.out.print(set);

// 3. 2번에서 생성한 숫자들을 가지고 1번에서 데이터를 추출

for (Integer ism : set) {

System.out.print(si.get(ism));

}


}


}



'Java > 자바 공부' 카테고리의 다른 글

view  (0) 2018.01.29
스트링을 숫자로 바꾸기  (0) 2018.01.21
버블정렬  (0) 2018.01.20
선택정렬  (0) 2018.01.20
super() 와 부모  (0) 2018.01.20

package 공부;


public class BubleSort {


public static void main(String[] args) {


int[] ar = { 24, 25, 26, 55, 74, 5 };


int i = 1;

while ( i<ar.length) {

int j = 0;

while (j <ar.length-i ) {

//  버블 정렬은 오른쪽으로 수를 정렬해주는 알고리즘입니다. 

// 하나씩 오른쪽으로 가장 큰수를 정렬해주기 때문에 

// 정렬한 곳은 비교할 이유가 없기에 반복문에서 감소 시켜주어야만 

// 예외가 발생하지 않습니다. 

if (ar[j] > ar[j + 1]) {

int temp = ar[j];

ar[j] = ar[j + 1];

ar[j + 1] = temp;

}

j = j + 1;

}

i = i + 1;

}

for (i = 0; i < ar.length; i++) {

System.out.println(ar[i]);

}

}


}


package 공부;


public class BubleSort {


public static void main(String[] args) {


int[] ar = { 24, 25, 26, 55, 74, 5 };


int i = ar.length;

while ( i>0) {

int j = 0;

while (j <i-1 ) {

//  버블 정렬은 오른쪽으로 수를 정렬해주는 알고리즘입니다. 

// 하나씩 오른쪽으로 가장 큰수를 정렬해주기 때문에 

// 정렬한 곳은 비교할 이유가 없기에 반복문에서 감소 시켜주어야만 

// 예외가 발생하지 않습니다. 

if (ar[j] > ar[j + 1]) {

int temp = ar[j];

ar[j] = ar[j + 1];

ar[j + 1] = temp;

}

j = j + 1;

}

i = i - 1;

}

for (i = 0; i < ar.length; i++) {

System.out.println(ar[i]);

}

}


}





이렇게 감소를 시켜주어서 버블정렬을 해주어만 오류가 생기지 않습니다. 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6

at 공부.BubleSort.main(BubleSort.java:17)

'Java > 자바 공부' 카테고리의 다른 글

스트링을 숫자로 바꾸기  (0) 2018.01.21
꼭공부) 로또번호  (0) 2018.01.21
선택정렬  (0) 2018.01.20
super() 와 부모  (0) 2018.01.20
오버로딩과 오버라이딩  (0) 2018.01.20

package 공부;


public class Choiesort {


public static void main(String[] args) {

// 선택정렬 만들기


int[] ar = { 99, 52, 51, 55, 66, 77 };


int i = 0;

// length는 6이지만 실제 비교는 5까지이다

// 마지막 숫자는 비교할 필요가 없기 때문에

// 낭비를 줄이기 위해 -1 

while (i < ar.length - 1) {


int j = i + 1;

while (j < ar.length) {


if (ar[i] > ar[j]) {


int a1 = ar[i];

ar[i] = ar[j];

ar[j] = a1;


}


j = j + 1;

}


i = i + 1;

}

for (i = 0; i < ar.length; i = i + 1) {

System.out.println(ar[i]);

}


}

}



'Java > 자바 공부' 카테고리의 다른 글

꼭공부) 로또번호  (0) 2018.01.21
버블정렬  (0) 2018.01.20
super() 와 부모  (0) 2018.01.20
오버로딩과 오버라이딩  (0) 2018.01.20
스코프에 대한 정의  (0) 2018.01.20

부모 생성자

    public class Car{
        public Car(){
            System.out.println("Car의 기본생성자입니다.");
        }
    }

    public class Bus extends Car{
        public Bus(){
            System.out.println("Bus의 기본생성자입니다.");
        }

    }
  • 생성자 테스트
    public class BusExam{
        public static void main(String args[]){
            Bus b = new Bus();
        }
    }
  • 결과

Car의 기본생성자입니다. Bus의 기본생성자입니다.

  • new 연산자로 Bus객체를 생성하면, Bus객체가 메모리에 올라갈때 부모인 Car도 함께 메모리에 올라간다.
  • 생성자는 객체를 초기화 하는 일을한다.
  • 생성자가 호출될 때 자동으로 부모의 생성자가 호출되면서 부모객체를 초기화 하게된다.

super

  • 자신을 가리키는 키워드가 this 라면, 부모들 가리키는 키워드는 super
  • super() 는 부모의 생성자를 의미한다.
  • 부모의 생성자를 임의로 호출하지 않으면, 부모 class의 기본 생성자가 자동으로 호출된다.
  • 아래 예제처럼 호출해보면 위에서 super()를 호출하지 않을때와 결과가 같다.
    public Bus(){
        super();
        System.out.println("Bus의 기본생성자입니다.");
    }

부모의 기본생성자가 아닌 다른 생성자를 호출하는 방법

  • 클래스는 기본 생성자가 없는 경우도 존재한다.
    public class Car{
        public Car(String name){
            System.out.println(name + " 을 받아들이는 생성자입니다.");
        }
    }
  • Car class가 위 처럼 수정되면, Bus생성자에서 컴파일 오류가 발생한다.
  • 부모가 기본생성자가 없기 때문에 컴파일 오류가 발생하게 되는 것이다.
  • 이런 문제를 해결하려면 자식 클래스의 생성자에서 직접 부모의 생성자를 호출해야 합니다.
    public Bus(){
        super("소방차"); // 문자열을 매개변수로 받는 부모 생성자를 호출하였다.
        System.out.println("Bus의 기본생성자입니다.");
    }


'Java > 자바 공부' 카테고리의 다른 글

버블정렬  (0) 2018.01.20
선택정렬  (0) 2018.01.20
오버로딩과 오버라이딩  (0) 2018.01.20
스코프에 대한 정의  (0) 2018.01.20
1-1 TCP Server 와 Client  (0) 2018.01.18




[오버 로딩 ] 

클래스 내에 같은 이름을 메서드를 여러개 정의 하는 것을 오버로딩이라고 한다. 

오버로딩은 조건은 

메서드의 이름이 같아야한다. 

매개변수의 개수 또는 타입이 달라야합니다. 


public int hap ( int x , int y ){

return x+y;

}

public int  hap ( int x , int y, int z  ){

return x+y;

}

public String  hap ( String x , String y ){

return x+y;

}


[오버 라이딩 ]

상속 관계에 있는 클래스들에 동일한 원형(이름과 매개변수의 자료형이 동일한메소드)의 메소드가 존재하는 것 




스타크래프트의 Attack 



Public abstract clsss Star() { 


Public void attack() { 


 }

}


public void protos extends Star{

public void attack(){

System.out.print("프로토스의 공격") 

}

}


public void Zerg extends Star{

public void attack(){

System.out.print("저그의 공격") 

}

}


public void Terran extends Star{

public void attack(){

System.out.print("테란의 공격") 

}

}

'Java > 자바 공부' 카테고리의 다른 글

선택정렬  (0) 2018.01.20
super() 와 부모  (0) 2018.01.20
스코프에 대한 정의  (0) 2018.01.20
1-1 TCP Server 와 Client  (0) 2018.01.18
log 파일 분석 > 중복된 ip를 제거하고 출력하는 방법  (0) 2018.01.18

+ Recent posts