성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Java에서 MySQL 사용</h1> <p> <br /> 자바에서 MS-SQL 접근하는 법을 살펴봤으니,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 자바에서 "Microsoft SQL Server JDBC Driver" 사용하는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1116'>http://www.sysnet.pe.kr/2/0/1116</a> </pre> <br /> 이번에는 MySQL 쪽으로 눈을 돌렸습니다. ^^<br /> <br /> 지난번 PHP + MySQL 연동을 했을 때 설명했던 것과 동일하게 MySQL을 설치하고 "mysqld --install" 명령어로 NT 서비스로 등록시켰습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .NET 개발자가 처음 해보는 PHP + MySQL 연동 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1058'>http://www.sysnet.pe.kr/2/0/1058</a> </pre> <br /> 또한, SQL 서버에 익숙한 분들은 SSMS(SQL Server Management Studio)와 같은 도구가 그리울텐데요. MySQL의 경우 다음과 같은 GUI 관리 도구를 배포하고 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > MySQL Workbench ; <a target='tab' href='http://www.mysql.com/products/workbench/'>http://www.mysql.com/products/workbench/</a> </pre> <br /> Zip 파일의 압축을 풀고 "MySQLWorkbench.exe" 파일을 실행시켜 주면 됩니다. 오~~~ 나름 쓸만한데요. ^^ 아래 화면은, Workbench에서 적당하게 테스트 DB 및 테이블 만들어 본 것입니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='mysql_java_1.png' src='/SysWebRes/bbs/mysql_java_1.png' /><br /> <br /> <hr style='width: 50%' /><br /> <br /> 닷넷에서도 (더 나은 성능으로) DB 연동을 하려면 해당 DB에 대해 전용 ADO.NET Data Provider가 필요한데, MySQL의 경우 "MySql ADO.NET Driver"라는 것을 사용해서 접근할 수 있습니다.<br /> <br /> 자바 역시, MySQL용의 "JDBC Driver"가 필요하고 이것도 MySQL 웹 사이트 쪽에서 다운로드할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Download Connector/J - MySQL Connector/J is the official JDBC driver for MySQL. ; <a target='tab' href='http://www.mysql.com/downloads/connector/j/'>http://www.mysql.com/downloads/connector/j/</a> </pre> <br /> 압축을 풀면, "mysql-connector-java-5.1.17-bin.jar"라는 파일이 나오는데, 서블릿에서 테스트 하는 경우 <a target='tab' href='http://www.sysnet.pe.kr/2/0/1116'>MS-SQL 실습했을 때와 동일하게 복사</a>를 해주면 됩니다.<br /> <br /> <ul> <li>mysql-connector-java-5.1.17-bin.jar를 '[톰캣 설치폴더]\lib' 폴더에 복사 (실행을 위해!)</li> <li>Eclipse IDE에서 Java Build Path / Libraries / Add External JARs를 통해 mysql-connector-java-5.1.17-bin.jar를 지정 (컴파일을 위해!)<br /> (만약, mysql-connector-java-5.1.17-bin.jar 내부의 클래스를 직접 사용하는 경우가 아니라면 참조 생략 가능) </li><br /> </ul> <br /> DB Provider에 대한 추상화는 자바가 더욱 잘해놓은 것 같습니다. 왜냐하면, 닷넷의 경우 DB가 바뀌면 (별도의 배려를 하지 않고 작성한 경우를 제외하고) DB Provider용 어셈블리에 대한 참조 변경부터 코드까지 모두 손을 대야 하는데, 자바의 경우에는 Class.forName 메서드에 전달되는 JDBC Driver 이름 및 연결 문자열만 바꿔주면 되기 때문입니다. <br /> <br /> 가령 아래는 MS-SQL 접근 코드인데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > import java.sql.*; public class TestMain { public static void main(String [] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = DriverManager.getConnection("jdbc:sqlserver://mydb2:1433;" + "databaseName=TestDB;user=testdbuser;password=testdbuser2008"); conn.close(); } catch (Exception ex) { System.out.println(ex.toString()); } } } </pre> <br /> MySQL로 DB가 변경된 경우 소스 코드 상에서 수정되는 것은 다음과 같이 간단합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > import java.sql.*; public class TestMain { public static void main(String [] args) { try { Class.forName("<span style='color: blue; font-weight: bold'>com.mysql.jdbc.Driver</span>"); Connection conn = DriverManager.getConnection(<span style='color: blue; font-weight: bold'>"jdbc:mysql://localhost" ,"root" ,""</span>); conn.close(); } catch (Exception ex) { System.out.println(ex.toString()); } } } </pre> <br /> 나머지 지루한 CRUD 코드는 생략합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> Java에서 MySQL 사용법은 쉬운데, 의외로 MySQL 관리 자체가 낯설더군요. 예를 들어, 기본적인 "root" 사용자 이외에 별도로 다음과 같은 설정으로 추가를 했을 때,<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='mysql_java_2.png' src='/SysWebRes/bbs/mysql_java_2.png' /><br /> <br /> 연결 문자열을 다음과 같은 식으로 바꾸는 정도로는 오류가 발생했습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > DriverManager.getConnection("jdbc:mysql://localhost" ,"newuser" ,"newuser2008"); == 예외 == java.sql.SQLException: Access denied for user 'newuser'@'localhost' (using password: YES) </pre> <br /> MySQL에서 "Limit Connectivity to Hosts Matching" 값에 "%" 문자를 사용하는 것은 도스의 "*(asterisk)" 의미와 동일합니다. 즉, 모든 클라이언트로부터 연결을 받아들이겠다는 의미인데요. 아쉽게도 그 '모든 클라이언트'에 "localhost"와 "127.0.0.1"은 포함되지 않습니다.<br /> <br /> 따라서, 다음과 같이 명시적으로 IP (또는 호스트 이름)을 설정해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > DriverManager.getConnection("jdbc:mysql://192.168.50.32" ,"newuser" ,"newuser2008"); </pre> <br /> (왜 "모든 클라이언트"에서 "localhost"는 제외한 것일까요? ^^;)<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1182
(왼쪽의 숫자를 입력해야 합니다.)