프로그래밍 관련/DB SQL

DB - (VS,MFC)C++, JAVA 프로그래밍 데이터베이스(DB) 연동 관련

AlrepondTech 2020. 9. 11. 00:35
반응형

 

 

 

=======================

=======================

=======================

 

 

 

MFC에 DB 연동해서 사용하기 (1) 연동

1. mfc 새 프로젝트를 만들자. 나의 경우에는 프로젝트 이름이 usingDB.

2. mfc의 프로젝트 속성 설정.

나는 Dialog based이고 유니코드 라이브러리를 사용하지 않으며, MFC 표준 스타일로 만들기로 했다.

3. 리소스 뷰쪽에서 대충 DB와 연동할 형태의 인터페이스를 만든다.

나는 리스트 뷰와 버튼 하나를 깔았다. ^^

아참. 리스트뷰는 속성(프로퍼티)에서 View의 속성을 Report 로 해줘야 한다.

4. 내가 만들어 놓은 usingDB 프로젝트에 연동시킬 DB가 필요하다. 새로운 DB를 생성하자.

비주얼 스튜디오에서 View 메뉴 - Server Explorer를 누르면 서버 탐색 창이 뜬다.

맨 상위의 Data Connections에서 오른쪽 클릭하여 나온 메뉴인 Create New SQL Server를 클릭한다.

Server name 항목에 서버의 이름을 넣는다.

보통 내 컴퓨터 이름을 넣거나, (local) << 이걸 넣으면 된다고 한다.

SQL이 깔려있을 경우 서버를 쉽게 알 수 있는 방법은, 작업표시줄의 시작 메뉴- 프로그램-Microsoft SQL Server-서비스 관리자

프로그램에 들어가보면, 서버를 쉽게 알 수 있다.

New database name에는 내가 새로 만들 DB의 이름을 임의로 넣어 주고 OK 클릭.

5.

이렇게 새로운 DB가 생기는데, 여기서 Tables 폴더를 오른쪽클릭하여 새로운 테이블을 더하자.

  1. 만든 DB 테이블의 예.

ID 컬럼 왼쪽에 보면 열쇠 표시가 되어있는데 나는 ID를 기본키로 설정해놓은 것이다.

(해당하는 컬럼을 우클릭하여 뜨는 메뉴에서, 기본키 설정할 수 있다.)

7. DB 테이블을 다 만들었으면 저장.

7-1. 이러면 빈 테이블이 하나 만들어진거고, 실제 데이터를 추가해야 한다.

해당 테이블을 오른쪽클릭하여 Show Table Data로 들어가자.

여기서 테이블의 데이타를 채워준다. (쿼리문으로 채워도 된다.)

8. 테이블을 다 만들고 데이터도 차 있다면 이제 내 MFC 파일과 연동을 할 차례이다.

클래스 뷰에서 내 프로젝트를 오른쪽클릭하여 새로운 클래스를 추가하자.

추가할 프로젝트의 타입은 ATL OLEDB Consumer 이다.

9.

가장 먼저 위자드창이 뜨는데, 먼저 왼쪽 위에 있는 Data Source 를 클릭한다.

공급자를 Microsoft OLE DB Provider for SQL Server' 로 설정한 후 다음 버튼을 누르자.

10.

그러면 이렇게 연결 탭으로 넘어가게 된다.

-서버 이름을 입력해준다.

-서버에 로그온할 때 사용할 정보 입력에서, Windows NT의 통합 보안 사용을 선택한다.

-서버에 연동할 데이터베이스를 선택한다. (아까 내가 만든 걸로).

-연결 테스트를 클릭하여 잘 연결되었는지 확인해 보자. 성공했다는 메세지가 뜨면 확인을 눌러 넘어가도 좋다.

  1. 이제 어떤 테이블을 연동할지 고르는 것인데, 내가 아까 만들었던 테이블을 선택하고 OK를 누른다.

12.

고러면 드디어 클래스 생성 전 설정이 완료가 된다.

Finish를 누르면 완료. 경고창이 뜨는데 그냥 넘어가면 된다.

코드를 통해 어떻게 연동시키는지는 다음 포스팅으로 계속...

  • 이걸 보고 DB연동을 하는데 ... ATL OLEDB 소비자에서 연결 테스트가 되지 않습니다..
  • 코알라2013-07-22 13:47
  • SQL 서버 이름을 정확하게 입력하셨는지 다시 한번 확인해보셔야 할것 같네요. ㅠ
  • 지나가던 행인2013-12-15 03:14
  • 저도 윗님처럼 DB를 연동 하려고 하니 소비자에서 연결 테스트가 되지 않았는데요.. 특이하게 전 원격지 DB라서 그런것 같아요. http://pantarei.tistory.com/699 검색해보니 안될 경우에는 IP뒤에 포트를 넣어주면 되내요. 유익한 글 잘 보고 갑니다. ^^;
  • 잘 되네요2015-03-24 14:10
  • 두번째 글로 넘어갑니다
  • 잘 되네요2015-03-24 14:11
  • 두번째 글로 넘어갑니다

 

 

=======================

=======================

=======================

 

 

 

출처: http://rucaus.egloos.com/2287669

이전 포스팅에 이어서.

이전 포스팅에서는 DB 서버와 나의 MFC 프로젝트 파일이 연동되도록 설정했다.

연결다리는 DB 테이블 이름으로 만들어진 클래스였다.

이제 이것을 어떻게 MFC에서 가져와서 실제 코드로 사용할까?

  1. 다이얼로그에 있는 리스트 컨트롤에 DB를 연동하기로 했으므로,

리스트 컨트롤을 우클릭하여 변수를 추가한다.

내가 사용한 변수의 이름은 m_SnackList 이다.

Dlg의 헤더를 보면 변수가 추가된 것을 알 수 있다.

  1. 이 변수를 통해, 리스트에 컬럼구분표시/그 컬럼의 이름 이 뜨게 해줘야 한다.

이 작업을 하게 해줄 시기는 리스트가 생성될 당시(Initialize Dialog)이므로,

Dlg.cpp 내부에 있는

해당 함수 내부에 다음과 비슷한 코드를 작성해준다.

실행해보면 리스트에 컬럼구분이 생겼다.

우리 목표는 이 다이얼로그 창에 있는 버튼을 누르면 DB자료를 가져와서 보여주도록 하는 것이다.

3. 아까 만들었던 DB 클래스의 헤더 파일에 가 보면

클래스가 두개 있다. 보기 편하게 하기 위해 임의로 닫아두었다.

CSNACK과 CSNACKAccessor 가 있다. (클래스 이름은 만든 사람에 따라 다름.)

그냥 CSNACK 클래스는 DB 자체에 접근하게 해주는 일을 하며, (자세힌 모른다.)

CSNACKAccessor 는 DB에 접근할 방식 / 얻어올 데이터. DB에 던질 쿼리문등을 설정한다. (역시 자세힌 모른다.)

4.

바로 사용해도 되긴 하겠지만, 이 헤더를 여러 기능으로 재사용할 수 있게 템플릿으로 만들어줬다.

가급적이면 템플릿화 하는것이 좋다.

5.

class CSNACKAccessor 를 복사해서 하나 붙여넣기하고 이름을 마음대로 바꾸자.

나는 스낵 테이블의 모든 정보를 다 얻어오는 기능이므로

CSNACKGetInfoAccessor 로 하였다.

물론 복붙한 클래스 내부에서 CSNACKAccessor로 변수가 들어가고 있는 부분은, 모두 이름을 내가 설정한 이름으로 바꿔주어야 한다.

6. 복붙했던 클래스를 열어 내용을 살피면 다음과 같은 부분이 있다.

DEFINE_COMMAND_EX () 괄호 안 내부의 형식은 DB에서 보던 SQL 문장이다.

여기에 내 쿼리를 입력한다. 내가 버튼을 눌렀을 때 원하는 기능은 테이블의 모든 내용을 보여주는 것이므로

로 입력하였다.

BEGIN_COLUMN_MAP ~END_COLUMN_MAP 사이의 내용은, 해당 클래스인 CSNACKGetInfoAccessor의

멤버 변수인 m_ID, m_Name, m_TASTE 에 DB테이블에 있는 값을 넣겠다는 것이다.

수정할 필요가 없으므로 다음으로 넘어간다. ^^

7.

이제 다이얼로그 버튼을 누르면 디비가 출력되게 해야 하므로,

리소스 뷰의 다이얼로그에서 버튼을 더블클릭.

8. 버튼을 더블클릭하면 자동으로 Dlg.cpp로 가면서, 더블클릭 이벤트 발생시 할 행동에 대한 코드를 채우라고 한다.

9. 다음과 같이 코딩. 내가 만든 디비 헤더를 인클루드하는것을 잊지 말자.

여기서 OpenAll() 함수는 데이터베이스에 연결하는 기능을 하는 함수이다.

(좀더 자세히 설명하면, OpenAll 함수는 내부적으로 OpenDataSource 함수를 호출한다. OpenDataSource는 데이터베이스에 접근하는 함수이다. 또한 OpenRowSet 함수도 호출한다. 이 OpenRowSet 함수는 GetDefaultCommand를 호출하는데, GetDefaultCommand 함수는 실행시킬 SQL 문장을 바인딩해주는 함수라고 한다. 마지막으로 Execute() 함수도 호출하는데 SQL 문장을 실행한다. Execute 함수에서 에러가 났다면, 내가 쓴 SQL 쿼리의 문법이 잘못된 것이다. )

또한 MoveNext() 함수는 DB 데이터로 진입하여 데이터를 하나씩 읽는다.

10. 컴파일시켜보면 이런 에러 메세지가 뜬다.

에러가 난 곳으로 가보면 아래와 같은 #error 구문과 주석이 있는데, 드래그한 부분을 지워준다.

11. 다시 컴파일해본다. 제대로 된다. 다이얼로그 창의 버튼을 누르면 DB가 뜨는 것을 볼 수 있다.

사족 1. 여기까지 컴파일에러없이 잘 되었는데, DB불러오기 버튼을 눌러보니 값을 못 읽을 경우.

여기까지 했는데 에러가 생겼을 수도 있다. 이건 컴에 따라 생기기도 하고 안 생기기도 한다.

(내 컴퓨터는 에러가 나는 쪽이다.)

만약 DB가 불려오지 않는다면 다음과 같은 조치를 하도록 하자.

-먼저 가장 바깥쪽 메인인 cpp파일로 간다.

나의 경우에는 프로젝트이름이 usingDB 였으므로, usingDB.cpp 파일이다.

-InitInstance 함수에서, 아래에 나타나온 스샷대로 코드를 입력해준다.

빨강색 네모로 표시해둔 CoInitialize(NULL); 과 CoUninitialize(); 를 입력해주도록 하자.

사족 2.

DB 쿼리문을 작성할때 어떤 조건을 설정하고 싶을 때가 있다.

위의 쿼리문은, MEMID 가 ?라는 값을 가지고 있는 전체 row를 DB에서 지우겠다는 뜻이다.

컴퓨터는 이 조건 '?' 를 어디서 찾을까?

해당 클래스에서, BEGIN_PARAM_MAP 과 END_PARAM_MAP 사이에서 순서대로 찾는다.

즉 물음표 (조건변수) 여러개를 설정해놓으면, 파라미터 맵에서 대응될 변수를 입력해놓으면 된다.

COLUMN_ENTRY(1, m_MEMID) 는 첫번째(1) 물음표 값에, m_MEMID의 값을 대입하겠다는 뜻이다.

사족 3.

무지무지 강력하고 좋은 RowsAffected 변수를 템플릿화해놓은 클래스에 추가해서 쓰면 좋다.

어디다 어떻게 추가하냐면..

RowsAffected를 어떻게 활용하면 되나?

OpenAll() 등으로 쿼리문을 실행한 뒤 RowsAffected에는 쿼리문에 의해 변화가 일어나는 대상 행이 몇 개였는지가 저장된다.

이것을 소스코드에서 사용하니, 구현하며 곤란한 부분들이 종종 매우 쉽게 해결되었다. ^^

(RowsAffected 가 하나도 없을 경우에만 어떤 플래그를 세팅한다던지 하는 거.)

퍼블리싱 및 추천

퍼블리싱 및 추천 정보가 없습니다.

같은 카테고리의 글

트랙백(0) 덧글(7)

덧글

  • 불멸의천사 2012/04/02 23:26 # 답글그래서 OpenAll() 쫓아가보니
  • HRESULT OpenAll()
    {
    HRESULT hr;
    hr = OpenDataSource();
    if (FAILED(hr))
    return hr;
    __if_exists(GetRowsetProperties)
    {
    CDBPropSet propset(DBPROPSET_ROWSET);
    __if_exists(HasBookmark)
    {
    if( HasBookmark() )
    propset.AddProperty(DBPROP_IRowsetLocate, true);
    }
    GetRowsetProperties(&propset);
    return OpenRowset(&propset); <---- 요기서 리턴되어 끝나버립니다.
    }
    혹시 왜 그런것인지 아시는지 지식을 여쭈어봅니다 ㅠㅠ
  • 글 올려주시는거 잘보고 있습니다!!
    궁금한게 있어서 덧글 드리는데
    DB연동할때 위와 똑같이 진행하는데도
    데이터베이스 접속 실패가 뜹니다. ㅠ_ㅠ
    잘 작성하다 그부분에서 막혀서 헤매고 있습니다. 흑흑
  • 불멸의천사 2012/04/02 23:36 #
  • 헉! 해결했습니다
    테이블 이름문제로 발생되었던 에러였네요
    그리고 글올려주시는거 많은 참고가 됩니다^^
    감사합니다!
  • 은빛서리 2012/12/08 05:43 # 삭제 답글
  • 위에 설명 대로 DB 연동해서 리스트컨트롤에 띄우기 까지했는데요 ..
    테이블에 에디터컨트롤 이용해서 테이블의 쿼리값들 추가 하려고 하는데
    어떻게 해야 될지 찾아봐도 도저히 못찾아서 어쭤보고 싶네요.ㅠㅠ
  • 코알라 2012/12/10 23:32 #
  • DB에 데이터를 추가하시려면, 추가버튼과 입력공간을 만들고 거기에 DB Insert문을 연동하시면 되지 않을까요. 위에 있는 select 쿼리 예제를 조금 변경하시면 insert 문과 그에 따른 파라미터로 만들 수 있습니다.
  • 초보db 2013/12/01 20:50 # 삭제 답글
  • 감사합니다 연습해보면서 하고 있는데... 혹시 레코드 추가하는 부분에 소스를 알수 없을까요,,,>ㅠ
  • 코알라 2013/12/06 15:45 #
  • 여기에 잘정리되어 있는것 같네요.
    http://elky.tistory.com/171
  • 거북이 2014/06/18 16:08 # 삭제 답글올려주신 내용을 참고하여 조회,삭제,삽입, 수정은 구현을 했는데적용시키려는 쿼리문이 where연산자 , BETWEEN 라서 하나의 컬럼에 두개이상 인자가 대입되야하니
  • 어떻게 해야할지 감이 잡히지않아서 질문 드려봅니다.
  • 조건이 가변되는 조회문은 어떻게 구현을 해야할까요??
  • 질문이 있습니다!!

 

 

 

=======================

=======================

=======================

 

 

 

 

반응형

 

 

728x90

 

 

 

출처: http://blog.naver.com/PostView.nhn?blogId=kdj753&logNo=109690635

귀차니즘으로 인해 대충 대충 내가 알아볼 수 있을 정도로만 만들었다.

일단 MsSql 서버를 윈도우 환경에 설치

MFC에서 mssql로 접속을 하기 위해서는 자신의 pc에 mssql DSN을 설정 해주어야한다.

시작->제어판->관리도구->데이터원본(ODBC)를 클릭하면 아래와 같은 화면이 나온다.

mssql에 접속하기 위한 DSN을 설정 해주므로 시스템DSN탭에서 추가를 누른다.

(만약 mdb파일을 사용하려면 사용자 DSN에 추가)

mssql 서버와 연동을 할것이므로 Sql Server를 선택한다.

이름은 임의로 DBTest로 정했고 아래 설명은 자신이 알아볼 수 있게 아무거나 입력한다.

서버는 Mssql에 깔려 있는 IP를 쓴다. 나는 내 피시에 깔았기 때문에 내 ip를 그대로 썼다.

당연히 알겠지만 자신의 ip를 그대로 써도 되고 127.0.0.1을 써도 된다.

사용자가 입력한 로그인 ID와 암호 블라블라~~를 선택한 후 로그인 ID 암호를 입력후 클라이언트 구성을 클릭

내가 이것때문에 엄청 고생했다. 알고 보면 별것 아니지만 안될때는 아무리 찾아봐도 정확한 문제가 뭔지 안나오더라..아무튼 네트워크 라이브러리에서 TCP/IP를 선택해 주고 Default로 동적으로 포트 번호를 받게 설정이 되어있다. 하지만 동적으로 받으면 무슨 이유인지 안된다고 하더라..나도 대충 봐서...-_-;;;;

그래서 동적 포트 확인 체크란을 해제하고 포트번호를 써준다. (이거 동적으로 할당하면 밑에 그림에서 다음 버튼 누를 때 에러 발생한다.) 확인 누르면 바로 위에 화면이 뜰것이다 그러면 그냥 다음 누르고

다음을 누른다.

그리고 마침

그럼 네모와 같은 것이 하나 추가 되었으면 설정은 끝났다. 확인!

MFC는 접한지 얼마 되지 않아 엄청나게 허접스럽게 만들어 놓았다. -_-;; (난 Qt전문가)

그냥 버튼만 누르면 메세지 박스에서 칼럼의 값이 하나씩 찍힌다.

아래는 다이얼로그의 버튼을 눌렀을 때 실행하는 함수이다.

 

//----------------------------------------------

void CDBTestDlg::OnDBTest()
{
// TODO: Add your control notification handler code here

CDatabase db;
//db.OpenEx(_T("DSN=UserList"));
db.OpenEx(_T("DSN=DBTest;UID=sa;PWD=rootroot")); //자신이 설정해주었던 DSN이름을 쓰고 id,pass를 입력
CRecordset record(&db);

record.Open(CRecordset::snapshot,"SELECT * FROM UserList");//UserList라는테이블이 이미 만들어져 있다.
short col = record.GetODBCFieldCount();
char *data = NULL;

for(int p=0 ; p<2 ; p++)
{
//행단위
while( ! record.IsEOF())
{
//필드단위

for( short i=0; i < col; i++  )  
{  
CString tmp;  
//이 함수는 char\*형을 지원하지 않는다  
record.GetFieldValue(i, tmp);                      
data = (char\*)malloc(tmp.GetLength()+1);                  
strcpy(data, tmp);

this->MessageBox(data);  
//cout<<data<<"\\t";

free(data);  
}  
record.MoveNext(); //다음행으로 이동  

}
}
}

실행하면 DB에 있는 table의 필드를 차례 차례 검색해서 메세지박스에 보여진다.

//Mysql도 거의 비슷하다. 관리도구->데이터원본->시스템DSN에서 추가를 눌러 mysql을 선택하면 된다.

(물론 Mysql Server가 설치가 되어잇거나 클라이언트가 설치가 되어있어야 시스템 DSN에 보인다.사실 깔아놓고 확인한거라 정확한지는 모르겠다.--;; 안보이시면 까시라~)

//mysql을 외부 ip와 연동하기 위해서는 도스창에서 mysql 열던지 mysql client로 mysql로 들어가서 아래와 같이 설정을 해주어야지

접속이 가능하다.

도스창에서 접속방법:

시작->실행->cmd입력

c:\) mysql -u 아이디 -p

엔터를 치면 비번 입력하라는 메세지. 비번 입력

mysql> grant all privileges on db명.* to 사용자계정@'IP주소'
identified by '비밀번호' with grant option;
mysql> grant reload,process on *.* to admin@localhost;
mysql> FLUSH PRIVILEGES;

 

 

==========

 

 

점점 더 귀차니즘에 의해 ODBC_Oracle 연동도 여기서 적는다. 이것 또한 비슷하지만 약간 더 복잡하다.

일단 오라클 클라이언트를 깐다.

http://pureholic.net/604 를 참고하여 작성하였다.

아래 사이트로 가서 밑의 두개의 파일을 받는다.

다운주소 : http://www.oracle.com/technology/tech/oci/instantclient/instantclient.html

instantclient-basic-win32-11.2.0.7.0.zip (46,734,555 bytes)

instantclient-odbc-win32-11.2.0.7.0.zip (728,899 bytes)

위의 두 파일을 공통된 폴더에 압축을 푼다. 기본적으로 위의 버젼일 경우에는 instantclient_11_2 을 기준으로 풀리게 되어있다. 나중에 환경변수 설정을 용이하게 C:\oracle\instantclient_11_2 로 해제하여 모아두었다.

c:\Oracle\instantclient_11_2 아래에 보면 odbc_install.exe 가 있다.

odbc_install.exe 파일을 클릭하면 쉽게 ODBC드라이버가 자동으로 설치된다. 실패할 경우에는 dll 파일이 정상적으로 존재하는지 확인하고 부족하다면 새로 다운 받아 설치하자.

클라이언트가 설치 되었으면 제어판->관리도구->데이터원본(ODBC)->Driver탭에 방금 설치한 클라이언트가 등록이 되어 있으면 성공이다.

그럼 이제 환경 변수를 설정해 준다.

바탕화면의 내 컴퓨터 오른쪽 마우스를 클릭하여

속성->고급->환경변수를 클릭

Path는 이미 만들어 져 있기 때문에 편집을 눌러서 그림과 같이 추가해준다.

C:\oracle\instantclient_11_2

당연한 얘기지만 파란색의 경로를 추가하기 전에 바로 앞에 세미콜론으로 경계를 그어주어야한다.

NLS_LANG은 새로 만들기를 눌러 KOREAN_KOREA.AL32UTF8를 추가해준다.

ORACLE_HOME도 새로 만들기를 눌러 C:\oracle\instantclient_11_2 를 추가해준다.

TNS_ADMIN 도 새로 만들기를 눌러 C:\oracle\instantclient_11_2 를 추가해준다.

tnsnames.ora라는 파일을 하나 만들어서 아래와 같이 설정

tnsnames.ora 설정

tnsnames.ora는 PC에서 Oracle로 붙기 위한 설정 파일이라고 생각하면 된다. 아래의 샘플을 보고 자신의 서버에 맞게 세팅하자. 아래의 설정은 외부서버에 접속하기 위한 기본세팅.

C:\oracle\instantclient_11_2 아래에 저장

=====tnsnames.ora======

ORCL=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=210.220.211.3)(PORT=))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SID=SID네임)
)
)

 

=========

 

아래 그림은 본인이 접속할 오라클 서버이다.

자 그럼 다시 시작->제어판->관리도구->데이터원본(ODBC)->시스템DNS에서 추가를 누른다.

방금전 설치한 오라클 클라이언트를 선택하고 마침을 클릭

Data Source Name은 나중에 MFC프로그램에서 DSN에 넣을 이름이고 TNS Service Name은tnsnames.ora 파일 제일 위에 선언한 이름이다. 오라클에 접속할 user id를 입력하고 Test connection을 눌러보자.

password입력후 OK!

아래와 같은 메세지가 뜨면 연결이 성공한 것이다.

그럼 프로그램은 MSSql이나 mysql이나 Oracle이나 모두 똑같다. DNS 이름과 아이디 패스워드만 각각 알아서 수정해 주면 DB접속이 모두 가능하다.

한가지 더!

오라클 서버에 접속하기 위해서 토드라는 프로그램이 필요하다. Oracle 웹페이지에 가면 freeware로 토드 프로그램을 다운 받을 수 있다.

[출처] [MFC] ODBC DB연결|작성자 황토마루

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://forum.falinux.com/zbxe/index.php?mid=lecture_tip&sort_index=regdate&order_type=desc&document_srl=648545

[Java]MS-SQL접속하기

프로그램을 하다보면 DB를 연결해야 할때가 있습니다.

보통 DB하면 오라클, MySQL, MS-SQL등이 일반적으로 많이 사용 될꺼라 생각 됩니다.

오라클, MySQL은 Java와 연결해 본적이 있는데..... MS-SQL은 아직 해본적이 없었습니다.

이번에 MS-SQL과도 연결해야 할일이 생겨 샘플을 한번 만들어 봤습니다.

MS-SQL의 JDBC드라이버는 아래의 URL에서 받으세요.

[다운로드]http://www.microsoft.com/ko-kr/download/details.aspx?id=11774

저는 언어를 한국어로하여 sqljdbc_4.0.2206.100_kor.tar.gz압축 파일을 다운로드 하였습니다.

압축을 풀어보니 sqljdbc_4.0안에 kor폴더가 있더군요. 아마도 언어 별로 뭔가를 관리 하는게 아닐까 생각해봅니다.

역시나, install.txt와 license.txt파일을 열어보니 한국어로 되어있네요.

jar파일은 sqljdbc.jar과 sqljdbc4.jar 두가지가 있더군요.

뭘 사용해야 하나 찾아보니..... 아래의 url에 설명이 되어 있습니다. 참고하세요.

[링크]http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=1116&rssMode=1&wtype=0

샘플소스는 MS-SQL에 접속해 데이터베이스 정보를 표시하는 소스입니다.

[샘플 소스]

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
 
public class MsSQLConnect {
 
/**
 
 * DB프로퍼티 표시
 * @param url
 * @param userId
 * @param userPw
 * @param driverNm
 */
public void displayDbProperties(String url, String userId, String userPw,
String driverNm) {
 
Connection con = null;
DatabaseMetaData dm = null;
ResultSet rs = null;
try {
con = this.makeConnection(url, userId, userPw, driverNm);
if (con != null) {
dm = con.getMetaData();
System.out.println("Driver Information");
System.out.println("\tDriver Name: " + dm.getDriverName());
System.out
.println("\tDriver Version: " + dm.getDriverVersion());
System.out.println("\nDatabase Information ");
System.out.println("\tDatabase Name: "
+ dm.getDatabaseProductName());
System.out.println("\tDatabase Version: "
+ dm.getDatabaseProductVersion());
System.out.println("Avalilable Catalogs ");
 
rs = dm.getCatalogs();
while (rs.next()) {
System.out.println("\tcatalog: " + rs.getString(1));
}
rs.close();
rs = null;
 
} else
System.out.println("Error: No active Connection");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (con != null)
con.close();
con = null;
} catch (Exception e) {
e.printStackTrace();
}
}
 
dm = null;
}
 
/**
 * 커넥션을 취득해 반환 DB커넥션 취득
 
 * @param url
 * @param userId
 * @param userPw
 * @param driverNm
 * @return
 * @throws SQLException
 */
public Connection makeConnection(String url, String userId, String userPw,
String driverNm) throws SQLException {
 
Connection conn = null;
 
try {
// 1. JDBC 드라이버 로드
Class.forName(driverNm);
// 2. DriverManager.getConnection()를 이용하여 Connection 인스턴스 생성
conn = DriverManager.getConnection(url, userId, userPw);
 
if (conn != null) {
System.out.println("Connection Successful!!!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException sq) {
sq.printStackTrace();
}
 
return conn;
}
 
public static void main(String[] args) throws Exception {
 
// 유저ID
String userId = "sa";
// 유저 패스워드
String userPw = "testtest";
 
// 드라이버명
String MSSQL_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
 
MsSQLConnect myDbTest = new MsSQLConnect();
myDbTest.displayDbProperties(getMsSQLJDBCUrl(), userId, userPw,
MSSQL_DRIVER);
}
 
/**
 * MS-SQL JDBC url만들기
 * @return
 */
public static String getMsSQLJDBCUrl() {
 
StringBuilder url = new StringBuilder();
url.append("jdbc:sqlserver://");
url.append("localhost"); // 접속호스트
url.append(":");
url.append("1433"); // 포트번호
url.append(";");
url.append("databaseName=");
url.append("TEST"); // DB명
url.append(";");
url.append("selectMethod=");
url.append("cursor");
url.append(";");
 
return url.toString();
}
}

[결과]

위에서도 잠깐 얘기해는데... jar파일은 sqljdbc.jar과 sqljdbc4.jar 두가지가 있습니다.

jdbc url과 드라이버명이 조금 틀리기 때문에 링크걸린곳을 꼭들러 차이점을 확인하신후 사용하시길 바랍니다.

감사합니다.

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://hackhyun.tistory.com/42

1. MS SQL Server JDBC Driver 설치

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=99b21b65-e98f-4a61-b811-19912601fdc9

2. 다운로드 받은 파일(sqljdbc_2.0.1803.100_kor.exe)의 압축을 풀면 sqljdbc4.jar, sqljdbc.jar 파일이 있는데
이를 jdk\jre\lib\ext 폴더에 복사 한다.

3. 환경설정에서 CLASSPATH를 추가한다.
sqljdbc.jar 파일의 경로를 포함한 전체 이름을 지정한다.

4. 테스트용 java 소스

import java.sql.*;
import java.sql.SQLException;
import java.io.*;

public class test {
 public static void main(String[] args) throws Exception {
  String url = "jdbc:sqlserver://서버IP주소:1433;DatabaseName=데이터베이스명";
  Connection conn = null;
  Statement stmt = null;
  ResultSet rs = null;
  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  conn = DriverManager.getConnection(url, "계정", "패스워드");
  stmt = conn.createStatement();
  rs = stmt.executeQuery("SELECT * FROM 테이블명");
  while( rs.next() ) {
   String field1 = rs.getString("필드명1");
   String field2 = rs.getString("필드명2");
   System.out.println(field1);
   System.out.println(field2);
  }
  rs.close();
  stmt.close();
  conn.close();
 }
}

5. 컴파일 및 실행

 javac test.java
 java  test

[2014.02.10] 추가
최신 버전인 JDBC 4.0 드라이버 주소는 다음과 같다
SQL Server용 Microsoft JDBC Driver 4.0

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://egloos.zum.com/computer/v/798196

JAVA와 MSSQL연동

출처 : **http://blog.naver.com/lathecone/80018324069**

필요한 JDBC파일들은 올려놓았다.

//------------------------------------------------------------
// Name : ConnectionDB.java
// Desc : Mysql DB와 연결을 담당 하는 클래스
//------------------------------------------------------------

package edu1;

import java.sql.*;

import sun.misc.*;
public class ConnectionDB
{

private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;

//MS-SQL JDBC드라이버 로드
static final String msjdbc_driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";

static final String msjdbc_url = "jdbc:microsoft:sqlserver://203.247.166.172;databasename=project";//DB이름

//MSSQL ID, PASSWORD
private static String msid = "admin"; //mssql ID
private static String mspassword = "abc12345"; //mssql password

String url = msjdbc_url; //MSSQLJDBC URL

//-------------------------------------------------------
// Name : ConnectionDB
// Desc : 생성자
//-------------------------------------------------------
public ConnectionDB()
{

}
//-------------------------------------------------------
// Name : getPublicKey
// Desc : 데이타베이스와 연결해서 공개키를 가져온다.
//-------------------------------------------------------
//통합사이트에서만 키를 가져오면 된다.
public void getDB() throws Exception
{

 String sql="select \*from lathe where id='1'";  

 //MS-SQL에 연결   
 Class.forName(msjdbc\_driver).newInstance();  

conn = DriverManager.getConnection(url,msid,mspassword);
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString(1));
}
disconnectDB(); //DB와 연결을 끊는다.

}  


//-------------------------------------------------------  

// Name : disconnectDB
// Desc : 데이타베이스와 연결을 끊는다.
//-------------------------------------------------------
public void disconnectDB() throws Exception
{
conn.close();
stmt.close();
rs.close();
}
//main
public static void main(String[] args)
{
ConnectionDB db = new ConnectionDB();
db.getDB();

}  

}

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://developerl.tistory.com/entry/JAVA-SQL-Server-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

개발을 하다보면 어쩔수 없이 JAVA + MS SQL 연동이 필요할때가 있습니다.

그래서 오늘은 JAVA + MS SQL 과의 연동과정을 알아보겠습니다.

우선 MS SQL JDBC Driver가 필요합니다.

MS SQL JDBC Driver는 아래 주소에서 다운받으실 수 있습니다.

http://www.microsoft.com/downloads/ko-kr/details.aspx?displaylang=ko&FamilyID=c47053eb-3b64-4794-950d-81e1ec91c1ba

다운받은 드라이버를 여러번 압축을 풀고나면 (? 받아보시면 이해하실겁니다.ㅋ) 아래와 같은 파일들이 있습니다.

이중에 sqljdbc.jar 파일을 JRE_HOME 라이브러리 폴더
즉, C:\Program Files\Java\jre6\lib\ext (JAVA 설치 경로에 따라 다를 수 있습니다.) 에 복사합니다.

이클립스를 실행시키시고 다음과 같이 테스트 해보세요.

Connection con = null;
try{
Class.forName(driver);
con = DriverManager.getConnection("jdbc:sqlserver://아이피;user=유저이름;password=패스워드");
System.out.println("Developer.엘");
}
catch(Exception e){
e.printStackTrace();
}

정상적으로 따라오셨다면 제 필명을 보실 수 있을겁니다. ㅋ

참 쉽죠?

결론은 기존 오라클이나 MySQL 연동과 드라이버명, URL요청만 다릅니다.

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=1116&rssMode=1&wtype=0

자바에서 "Microsoft SQL Server JDBC Driver" 사용하는 방법

요즘 제가 ^^ 자바 진영을 이해하기 위해서 고군분투하고 있습니다. 나름 자바와 닷넷이 비슷한 면도 있고, 언어적인 면에서도 때로는 자바가 나은 면도 있고 반대인 경우도 있더군요.

어쨌든... ^^ 이번에는 자바에서 DB 연결하는 방법을 살펴보기 위해 가장 친숙한 MS-SQL 서버 먼저 접속을 해보았습니다. 관련해서 검색해 보니, 한글로 된 블로그 게시물도 꽤 되는군요. ^^

MSSQL jdbc 드라이버 sqljdbc.jar 와 sqljdbc4.jar 의 차이점 ; http://www.yunsobi.com/blog/514 HOWTO: Microsoft JDBC 시작하기 ; http://support.microsoft.com/kb/313100/ko JDBC(MS SQL) 드라이버 사용 ; http://angelprogramming.tistory.com/28
현재, "Microsoft SQL Server JDBC Driver" 버전이 3.0 까지 나와 있으니 다음의 링크에서 다운로드 받고,

Microsoft SQL Server JDBC Driver 3.0 ; http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21599
압축을 해제하면 sqljdbc.jar, sqljdbc4.jar 파일을 얻을 수 있는데, 어느 것을 사용할 지는 "MSSQL jdbc 드라이버 sqljdbc.jar 와 sqljdbc4.jar 의 차이점" 글을 보시면 쉽게 결정하실 수 있을 것입니다. (이 글에서는, 제가 구성한 테스트 환경이 JRE 1.6을 사용할 것이므로 sqljdbc4.jar 를 선택했습니다.)

예제 실습을 하기 전에, 여기서 잠시 닷넷과 자바의 차이점을 이해해야 할 부분이 있는데, 바로 모듈을 찾는 규칙입니다. 닷넷의 경우에는 EXE 와 동일한 폴더(또는, 웹 App의 경우 /bin)이거나 GAC(Global Assembly Cache) 가 대표적인데, 자바는 여러 환경을 지원하다 보니 제각각입니다. 자세한 내용은 "Microsoft SQL Server JDBC Driver 3.0" 설치 후 "\sqljdbc_3.0\enu\help\default.htm" 문서의 "Overview of the JDBC Driver" / "Using the JDBC Driver" 에 언급되어 있으니 생략하고, 여기서는 지난 번에 실습해 보았던 Servlet 내용에서 했던 데로 다음과 같이 구성했습니다.

  1. sqljdbc4.jar 를 '[톰캣 설치폴더]\lib' 폴더에 복사 (실행을 위해!)
  2. Eclipse IDE 에서 Java Build Path / Libraries / Add External JARs 를 통해 sqljdbc4.jar를 지정 (컴파일을 위해!)
    (만약, sqljdbc4.jar 내부의 클래스를 직접 사용하는 경우가 아니라면 참조 생략 가능)

예제 코드는, 지난 번 서블릿 코드를 재사용해서 다음과 같이 DB 관련 코드만 넣어보았습니다. (아래의 예제 코드는 "\sqljdbc_3.0\enu\help\default.htm" 문서의 "Sample JDBC Driver Applications" / "Connecting and Retrieving Data" / "Connection URL Sample" 을 가져온 것입니다.)

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;


public class HelloWorld extends HttpServlet
{
    private static final long serialVersionUID = 1L;
    
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException
    {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        
        String connectionString = "jdbc:sqlserver://mydb2:1433;" +
            "databaseName=TestDB;user=testdbuser;password=testdbuser2008";
        
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
          
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionString);


            String SQL = "SELECT * FROM TestTable";
            stmt = con.createStatement();
            rs = stmt.executeQuery(SQL);


            while (rs.next()) {
                out.println(rs.getInt(1));
            }
        }
        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 (con != null) try { con.close(); } catch(Exception e) {}
        }
    }
}


DB 접근에 대한 추상화는 자바가 더 나은 것 같습니다. 왜냐하면 닷넷의 경우에는 물론 인터페이스가 있다고는 하지만 대부분의 경우에 DB 제공자마다 다르게 사용하기 때문입니다. (예를 들어, SQL Server - SqlConnection, Oracle - OracleConnection, Postgre - NpgsqlConnection, ...)

RDB라는 것이 SQL 쿼리로 인해 정형화되어 있는 접근 방식을 제공하므로, 닷넷에서 DB를 다루던 경험이 있다면 자바의 DB 접근 방법을 배우는 것이 그다지 어려운 문제는 아니더군요. ^^

참고로, 딱 한가지... 닷넷 개발자 입장에서 주의해야 할 점이 있다면 ResultSet의 get... 메서드에 전달되는 인덱스가 0 이 아닌 1 부터 시작한다는 예외(?) 사항이 존재합니다. 만약 rs.getInt(0) 처럼 접근한다면 다음과 같은 예외가 발생합니다.

com.microsoft.sqlserver.jdbc.SQLServerException: Index 0 is out of range (인덱스 0이(가) 범위를 벗어났습니다.) at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyValidColumnIndex(SQLServerResultSet.java:504) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(SQLServerResultSet.java:1948) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1981) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1966) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(SQLServerResultSet.java:2209) at HelloWorld.doGet(HelloWorld.java:36) ...[생략]... at java.lang.Thread.run(Thread.java:619)

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://zsoo.net/15

1. JDBC를 설치한다..
jdbc는 자바 디비 커넥터 약자로... 자바에서 해당 디비 프로그램에 연결하려면 필요하다
mssql용 jdbc는 http://msdn.microsoft.com/en-us/data/aa937724.aspx 여기에서 받을수 있다..
압축을 푼후 폴더를 열어보면 sqljdbc.jar 와 sqljdbc4.jar 가 나오는데
본인이 jre6.0이상이면 sqljdbc4.jar 를.. 그 이하이면 sqljdbc.jar 를 사용하면 되는데
해당 파일을 jre폴더\lib\ext 에 복사해주면 아주 잘 작동한다.. 둘다 복사하지 말고 자신에 맞는것만 복사하자..

2. 자바 코딩
모든 jdbc 커넥터가 그렇듯.. 일단 드라이버 클래스를 읽어야한다.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
이 한줄이면 클래스를 찾은후에 드라이버 리스트에 자동등록되게 된다..
원하는 디비에 연결하려면
DriverManager.getConnection("jdbc:sqlserver://서버이름[:포트][;옵션=값[;추가옵션=값]]")
이런 형식을 따르게 된다..
예를 들어 자신컴퓨터에 윈도우계정인증으로 접속할경우
jdbc:sqlserver://localhost;intergratedSecurity=true
자신컴퓨터에 지정된 계정과 비번을 쓸 경우
jdbc:sqlserver://localhost;user=아이디;password=암호
포트가 다를경우
jdbc:sqlserver://localhost:1234;user=아이디;password=암호
대강 이런식으로 하면된다..

이 다음부턴 다른 자바 디비 프로그래밍과 동일하다..

3. 접속이 안될경우.. http://msdn.microsoft.com/ko-kr/library/ms378845(SQL.90).aspx
나의 경우 sql서버 기본포트 1433으로 접속되지 않아 삽질을 했는데
일단 sql서버 설정 관리자에서
SQLServer네트워크구성 -> 프로토콜 -> TCP/IP 를 사용으로 변경해 주고
IP 주소 탭에서, IPALL부분의 TCP포트를 1433으로 직접 적어주어야 sql서버에서 잘 대기하게 된다..
1433가 기본값이라곤 하는데 Visual Stduio 2008을 깔면서 자동으로 같이 깔리면서 설정이 마음대로 바뀌어서 설치된듯하다..

4. SQL Server Management Studio Express
만약 visual studio 2008 설치하면서 sqlserver2005가 깔렸다면 따로 db관리 프로그램이 설치되지 않았을것이다..
이 프로그램으로 편하게 관리하길 http://go.microsoft.com/fwlink/?LinkId=65110

 

 

 

=======================

=======================

=======================

 

 

 

 

출처: http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecJDBC&wr_id=58

[자바에서 MS-SQL 연결 방법, JAVA JDBC SQL Server]

MS-SQL의 JDBC Driver는 다음 URL에서 받는다.
http://www.microsoft.com/ko-kr/download/details.aspx?id=11774

압축받은 파일을 풀면 kor 폴더아래 sqljdbc.jar과 sqljdbc4.jar 두 파일이 있는데 sqljdbc.jar는 JDBC3.0을 지원하며 slqjdbc4.jar 파일은 JDBC4.0을 지원하고 JRE6.0(JDK1.6) 이상에서만 동작한다.

자신의 자바 실행환경 버전에 맞게 선택하자.

1. 다운받은 jar 파일을 클래스패스에 적절히 추가하고

2. 소스코드 작성

접속문자열은 다음과 같이...

String connectionString = "jdbc:sqlserver://localhost:1433;databaseName=ONJDB;user=testuser;password=testpwd";

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

나머지 부분은 오라클을 사용하는 것과 같다.

 

 

 

=======================

=======================

=======================

 

 

 

 

기타링크:

*MFC로 구현하는 DB 프로그래밍

1편 http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039130809
2편 http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039131033
3편 http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039131490

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

 

 

=======================

=======================

=======================

 

 

 

 

반응형