Visual Studio로 개발을 진행할 때 MySQL DB를 Server Explorer에 추가하는 방법에 대해 안내 드립니다.

  1. MySQL ODBC Connector의 설치가 필요합니다.
  2. 이제 DSN(Data Source Name)을 생성합니다. 시스템에 DSN 몇 개를 생성하여도 상관이 없으며, 이 DSN은 OS에서 Application에 Data Source로의 연결정보를 제공하는 용도로 사용됩니다.
    1. [제어판]-[관리도구]를 엽니다.
      image
    2. [데이터 원본(ODBC)]를 엽니다.
      image
    3. DSN을 등록할 수 있는 창이 나타납니다.
      image
      • File DSN : *.dsn 파일에 Text형태로 Data Source 접속 정보를 저장합니다.
      • System DSN : 시스템(OS)의 모든 사용자를 위한 DSN을 전역자원으로 등록합니다. 실제 정보는 Registry에 저장됩니다.
      • User DSN : 해당 사용자를 위한 DSN을 전역자원으로 등록합니다. Registry에 저장됩니다.
    4. 어떤 DSN을 선택해도 결국 방법이 다를 뿐 Data Source에 접속할 수 있습니다. 여기에서는 [사용자 DSN]에 추가를 하겠습니다. [사용자 DSN] 탭에서 [추가(D)…]버튼을 클릭합니다.
    5. [MySQL ODBC 5.1 Driver]를 선택합니다.
      image
    6. 아래와 같이 Data Source에 대한 정보를 입력합니다.
      image
      • Data Source Name : 해당 DSN을 가장 잘 설명하는 이름
      • Description : 해당 DSN에 대한 설명
      • TCP/IP Server : MySQL DB IP
      • Port : MySQL DB Port. 기본 값은 3306
      • User : DB에 접근 허용된 사용자 ID
      • Password : User의 Password
      • Database : 대상 DB
    7. 위 정보를 모두 입력하면 [Text]버튼을 클릭하여, 연결이 성공적으로 이루어지는지 확인합니다.
      image
    8. 아래 그림과 같이 DSN이 추가됩니다. 이제 [ODBC 데이터 원본 관리자] 창은 닫습니다.
      image
    9. [Visual Studio]를 실행하고 [Server Explorer]를 엽니다.
      image
    10. [Data Connections]를 마우스 오른쪽 버튼으로 클릭하고 [Add Connection]을 선택합니다.
      image
    11. [Data source]를 변경하기 위해 [Change…]버튼을 클릭합니다.
      image
    12. 아래 그림과 같이 [<other>]를 선택하고 [.NET Framework Data Provider for ODBC]를 선택하고 [OK]버튼을 클릭합니다.
      image
    13. 위에서 생성했던 DSN을 선택하고 ID와 Password를 입력합니다.
      image
    14. 마지막으로 [Text Connection] 버튼을 클릭하여 정상 연결되는지 확인합니다.
      image
    15. [OK] 버튼을 클릭하면 MySQL DB의 DB Connection이 추가됩니다.
      image

[출처 :http://nsinc.tistory.com/71]

StrictMode

 

Android에서 오류를 검출해주는 방안 중의 하나로, 진입점에서 설정하면 실행하는 동안 이슈가 될 수 있는 부분들에 대하여 검출되며, 로그로 출력하거나 팝업을 띄울 수 도 있다.

보통 로그로 출력하게 해서 "StrictMode" 태그로 필터링 하면 확인할 수 있다.

메모리 Leak이나 Cursor가 Close되지 않은 부분 등 유용한 정보를 확인할 수 있어 개발 기간 동안 활성화 하면 도움이 된다.

 

보통 Activity나 Application 클래스 onCreate 메소드 내에서 설정, 디폴트로 할 경우 아래 코드 추가

 

StrictMode.enableDefaults();

 

 

자세한 내용은 정리된 사이트가 많아 링크로 대신한다.

 

Android developers blog

http://android-developers.blogspot.kr/2010/12/new-gingerbread-api-strictmode.html

KTH 개발 블로그 : 한글로 잘 설명됨

http://dev.kthcorp.com/2012/01/31/android-strict-mode-howto/

Reference of StrictMode class

http://developer.android.com/reference/android/os/StrictMode.html

[출처] StrictMode|작성자 이도운

'Android' 카테고리의 다른 글

각종 안드로이드 인텐트 intent 사용법  (0) 2013.09.12

How MySQL TIMESTAMP stroed in the database

MySQL TIMESTAMP 열(column)의 형식은 'YYYY-MM-DD HH:MM:SS'이며 19개 문자로 고정됨.

MySQL TIMESTAMP는 '1970-01-01 00:00:01'을 시작으로 초(second)를 4 byte의 숫자로 저장함.

4 byte의 수치에 대응되는 범위에 따라 TIMESTAMP는 '1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'의 범위를 갖음.

 

MySQL TIMESTAMP 값은 connection's time zone에 종속적.

MySQL TIMESTAMP에 값을 입력할 때, 이 값은 connection's time zone에서 Universal Coordinated Time(UTC, 국제 표준시)로 변환됨.

값을 선택하면, server는 UTC에서 connection's time zone으로 변환하므로 입력했던 동일한 값을 얻음.

 

create table test_timestamp(t1 timestamp);

 

set time_zone='+00:00';

 

insert into test_timestamp values('2008-01-01 00:00:01');

 

select t1

from test_timestamp;

 


 

 

 

+---------------------+

| t1 |
+---------------------+
| 2008-01-01 00:00:01 |
+---------------------+
1 row in set (0.00 sec)

 



 

set time_zone='+03:00';

select t1
from test_timestamp;

 

 

 

+---------------------+

| t1 |
+---------------------+
| 2008-01-01 03:00:01 |
+---------------------+
1 row in set (0.00 sec)

 





INSERT and UPDATE TIMESTAMP column
만약 MySQL TIMESTAMP 값을 생략하거나 NULL을 입력한다면, 현재 TIMESTAMP는 자동적으로 입력됨. 이것은 MySQL TIMESTAMP의 자동 초기화 특성임.

다른 열의 값을 변경했을 때, MySQL TIMESTAMP는 현재 TIMESTAMP로 자동 갱신됨. TIMESTAMP가 갱신되기 위해선 현재의 값을 다른 값으로 변경하는 경우에만 갱신됨.

 

 

CREATE TABLE tbl_name(

created_on TIMESTAMP DEFAULT 0

changed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

 

--

필드 지정시 날짜와 관련이 되면 이전부터 많이들 TIMESTAMP를 사용하였는데요
일단, 둘의 차이점을 알아봅시다
TIMESTAMP만의 특성입니다.

서버의 시간에 의존(UTC에 따라 변형된다는 의미로 해석하면 될 것 같네요)
범위가 '1970-01-01 00:00:01' UTC to '2038-01-09 03:14:07' UTC로 제한됨
on update CURRENT_TIMESTAMP 옵션을 사용할 수 있다.


이러한 차이는 쉽게 말하면
DATETIME는 순수하게 상수로 된 날짜로 인식하지만,
TIMESTAMP는 서버시간에 의한 의존하는 날짜 개념이죠.(서버 time zone 변경시, 바뀝니다)

해외서버를 사용한다면, 문제를 일으킬 수 있는 부분입니다.
국내에서만 사용 할 경우는 별다른 문제가 일어나지 않겠지요.(아마도??)

on update CURRENT_TIMESTAMP 이건, UPDATE시 시간도 업데이트 해주는건데, TIMESTAMP타잎에서만 사용할수 있습니다. 수정된 시간 저장시 매우 유용하게 사용할 수 있는 거죠.

반면에,
클라이언트의 시간을 서버에서 받아서 저장을 하다면, TIMESTAMP보다는 DATETIME을 사용을 권장하게 되겠네요.

등록시간은 DATETIME으로 잡고, 수정시간은 TIMESTAMP on update CURRENT_TIMESTAMP로 사용하면, 편할 거 같다는 생각이 듭니다. 물론 UTC나 timezone에 영향은 고려해야겠지요.

DATETIME
- 범위 : '1000-01-01 00:00:00' 에서 '9999-12-31 23:59:59'

TIMESTAMP[(M)]
- 범위 : '1970-01-01 00:00:00' 에서 2037

출처:http://jpss.ta3ke.com/59

 

'DB > Mysql' 카테고리의 다른 글

Mysql 데이터 타입  (0) 2013.06.21
MySQL 기본 쿼리문 정리  (0) 2013.06.17

'Android > 참고사이트' 카테고리의 다른 글

Android 개발 참고  (0) 2013.06.09

 

연락처 Intent

  • 연락처 조회
intent = new Intent(Intent.ACTION_VIEW, 
Uri.parse("content://contacts/people/" +
String.valueOf(contact.getId())));
startActivity(intent);
  • 연락처 등록
intent = new Intent(Intent.ACTION_INSERT, 
Uri.parse("content://contacts/people"));
startActivity(intent);
  • 연락처 수정
intent = new Intent(Intent.ACTION_EDIT, 
Uri.parse("content://contacts/people/" +
String.valueOf(contact.getId())));
startActivity(intent);
  • 연락처 삭제
intent = new Intent(Intent.ACTION_DELETE, 
Uri.parse("content://contacts/people/" +
String.valueOf(contact.getId())));
startActivity(intent);

전화 Intent

  • 권한 설정 (AndroidManifest.xml)
전화 걸기         : CALL_PHONE = "android.permission.CALL_PHONE"
긴급 통화 : CALL_PRIVILEGED =
"android.permission.CALL_PRIVILEGED"
폰 상태 읽기 : READ_PHONE_STATE =
"android.permission.READ_PHONE_STATE"
폰 상태 수정 : MODIFY_PHONE_STATE =
"android.permission.MODIFY_PHONE_STATE"
브로드케스팅 수신 : PROCESS_OUTGOING_CALLS =
"android.permission.PROCESS_OUTGOING_CALLS"
전화 걸기 이전 : ACTION_NEW_OUTGOING_CALL =
"android.intent.action.NEW_OUTGOING_CALL"
  • 전화걸기 화면
Intent intent = new Intent(Intent.ACTION_DIAL, 
Uri.parse("tel:" + TelNumber));
startActivity(intent);
  • 전화걸기
Intent intent = new Intent(Intent.ACTION_CALL, 
Uri.parse("tel:" + TelNumber));
startActivity(intent);

SMS Intent

  • 권한 설정 (AndroidManifest.xml)
수신 모니터링       : RECEIVE_SMS = "android.permission.RECEIVE_SMS"
읽기 가능 : READ_SMS = "android.permission.READ_SMS"
발송 가능 : SEND_SMS = "android.permission.SEND_SMS"
SMS Provider로 전송 : WRITE_SMS = "android.permission.WRITE_SMS"
: BROADCAST_SMS = "android.permission.BROADCAST_SMS"
  • SMS 발송 화면
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra("sms_body", "The SMS text");
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);
  • SMS 보내기
Intent intent = new Intent(Intent.ACTION_SENDTO, 
Uri.parse("smsto://" + contact.getHandphone()));
intent.putExtra("sms_body", "The SMS text");
intent.setType("vnd.android-dir/mms-sms");
startActivity(intent);

이메일 Intent

  • 이메일 발송 화면
Intent intent = new Intent(Intent.ACTION_SENDTO, 
Uri.parse("mailto:" + contact.getEmail()));
startActivity(intent);

브라우저 Intent

  • Browser에서 URL 호출하기
new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com/"));
startActivity(intent);
  • 브라우저에서 검색
Intent intent = new Intent(Intent.ACT ION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "검색어");
startActivity(intent);

지도 Intent

  • 지도 보기
Uri uri = Uri.parse ("geo: 38.00, -35.03");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

안드로이드 마켓 Intent

  • 안드로이드 마켓에서 Apps 검색
Uri uri = Uri.parse("market://search?q=pname:전제_패키지_명");  
//--- 예) market://search?q=pname:com.jopenbusiness.android.smartsearch
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
  • 안드로이드 마켓의 App 상세 화면
Uri uri = Uri.parse("market://details?id=전제_패키지_명");
//--- 예) market://details?id=com.jopenbusiness.android.smartsearch
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

갤럭시S의 Intent

  • 패키지명과 클래스명으로 App 호출
intent = new Intent(Intent.ACTION_MAIN);
intent.setComponent(new ComponentName("패키지명", "전체_클래스명"));
startActivity(intent);
  • 전화, SMS
  • 전화번호부 : com.android.contacts, com.sec.android.app.contacts.PhoneBookTopMenuActivity
  • 전화 : com.sec.android.app.dialertab, com.sec.android.app.dialertab.DialerTabActivity
  • 최근기록 : com.sec.android.app.dialertab, com.sec.android.app.dialertab.DialerTabDialerActivity
  • 메시지 : com.sec.mms, com.sec.mms.Mms
  • 이메일 : com.android.email, com.android.email.activity.Welcome
  • 일정 : com.android.calendar, com.android.calendar.LaunchActivity
  • 인터넷 : com.android.browser, com.android.browser.BrowserActivity
  • Google의 Android용 앱
  • 검색 : com.google.android.googlequicksearchbox, com.google.android.googlequicksearchbox.SearchActivity
  • 음성 검색 : com.google.android.voicesearch, com.google.android.voicesearch.RecognitionActivity
  • Gmail : com.google.android.gm, com.google.android.gm.ConversationListActivityGmail
  • 지도 : com.google.android.apps.maps, com.google.android.maps.MapsActivity
  • 위치찾기 : com.google.android.apps.maps, com.google.android.maps.LatitudeActivity
  • YouTube : com.google.android.youtube, com.google.android.youtube.HomeActivity
  • 토크 : com.google.android.talk, com.google.android.talk.SigningInActivity
  • Goggles : com.google.android.apps.unveil, com.google.android.apps.unveil.CaptureActivity
  • Google 번역 : com.google.android.apps.translate, com.google.android.apps.translate.HomeActivity
  • Reader : com.google.android.apps.reader, com.google.android.apps.unveil.CaptureActivity
  • Voice : com.google.android.apps.googlevoice, com.google.android.apps.googlevoice.SplashActivity
  • Google 별지도 : com.google.android.stardroid, com.google.android.stardroid.activities.SplashScreenActivity
  • 카메라 : com.sec.android.app.camera, com.sec.android.app.camera.Camera
  • TV : com.sec.android.app.dmb, com.sec.android.app.dmb.activity.DMBFullScreenView
  • Android 관리
  • 환경 설정 : com.android.settings, com.android.settings.Settings

*Wi-Fi 설정 : com.android.settings, com.android.settings.wifi.WifiSettings

  • 작업 관리자 : com.sec.android.app.controlpanel, com.sec.android.app.controlpanel.activity.JobManagerActivity
  • 마켓 : com.android.vending, com.android.vending.AssetBrowserActivity

출처:

http://www.jopenbusiness.com/tc/oss/entry/Android-Intent-%ED%99%9C%EC%9A%A9-%EC%82%AC%EB%A1%80

'Android' 카테고리의 다른 글

StrictMode  (0) 2013.10.29

ERD란?
Entity Relationship Diagram의 약자로 개체관계도 라고 부릅니다.
ERD는 말로서 되어있는 요구분석사항을 그림으로 그려내어 그 관계를 도출하는 것입니다.
(참고로 Peter Chen이란 분의 박사학위논문에 처음 등장했지요...)

ERD[이 알 디]는 전략적 계획이나 또는 하향식 계획에서 자주 사용되며, 개략적인 상부계층의 데이터 다이어그램이다. 데이터의 하향식 계획은 기업을 운영하는데 관련된 실체들을 확인하고, 그것들간의 관계들을 결정한다. 기업체를 효율적으로 운영하기 위해서는 어느 정도의 데이터가 필요하게 되는데, 이러한 데이터는 컴퓨터가 사용되지 않아도 상관은 없지만, 컴퓨터는 정확한 데이터를 필요한 사람에게 정확하게 전달하는데 큰 도움을 준다. 문제가 되는 데이터는 정연하고, 자세히 설명될 필요가 있으므로, 이를 위해 데이터에 관한 데이터가 필요하다. 데이터에 관한 데이터를 흔히 메타데이터라고 부르는데, 데이터 모델들은 이러한 메타데이터를 포함하고 있다.

데이터 분석가들은 조직의 데이터를 그들에게 이해시키고, 조직을 관리하는데 가장 유익하게될 데이터를 만들기 위해 최종사용자들 및 중역들로부터 많은 도움을 필요로 한다. 이들과의 의사소통을 원활히 하기 위해, 그들은 데이터를 도식화하는 명료한 방법이 필요하며, ERD와 같은 다이어그램은 조직의 정보자원을 전반적으로 계획하는데 있어 필수적이며 유용한 도구이다. ERD는 개발되고 나면, 좀더 자세한 데이터 모델로 분해될 수도 있다.

엔터티란 우리가 저장한 데이터에 관해 무언가 실제적이거나 추상적인 것을 모두 포함한다. 엔터티의 형태는 고객, 근로자, 청구서, 상품, 교대근무보고서, 영수증, 창고, 지사, 영업사원 등을 예로 들 수 있다. 각 엔터티의 이름은 보통 명사(名辭)이어야하지만, 때로는 수식어구가 사용될 수도 있다. 엔터티 형태는 같은 속성형태를 가진 엔터티들을 대표할 수 있는 이름을 붙인 일종의 부류를 나타낸다.

예를 들어 '근로자'라는 엔터티가 있다면, 그 엔터티에 속하는 '홍길동'이라는 엔터티 인스턴스가 존재할 수 있다. ERD에서 엔터티는 직사각형으로 그리며, 각 엔터티간의 관계는 좌측 그림에 예시되어 있는 것과 같은 표기방법을 이용하여 관계를 나타내게 된다

 
1. ER모델의 개념

 

   Peter Chen에 의해 제안 (1976)
        - ERD(Entity Relationship Diagram)로 표현 
   ER모델의 기본 요소
        - Entity : 시스템화 하고자 하는 사건, 사물
        - Relationship : 엔티티간, 애트리뷰트간의 연관성
        - Attribute : 엔티티, 관계성의 성질을 나타내는 더 이상 쪼갤수 없는 정보의 단위
        - 실세계의 모든 업무체계는 기본요소 3가지(Entity, Relationship, Attribute)로 모두 표현이

          가능하다. 
   확장된 요소
        - 일반화 계층 (Generalization Hierachy) : 여러 엔티간의 공통적인 특성을 파악
        - 서브세트(Sub Set): 일반화중 하나의 서브 엔티티를 갖는 경우

 

2. 개체 (Entity)

 

   개념
        - 시스템화 하고자 하는 사물이나 사건
        - 현실 세계의 객체
        - 예) 사원, 부서, 남자, 도시, 계약, 물품 등
  표기법
          
   종류
        - 일반 엔티티, 약 엔티티, 슈퍼 엔티티, 서브 엔티티

 

3. 관계성 (Relationship)

   정의
      - 개체간의 연관성을 나타낸다.
        예) 소속된다. 관리된다. 소유한다. 등

   표기법 :
          

   종류
     - 관계의 종류 : 이진관계, 순환관계, 삼진관계  
     - 관계성 (카디널리티, Cardinality) : 1대1, 1대N, N대N

 

4. 속성 (Attribute)

   정의

   표기법
         
   종류 : 일반속성, 키속성, 다중값 속성, 복합속송, 유도속성

 

5. 기본 ERD 작성의 사례

   *  1) 속성은 개체의 정보를 나타내므로 개체에 연결되어야 한다.
       2) 관계는 개체와 개체의 사이에서 연관을 나타낸다.

- 객체간의 관계(Relation)

Relation 이란 다이어그램의 '동사'로서 객체들이 서로 어떻게 관련되어 있는지 나타낸다.

예) 학생은 강좌를 수강한다. 교수는 강좌를 강의 한다. 학생은 학과에 속한다. 교수는 학과에 속한다.

'DB > ERD' 카테고리의 다른 글

MySQL-workbench 사용하여 ER 다이어그램 작성방법  (0) 2013.08.22

아래 링크에서 관련 자료와 full source 코드를 다운 받을 수 있다.

 

SampleNFC.zip

 

StickyNotes.zip

참고 : Sticky notes  http://www.jessechen.net/blog/how-to-nfc-on-the-android-platform/

(물론 http://developer.android.com/guide/topics/connectivity/nfc/nfc.html#p2p 안드로이드 문서에도 잘 설명되어 있다.)

Sticky Notes 샘플은

1. 폰 => nfc (writing)

2. 폰 <= nfc (tag reading)

3. 폰 => 폰 (p2p data exchange)

 

위와 같이 크게 3가지 역할을 해낸다.

NFC writing, reading, exchange에 모두 NDEF (Nfc Data Exchage Format, <= Hardroid 링크)을 이용한다.

안드로이드에서 NDEF에 관한 모든 라이브러리를 제공해주므로 심각하게 고민할 필요는 아직 없다.

 

[출처] http://scintillating.tistory.com/125

+ Recent posts