JAVA_DAY5 (Final)

이정찬·2023년 1월 27일
0

JAVA

목록 보기
5/5

4일차 추가

  • Object 리스트 비교하기
List<MemberVO> vos= Arrays.asList(
	new MemberVO(10, "admin10", "pw10", "name10", "tel10"),
	new MemberVO(11, "admin11", "pw11", "name11", "tel11"),
	new MemberVO(13, "admin13", "pw13", "name13", "tel13")
);
		
vos.sort(new Comparator<MemberVO>() {
	@Override
	public int compare(MemberVO o1, MemberVO o2) {
		return o1.getId().compareTo(o2.getId()); // 필요한 필드 비교하면 됨
//		return o1.getNum() - o2.getNum(); // 이건 번호
	}
});

List<String> names2 = Arrays.asList("yang", "kim", "lee", "lee");
System.out.println(names2);
System.out.println(names2.stream().distinct().toArray());
System.out.println(names2.stream().filter((item) -> item.startsWith("l")));
System.out.println(names2.stream().filter((item) -> item.startsWith("l")).count()); // 2
		
for (Object string : names2.stream().map((item) -> item.startsWith("l")).toArray()) {
	System.out.println(string);
} // true, false 배열

for (Object string : names2.stream().map((item) -> "[" + item + "]").toArray()) {
	System.out.println(string);
} // 원소 하나하나가 대괄호에 감싸져 있다
        
for (Object x : names2.stream().distinct().toArray()) {
	System.out.println(x); // yang kim lee
}
  • 유용한 문자열 함수들
String str = "Yang";
System.out.println(str.startsWith("Ya")); // true
System.out.println(str.endsWith("ng")); // true

names.forEach(System.out::println); // 문자열 함수는 아니지만, 배열 출력 이렇게도 가능

Date Object

package test.com;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

public class TestDate {

	public static void main(String[] args) {
		// 날짜 타입

		System.out.println(new Date()); // Fri Jan 27 09:45:32 KST 2023
		System.out.println(new Date().getTime()); // 1674780369 (1970/1/1 밀리초, currentTimeMillis()와 같다.)
		System.out.println(new GregorianCalendar().getTime()); // 수많은 요소들이 있고, 꺼내쓰면 된다.
		System.out.println(new java.sql.Date(System.currentTimeMillis())); // 2023-01-27 (1970/1/1 부터의 밀리초를 매개변수로 받는다)
		System.out.println(new java.sql.Time(System.currentTimeMillis())); // 10:02:36 (1970/1/1 부터의 밀리초를 매개변수로 받는다)
		// 둘다 뒤에 getTime() 붙여서 밀리초 받기 가능
		System.out.println("====================================");
		System.out.println(new java.sql.Timestamp(System.currentTimeMillis())); // 2023-01-27 10:08:18.376
		System.out.println(new java.sql.Timestamp(System.currentTimeMillis()).getTime());

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		System.out.println(sdf.format(new Date())); // 2023-01-27 10:11:29.715
	}

}

String Object

package test.com;

public class TestString {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("문자열 및 대용량 문자열 처리법");
		
//		getStringTime();
		
		getBuffer();
		
		StringBuffer sb = new StringBuffer();
		sb.append("bbb");
	
		// StringBuffer 버전업
		StringBuilder sbuilder = new StringBuilder();
		sbuilder.append("ccc");
		
		String data = "aaa bbb ccc ddd"; // contains, split 등 좋은 함수가 많다.
		System.out.println(data.indexOf("cc")); // 8 (시작 인덱스)
		System.out.println(data.indexOf("x")); // -1 (없을땐 -1)
		String[] strs = data.split(" "); // 그 split 맞다.
	}

	private static void getBuffer() {
		long startTime = System.currentTimeMillis();
		
		StringBuilder sbuilder = new StringBuilder();
		for (int i = 0; i < 100000; i++) {
			sbuilder.append(i);
		}
		
		System.out.println(sbuilder.length()); // 488893
		System.out.println(System.currentTimeMillis() - startTime); // 6 ~ 10으로 나옴. 매우 빠르다.
	}

	private static void getStringTime() {
		long startTime = System.currentTimeMillis();
		
//		String name = "kim";
		CharSequence name = "kim";
		for (int i = 0; i < 100000; i++) {
//			name += i;
			name = name.toString() + i;
		}
		
		// String에 += 연산시,
		System.out.println(name.length()); // 488893
		System.out.println(System.currentTimeMillis() - startTime); // 4190, 대략 4.2초
		// CharSequence에 .toString + 연산시에도 수행시간 유사하다.
	}

	
}

JDBC

  • 사전 준비
	// java.sql의 3종세트
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;
	
	// 커넥션 정보
	private final String url = "jdbc:mysql://localhost:3306/${DB이름}?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";
	private final String user_id = "root";
	private final String user_pw = "1234";
  • Driver 연동
// 1. Driver 연동
try {
	Class.forName("com.mysql.cj.jdbc.Driver"); // 옆에 Package Explorer에 뜨는 경로 그대로
	System.out.println("Driver successed...");
} catch (ClassNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
  • 쿼리문 실행 (DML - INSERT, DELETE, UPDATE)
public int insert(BoardVO vo) {
	int flag = 0;
		
	try {
		conn = DriverManager.getConnection(url, user_id, user_pw);
		System.out.println("conn successed...");
			
		pstmt = conn.prepareStatement("INSERT INTO board(title, content, author) VALUES(?, ?, ?)");
		pstmt.setString(1, vo.getTitle());			
		pstmt.setString(2, vo.getContent());
		pstmt.setString(3, vo.getAuthor());
		flag = pstmt.executeUpdate(); // DML용, 성공/실패 유무만 반환
			
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		if (pstmt != null) { // 나중에 쓴 것을 먼저 닫아준다.
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	return flag;
}	
  • 쿼리문 실행(DQL - SELECT)
public ArrayList<BoardVO> searchList(String searchKey, String searchWord) {
	ArrayList<BoardVO> result = new ArrayList<>();
    	
	try {
		conn = DriverManager.getConnection(url, user_id, user_pw);
		System.out.println("conn successed...");
			
		pstmt = conn.prepareStatement("SELECT * FROM board WHERE " + searchKey + " LIKE ?;"); // 원래는 searchKey에 따라서 쿼리를 여러개 짜주는게 좋다.
		pstmt.setString(1, "%" + searchWord + "%");
			
		rs = pstmt.executeQuery(); // DQL용
			
		while (rs.next()) {
			BoardVO vo = new BoardVO();
			vo.setNum(rs.getInt("num"));
			vo.setTitle(rs.getString("title"));
			vo.setContent(rs.getString("content"));
			vo.setAuthor(rs.getString("author"));
			result.add(vo);
		}
			
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (pstmt != null) { // 나중에 쓴 것을 먼저 닫아준다.
			try {
				pstmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
		
        return result;
	}
}
profile
개발자를 꿈꾸는 사람

0개의 댓글