본문 바로가기

[2016 - 2019] 학부 정리/Java

18.01.12 자바 - 필기02 미완성

[오후]

막 통으로 가져올때는 ArrayList,  수정할게 많은 것, 수정이 용이 : LinkedList

------------------------------------------------------------------------------------------------------------------------

set - hashset

import java.util.HashSet;

import java.util.Set;


public class ApiTest12 {

public static void main(String[] args) {

Set<String> set = new HashSet<>();

set.add("원빈");

set.add("장동건");

set.add("브래드피트");

set.add("조지클루니");

set.add("강동원");


//순차적으로 들어갔나 나오는거 아님. 지 맘임(hashset), 중복데이터를 받아 들이지 않음(중복만 제거)

for(String str:set) {

System.out.println(str);

}

}

}

Map - hashmap

안에데이터가 구분할 수 있는 키값이 있을때 key, value가 한상이며, key는 중복되지 않음

똑같은 key값이 중복되는게 들어오면 원래의 key갑세 들어있는 value값 삭제됨


import java.util.HashMap;

import java.util.Map;


public class ApiTest13 {

public static void main(String[] args) {

Map<String, String> map = new HashMap<>();

map.put("브래드피트", "010-1111-1111");

map.put("조지클루니", "010-1111-2222");

map.put("원빈", "010-3333-3333");

map.put("장동건", "010-1234-4531");

map.put("강동원", "010-7894-9874");

map.put("강동원", "010-9999-9999");


System.out.println(map.get("강동원")); // 키를 적으면 value값을 저장할 수있다. 키는 될수있으면 하나로!

System.out.println();

// 지맘대로 하나씩 키값을 꺼내서 던져줌

for (String key : map.keySet()) {

System.out.println(map.get(key));

}

}

}

hashtable(동기화처리O) == hashmap(동기화처리X) , 거의 같음

------------------------------------------------------------------------------------------------------------------------

jdbc(java data base connectivity)

--연결 순서

드라이버 존재하는지 확인 -> class.forName()

Statement -sql문넣기

PreparedStatement -sql문 넣기

--

일단 동작확인 후 refactory할거

------------------------------------------------------------------------------------------------------------------------

jar파일로 만들어서 사용하기

package test;


import oop.Point3D;

//외부라이브러리를 불러다가 쓸수 있다.

public class PointTest {


public static void main(String[] args) {

Point3D pt = new Point3D();

pt.setX(1000);

pt.setY(2000);

pt.setZ(3000);

System.out.println(pt.getX());

}


}

------------------------------------------------------------------------------------------------------------------------

https://sourceforge.net/

http://apache.org/

api, md5,sha512


package api;


import org.apache.commons.codec.digest.DigestUtils;


public class ApiTest14 {

public static void main(String[] args) {

String pw = "12345678";

//비밀번호를 암호화 시킴-> DB에 저장할때 한단계 암호화 시켜 저장

System.out.println(DigestUtils.sha512Hex(pw));

}

}

------------------------------------------------------------------------------------------------------------------------

3개를 많이쓴다. <jdbc 삼총사>

Connection conn = null;

Statement stmt = null;

//ResultSet rs = null; //조회(select)

stmt.excute : DDL문 - 많이 안씀

stmt.excuteQuery : select 같은거 던지고 result받을때 쓰는 것(결과를 돌려 받는거)

stmt.excuteUpdate : select를 제외한 DML쓸 때

2개 외워두셈


package jdbc;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;


import org.apache.commons.codec.digest.DigestUtils;


public class InsertTest {

public static void main(String[] args) {

Connection conn = null;

Statement stmt = null;


try {

//드라이버가 있는지 확인

Class.forName("oracle.jdbc.OracleDriver");

// url이 일치하면 Connection을 만들어줌

conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "n1", "n1");

stmt = conn.createStatement(); // 쿼리를 수행할 수 있는 객체 생성

stmt.executeUpdate("insert into member(no, user_id, user_pw, user_name)"

+ " values(seq_member.nextval, 'next','" + DigestUtils.sha512Hex("test") + "','신해철')");

System.out.println("입력되었습니다.");


} catch (Exception e) {

e.printStackTrace();

}finally {

if(stmt != null)try {stmt.close();} catch(Exception e) {}

if(conn != null) try {conn.close();} catch(Exception e) {}

}

}

}


--------------------------------------------------------------------------------------------

간단한 로그인 테스트


id[ ]

pwd[ ]

nextLine();

select~

'-- 이용


dynamic query   vs   parameter query

쿼리전체를 먼저 던져놓음, 들어온 값을 다시 던짐..?


dynamic query는 지양하고 무조건 parameter query로 해줘야함..

1. dynamic query는 쿼리 짜는게 복잡함.. / parameter query는 간결

2. parameter query를 쓰면 보안성이 강화된다.

3. parameter query를 쓰면 성능이 좋아진다. -> 쿼리문이 반복되는걸 알아서 찾아서 해주기때문에

---------------------------------------------------------------------------------------------------

package jdbc;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.Scanner;


import org.apache.commons.codec.digest.DigestUtils;


public class LoginTest {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String user_id = "";

String user_pw = "";


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

user_id = sc.nextLine(); //'--이런식으로 아이디에 적으면 아이디만 맞으면 들어가게 되니까!!

System.out.print("비밀번호 : ");

user_pw = DigestUtils.sha512Hex(sc.nextLine());


Connection conn = null;

Statement stmt = null;

ResultSet rs = null;


String sql = 

"select no, user_name from member " +

"where user_id='"+user_id+"' and user_pw='"+user_pw+"'";

try {

Class.forName("oracle.jdbc.OracleDriver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","n1","n1");

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

if(rs.next()) { //다음 레코드가 존재하면 true

String name = rs.getString("user_name");

int no = rs.getInt("no");

System.out.println(name+"(" +user_id+")회원 님이 로그인 하였습니다.");

}else {

System.out.println("아이디 혹은 비밀번호가 틀립니다.");

}

} catch (Exception e) {

e.printStackTrace();

}finally {

if(rs != null) try {rs.close();} catch(Exception e) {}

if(stmt != null) try {stmt.close();} catch(Exception e) {}

if(conn != null) try {conn.close();} catch(Exception e) {}

}


}

}

----------------------
pstmt>>
package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

import org.apache.commons.codec.digest.DigestUtils;

public class LoginTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String user_id = "";
String user_pw = "";

System.out.print("아이디 : ");
user_id = sc.nextLine(); //'--이런식으로 아이디에 적으면 아이디만 맞으면 들어가게 되니까!!
System.out.print("비밀번호 : ");
user_pw = DigestUtils.sha512Hex(sc.nextLine());

Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;

String sql = 
"select no, user_name from member " +
"where user_id=? and user_pw=?";
try {
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","n1","n1");
stmt = conn.prepareStatement(sql);
stmt.setString(1, user_id);
stmt.setString(2, user_pw);
if(rs.next()) { //다음 레코드가 존재하면 true
String name = rs.getString("user_name");
int no = rs.getInt("no");
System.out.println(name+"(" +user_id+")회원 님이 로그인 하였습니다.");
}else {
System.out.println("아이디 혹은 비밀번호가 틀립니다.");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(rs != null) try {rs.close();} catch(Exception e) {}
if(stmt != null) try {stmt.close();} catch(Exception e) {}
if(conn != null) try {conn.close();} catch(Exception e) {}
}

}
}
----------------
println -> end키로 한글 입력!


먼저 서버에 미리 던지는것, 그리고 ?를 이용해서 던짐