2013. 7. 29. 11:40

Interface Iterator<E>



다음은 Iterator 의 실제 소스다.

1
2
3
4
5
public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}


List 는 인덱스가 존재하여 단순한 for문으로도 객체의 데이터를 가져올 수 있으며

향상된 포문문을 사용하면 Set의 데이터도 가져오는게 가능하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ArrayList<String> list = new ArrayList<String>();
list.add("하나");
list.add("둘");
list.add("셋");
 
for(String ele : list) {
    System.out.println(ele);
}
 
for(int loop=0; loop<list.size(); loop++) {
    System.out.println(list.get(loop));
}
 
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(3);
set.add(2);
 
for(Integer ele : set) {
    System.out.println(ele);
}
 
 
하나
하나
1
2
3


List, Set 모두 Iterator를 구현해 놓은 클래스이기 때문에 향상된 포문을 사용할 수 있는 것이다.

하지만 Map은 인덱스도 없고 Iterator 구현도 없다. 어떻게 해야 할까



● boolean hasNext() : Iterator 객체가 다음요소를 소유하는지 여부를 불리언으로 리턴. 

● E next() : 다음요소를 리턴.

● void remove() : 컬렉션에서 Iterator 의해 반환된 마지막 요소를 제거. 


우선 아래는 List와 Set에서 Iterator를 사용하는 예제다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ArrayList<String> list = new ArrayList<String>();
list.add("하나");
list.add("둘");
list.add("셋");
 
Iterator<String> it = list.iterator();
 
while(it.hasNext()) { //Iterator 객체에 다음 데이터가 있으면 true
    String ele = it.next(); //다음 데이터를 리턴
    System.out.println(ele);
}
 
 
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(3);
set.add(2);
 
Iterator<Integer> it2 = set.iterator();
 
while(it2.hasNext()) {
    int ele = it2.next();
    System.out.println(ele);
}
 
 
하나
1
2
3


Map에선 다음과 같이 사용한다.

1
2
3
4
5
ArrayList<String> list = new ArrayList<String>();
HashMap<String, Integer> map = new HashMap<>();
map.put("일공일", 101);
map.put("이공이", 202);
map.put("삼공삼", 303);


여기서 keySet() 메서드로 key값을 Set 컬렉션으로 추출한다.

1
2
3
4
5
Set<String> set = map.keySet();
System.out.println(set);
 
 
[삼공삼, 일공일, 이공이]


이제 Iterator를 사용하여 value를 가져올 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
Iterator<String> it = set.iterator();
 
while(it.hasNext()) {
    String key = it.next();
    int value = map.get(key);
    System.out.println(key + " : " + value);
}
 
 
삼공삼 : 303
일공일 : 101
이공이 : 202


번거롭다면 향상된 포문을 써도 된다. (향상된 포문은 Java 5.0 이상에서만 사용가능)

1
2
3
4
5
6
7
8
9
10
11
Iterator<String> it = set.iterator();
 
for(String key : set) {
    int value = map.get(key);
    System.out.println(key + " : " + value);
}
 
 
삼공삼 : 303
일공일 : 101
이공이 : 202



● 완성 구문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.HashMap;
import java.util.Iterator;
 
public class LogicTest {
    public static void main(String[] args) throws Exception {
    
        HashMap<String, Integer> map = new HashMap<>();
        map.put("일공일", 101);
        map.put("이공이", 202);
        map.put("삼공삼", 303);
                 
        Iterator<String> it = map.keySet().iterator();       
         
        while(it.hasNext()) {
            String key = it.next();
            int value = map.get(key);
            System.out.println(key + " : " + value);
        }
    }
}


'java' 카테고리의 다른 글

Thread  (0) 2013.07.29
Properties  (0) 2013.07.26
Arrays  (0) 2013.07.25
File  (0) 2013.07.25
Class  (0) 2013.07.25
Posted by 1+1은?
2013. 7. 29. 11:03

출처 : http://stackoverflow.com/questions/4989583/insert-combine-value-and-select



	insert into MyTable (ColA, ColB, ColC) values ('A', 'B', 'C')


 INSERT INTO MyTable
            (ColA,
             ColB,
             ColC)
SELECT 1,
       colBB,
       colCC
FROM   MyTable2 

출처 : http://www.zetswing.com/bbs/board.php?bo_table=MySQL_LEC&wr_id=52



create table table_name select
이문은 테이블을 생성함과 동시에 바로 레코드를 입력하는 경우에 사용할수있습니다.
따라서 테이블을 다른곳에 복사할때 사용할수있습니다.
ex)select * from jun;
----------------------------
no item type amount place---
1    2   3    aaaa   ddd
2    3   4    dddd   sss
----------------------------

ex)create table jun_clone select * from jun;
-jun_clone는 새로 만들어지면서 jun과 table 스키마는 같게 되지만 index는 배제된다.
이는 primary key도 배제되어 복사된다. 한마디로 복사된 table에는 primary key나
index는 복사되지 않는다.
 
insert into table_name select
-이문은 기존에 존재하는 테이블에 select 한 내용을 insert할때 사용합니다.
단지 테이블 구조가 같아야 한다. 아니라면 컬럼 데이타형과 갯수를 맞추어야
성공가능하다.
ex)insert into table_name select * from table_name2;
-table_name2의 모든컬럼을 적용한 레코드 전부가 table_name에 입력된다.




'DBMS > MySQL' 카테고리의 다른 글

MYSQL 성능 향상 정리  (0) 2013.07.29
초급QUERY  (0) 2013.07.29
JOIN(조인) 사용하기  (0) 2013.07.29
4.0 추가기능  (0) 2013.07.29
[MySQL] 자동증가값  (0) 2013.07.29
Posted by 1+1은?
2013. 7. 26. 11:29

우선 SID가 맞는지 확인


c:\>lsnrctl services



DEDICATED 이면서 ready 상태인 SID로 설정


그래도 안된다면

D:\app\home\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora --오라클 설치 경로는 다를 수 있다.


위 파일을 다음처럼 수정한다.



# tnsnames.ora Network Configuration File: D:\app\home\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) --위 콘솔창에서 확인한 포트번호로 바꿔준다(1521 → 49179)


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) --마찬가지로 수정(1521 → 49179)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )


※ 오라클 버전이나 환경에 따라 내용은 다를 수 있음

원인은 유동아이피 이거나 컴퓨터 이름을 바꿨을 때 라는데


나 같은 경우는 

1. 오라클11g XE 쓰다가 이름변경 

2. DB연결실패ㅋ

3. 홧김에 오라클11g EE 설치 

4. 또 실패ㅋ(ORA-12505)

5. ????

6. PROFIT!!!



그래도 안된다면 listener.ora, tnsnames.ora 두 파일에서 HOST를 컴퓨터이름(네트워크이름)으로 바꿔준다.

단, 서버와 클라이언트가 같을 경우에만


※ listener.ora는 서버의 리스너설정, tnsnames.ora는 클라이언트의 접속환경 설정이다.

Posted by 1+1은?
2013. 7. 26. 09:48

Class Properties

java.lang.Object

java.util.Dictionary<K,V>

java.util.Hashtable<Object,Object>

java.util.Properties




Map 클래스를 상속받은 컬렉션의 일종. Key와 Value를 갖는다.


1
2
3
4
5
6
7
8
9
10
11
Properties prop = new Properties();
prop.put("서울의수도", "서울의수도가어디있어");
System.out.println(prop);
 
Map<String, String> map = new HashMap<>();
map.put("한국의수도", "서울");
System.out.println(map);
 
 
{서울의수도=서울의수도가어디있어}
{한국의수도=서울}

해쉬맵과 흡사하나 파일입출력 기능을 지원하며 자료형은 String만 가능


● void store(OutputStream out, String comments)

● void store(Writer writer, String comments)

객체에 저장된 데이터를 파일로 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
Properties prop = new Properties();
prop.put("서울의수도", "서울의수도가어디있어");
 
try {
     
    FileOutputStream fos = new FileOutputStream("d:\\web\\work\\test\\data\\PropTest.propfile");
    prop.store(fos, "코멘트테스트");
    fos.close();
     
    //경로를 명시하지 않으면 루트경로(워크스페이스\프로젝트명)에 저장된다
 
} catch (Exception e) {
}




● void load(InputStream inStream)

● void load(Reader reader)

맵 형태로 저장된 파일의 아스키코드를 불러와 Properties 객체에 저장

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Properties prop = new Properties();
 
try {
    FileInputStream fis = new FileInputStream("data\\PropTest.propfile");
    prop.load(fis);
    fis.close();
} catch (Exception e) {
}
 
prop.list(System.out);
 
System.out.println("\n" + prop.getProperty("서울의수도"));
 
 
-- listing properties --
서울의수도=서울의수도가어디있어
 
서울의수도가어디있어



Properties 클래스는 HashMap 과 마찬가지로 서수가 없기 때문에 각각의 값을 반복문으로 처리하려면 Iterator 를 이용한다.


예를 들어 다음과 같을때

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Properties prop = new Properties();
prop.setProperty("서울", "매우많음");
prop.setProperty("대전", "조금많음");
prop.setProperty("인천", "많음");
prop.setProperty("공주", "10만은 되려나?");
 
try {
    FileOutputStream fos = new FileOutputStream("data\\PropTest.propfile");
    prop.store(fos, "코멘트는 중요치 않아요~");
    fos.close();
     
    FileInputStream fis = new FileInputStream("data\\PropTest.propfile");
    prop.load(fis);
    fis.close();
} catch (Exception e) {
}
 
System.out.println(prop.values());
 
 
[많음, 매우많음, 조금많음, 10만은 되려나?]

여기서 이터레이터로 맵의 값을 가져오는 방법은


● Set<K> keySet() : Returns a Set view of the keys contained in this map. (HashTable 클래스의 메서드를 상속받음)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
Iterator<Object> it = prop.keySet().iterator();
 
while(it.hasNext()) {
    String key = (String) it.next();
    String value = (String) prop.getProperty(key);
     
    System.out.println(key + " : " + value);
}
 
 
인천 : 많음
서울 : 매우많음
대전 : 조금많음
공주 : 10만은 되려나?



아래처럼 아스키코드가 아니어도 인코딩처리 없이 사용할 수 있다.

("=" 를 기준 좌측이 key, 우측은 value)



※ 주의 : 한글은 불가능


1
2
3
4
5
6
7
8
9
10
11
12
13
Properties prop = new Properties();
 
try {
    FileInputStream fis = new FileInputStream("data\\PropTest.propfile");
    prop.load(fis);
    fis.close();
} catch (Exception e) {
}
 
System.out.println(prop);
 
 
{bbs.do=com.mvc.bbs.BoardAction, ÇѱÛ=ÀÌ µÇ·Á³ª?, guest.do=com.mvc.guest.GuestAction}


이 구문은 Servlet MVC2 패턴을 구현할 때 사용되니 숙지할 것.



'java' 카테고리의 다른 글

Thread  (0) 2013.07.29
Iterator  (0) 2013.07.29
Arrays  (0) 2013.07.25
File  (0) 2013.07.25
Class  (0) 2013.07.25
Posted by 1+1은?
2013. 7. 25. 17:13
■ 이클립스 jquery_min.js 파일 validator 에러 대처법
   jquery.min.js 파일에 에러가 표시되어 프로젝트에 x 표시가 되는 것을 막기위한 방법

   1) Project Explorer 탭에서 프로젝트명 선택
   2) Project->Properties->JavaScript->Include Path->Source
      프로젝트명/WebContent 아래의 Excluded 를 더블클릭
   3) Inclusion and Exclusion Patterns 창에서 Exclusion patterns Add 버튼 클릭
   4) 상황에 적합한 패턴 입력 (예 : **/jquery*.js ) 
   5) 적용시키면 에러 표시 제거됨


Posted by 1+1은?