기본적으로 ms-sql이 깔려있어야 한다



1. ms–sql에서 데이터 베이스 및 테이블 생성 후 데이터를 삽입








2. JDBC 드라이버 다운




http://www.microsoft.com/ko-kr/download/details.aspx?id=11774







3. 이클립스 라이브러리에 추가하기


.exe파일 압축을 풀어 그림과 같이 폴더를 탐색하다 보면 jre 폴더가 나오는데 그중 같은 버전의 jre폴더를 열어 안에 있는 내용을 이클립스 lib에 추가해준다.




프로젝트이름 위에서 우클릭 properties –> 왼쪽에서 Java Build Path 클릭 -> Add JARS로 방금 전 jre폴더 안에 있던 파일을 찾아 추가한 후 적용(Apply)







4. 소스 작성


import java.sql.*;

 

public class DBConnection {

       public static void main(String[] args) {

               String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

               String url = "jdbc:sqlserver://localhost:1433";

               String user = "kjm";

               String password = "kjm";

 

               // 1. JDBC Driver 로딩

               try {

                Class.forName(driver);

               // 2. 데이터베이스 연결 (by url with username and password)

                Connection con = DriverManager.getConnection(url, user, password);

               // 3. Statement 객체 생성

                Statement stmt = con.createStatement();

               // 4. Query 실행 (using Statement, receive the ResultSet)

                String qry = "use jmDB;  " + "select * from student ";

                ResultSet rs = stmt.executeQuery(qry);

 

                System.out.println("id\tname\tage\temail");

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

 

                // 5. ResultSet 객체를 통해 데이터 추출 (row by row)

                while (rs.next()) {

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

                 String gender = rs.getString("stu_name");

                 String id = rs.getString("age");

                 String pw = rs.getString("stu_email");

            

                 System.out.print(name);

                 System.out.print("\t"+gender);

                 System.out.print("\t"+id);

                 System.out.println("\t"+pw);

               

                }

                // 6. 자원 반납

                rs.close();

                stmt.close();

                con.close();

               } catch (ClassNotFoundException e) {

                e.printStackTrace();

               } catch (SQLException e) {

                e.printStackTrace();

               }

              }

}

 

실행시키면 다음과 같은 결과를 얻을 수 있다.




-끗-

'Programming > JAVA' 카테고리의 다른 글

자바 암호화시키기  (1) 2018.01.12
[자바]학점 변환기 파일  (0) 2018.01.04
자바 웹 크롤러 예제  (0) 2017.10.27
자바 설치하기(리눅스)  (1) 2017.08.23
MS-SQL(데이터베이스) 연동하기  (0) 2017.07.07
ConcurrentHashMap vs collections.synchronizedMap  (1) 2017.05.17

포인터의 배열배열의 포인터??


int (*a)[3]과 int *a[3] 이 두개의 차이점은 괄호가 있는지와 없는지이다. 


하지만 이 괄호의 유무가 바로 포인터의 배열과 배열의 포인터를 가르는 기준이다.


C언어에서는 "[ ]"의 우선순위는 " * "의 우선순위보다 높다


때문에 *a[3]이라고 선언할 경우 배열은 배열이지만 값이 포인터 즉, 포인터의 배열 나타내는 것이고,


 (*a)[3] 포인터는 포인터이지만 열의 크기가 3인 2차원 배열을 가리키는 포인터(배열 포인터)이다.






위의 소스를 실행해보면 다음과 같은 결과를 얻을 수 있다.




[그림 1 - 1]


[그림1-1]과 같은 코드에서 testchar(1)+double(8)+int(4) 13으로 알고 있을 것이다.

하지만 실제 코드를 쳐 보면 예상하던 사이즈와 다른 것을 알수 있다.

 

이것은 내가 현재 쓰고 있는 64비트 컴퓨터에서 64비트 컴파일러를 사용하여 8바이트 데이터를 처리하는 것에 가장 최적화되어 있고 이러한 이유로 데이터를 저장하기 위한 공간을 8바이트씩 할당 받기 때문이다.

 

위에 코드를 예를 들면

 

char형을 저장하기 위해 8바이트를 할당받고 char형을 저장한다. 그러면 7바이트가 남는데 그 남은 공간에 double(8)를 저장할 수 없어 7바이트를 빈공간으로 남겨두고 바로 8바이트를 다시 할당하는 것이다.


char 

2

 double

 

 

 

 

 

 

 




이러한 공간낭비를 줄이기 위해서는 1) 8바이트로 저장될 것을 고려하여 저장하는 방법2) 특별한 전처리어를 사용하면 된다.

 

1) 먼저 8바이트가 저장될 것을 고려하여 저장하여 보자.

 

8바이트가 저장될 것을 고려하여 저장할 경우 구조체의 멤버 변수 선언의 순서가 중요하다

 

순서는 다음과 같이 바꿀수 있다.

double         double

int     or     char

char           int



double 

 

 

 

 

 

 

 

 int

 

 

 

 char

 

 

 




[그림 1 - 2]


2) #pragma pack() 전처리어 사용


[그림 1 - 3]


pragma pack(1)에서 1 1바이트 단위로 저장하겠다는 것이다.

 

, CPU64비트이기 때문에 가장 빠르게 읽을 수 있는 데이터의 단위는 8바이트이다.

그렇기 때문에 저장할 때 1이라고 선언하고 나중에 원래대로 8바이트 단위로 바꾸지 않는 다면 속도저하의 문제가 발생할 수 있다.




출처:http://javawoo.tistory.com/30

먼저 collections.synchronized___이란...


컬렉션(List, Set, Map 등등)을 싱글 스레드 환경에서 사용하다 멀티 스레드 환경으로 전달할 때 컬렉션을 동기화(synchronized) 된 컬렉션으로 리턴해주는 메소드


->한마디로 여러개의 스레드가 하나의 컬렉션에 접근할 때 생기는 오류를 동기화시킴으로써 해결해주는 메소드이다.



리턴 타입

  메소드(매개 변수) 

 설명

 List<T>

 synchronizedList(List<T> list) 

 List를 동기화된 List로 리턴

 Map<K,V>

 synchronizedMap(Map<K,V> map)

 Map을 동기화된 Map으로 리턴

 Set<T> 

 synchronizedSet(Set<T> s)

  Set을 동기화된 Set으로 리턴



 

여기서 synchronizedMap은 Map 컬렉션이 멀티 스레드에 안정되게 하기 위한 메소드이다. 

하지만, 위와 같이 동기화를 시켰을 때 하나의 스레드가 전체 컬렉션의 모든 자원 잠금시키기 때문에 전체적으로 빠르게 처리하지는 못한다.  이런 현상을 해결하기 위해 나온 것이 바로 ConcurrentHashMap 이다.


ConcurrentHashMap 은 멀티 스레드에도 마찬가지로 안전하면서도 부분 잠금을 사용하기 때문에 멀티 스레드가 요소를 병렬적으로 처리할 수 있다. , 이용하려는 자원만 잠금하고 나머진 다른 스레드가 접근할 수 있도록 하는 것이다.

'Programming > JAVA' 카테고리의 다른 글

자바 암호화시키기  (1) 2018.01.12
[자바]학점 변환기 파일  (0) 2018.01.04
자바 웹 크롤러 예제  (0) 2017.10.27
자바 설치하기(리눅스)  (1) 2017.08.23
MS-SQL(데이터베이스) 연동하기  (0) 2017.07.07
ConcurrentHashMap vs collections.synchronizedMap  (1) 2017.05.17
  1. binny 2017.05.18 19:05

    ㅎㅅㅎ 좋은정보 감사합니당

+ Recent posts