- ๊ด๋ จ ๊ธ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (1) ํ์ ๋ชฉ๋ก ์กฐํ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (2) ํ์ ๊ฐ์
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (3) ํ์ ์ ๋ณด ์์
- [IntelliJ] ํ์๊ฐ์ ์์ (MVC) - (4) ๋ทฐ(JSP) ๋ถ๋ฆฌํ๊ธฐ
[IntelliJ] JAVA ์๋ธ๋ฆฟ + MySQL ํ์๊ฐ์ ์์ - (1) ํ์ ๋ชฉ๋ก ์กฐํ
ํ๊ฒฝ ์ ๋ณด
IntelliJ IDEA 2019.3 Ultimate, Apache Tomcat 9, MySQL 8
์์ ๊ฐ์ ํ์ ํ ์ด๋ธ์ ์ด์ฉํด ํ์ ๋ชฉ๋ก ์ถ๋ ฅ, ์ ๊ท ํ์ ๋ฑ๋ก, ๊ธฐ์กด ํ์ ์ ๋ณด ์์ ์ ํ๋ ์๋ธ๋ฆฟ์ ๊ตฌํํ๋ค.
1. ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ธํ
์ฐ์ ์น ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
๊ธฐ๋ณธ Java ํ๋ก์ ํธ๋ฅผ ์ ํํ๊ณ Web Application, WebServices์ ์ฒดํฌํ๋ค.
Version์ Apache Axis๋ฅผ ์ ํํ๋ค.
Libraries๋ Set up library later๋ฅผ ์ ํํ๊ณ [Next]๋ฅผ ํด๋ฆญํ๋ค.
ํ๋ก์ ํธ ์ด๋ฆ๊ณผ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ๊ณ [Finish]๋ฅผ ํด๋ฆญํ๋ค.
ํ๋ก์ ํธ๊ฐ ๋ง๋ค์ด์ก์ผ๋ฉด jarํ์ผ์ ์ ์ฅํ lib ๋๋ ํ ๋ฆฌ๋ฅผ ์ํ๋ ์์น์ ์์ฑํ๊ณ ๊ทธ ์์ MySQL JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๋ฃ๋๋ค.
์ฐธ๊ณ ๋ก MySQL JDBC ๋๋ผ์ด๋ฒ ํ์ผ์ ์ค์น ๋๋ ํ ๋ฆฌ/Connector J x.x ๋๋ ํ ๋ฆฌ ํ์์ ์๋ค.
๋ค์์ผ๋ก Project Structure ์ฐฝ์ ๋์ด๋ค.
Dependencies - [+] - Library... ๋ฅผ ํด๋ฆญํ๋ค.
ํฐ์บฃ ์๋ฒ๋ฅผ ์ ํํ๊ณ [Add Selected]๋ฅผ ํด๋ฆญํ๋ค.
IntelliJ ํฐ์บฃ ์ฐ๋์ ๋ค์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ค.
[JAVA ์น ๊ฐ๋ฐํ๊ฒฝ] IntelliJ + Tomcat ์ฐ๋ ๋ฐฉ๋ฒ
ํฐ์บฃ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ ํ ๋ค์ [+] - JARs or directories...๋ฅผ ํด๋ฆญํ๋ค.
์๊น lib ํด๋์ ์ถ๊ฐํ JDBC ๋๋ผ์ด๋ฒ jarํ์ผ์ ์ ํํ๊ณ [OK]๋ฅผ ํด๋ฆญํ๋ค.
2. ์๋ธ๋ฆฟ ๊ตฌํ
์๋ฐ ์์คํด๋ ์์ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
@WebServlet("/student/list")
public class StudentListServlet2 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
Properties jdbcProperties = new Properties();
jdbcProperties.setProperty("user", "username");
jdbcProperties.setProperty("password", "****");
}
}
GenericServlet์ ์์๋ฐ๊ณ service()๋ฅผ overrideํ๋ค.
์๋ธ๋ฆฟ annotation @WebServlet์ ์ฌ์ฉํด์ "/student/list"๋ฅผ URL๋ก ์ค์ ํด์ฃผ์๋ค.
JDBC ์ฌ์ฉ์ ํ์ํ 3๊ฐ์ง ๊ฐ์ฒด Connection, Statement, ResultSet ์ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ ์ธํ๋ค.
Properties ๊ฐ์ฒด์ user, password๋ฅผ ์ค์ ํ๋ค. *๋ก ์จ๋์์ง๋ง ์ ์ํ ์ค์ username๊ณผ password๋ฅผ ์ง์ ํ๋ค.
try {
// 1. JDBC ๋๋ผ์ด๋ฒ ๋ก๋ฉ
// MySQL : com.mysql.cj.jdbc.Driver
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
} catch (SQLException e) {
throw new ServletException(e);
} finally {
}
DriverManager.registerDriver()๋ฅผ ์ด์ฉํด์ java.sql.Driver ์ธํฐํ์ด์ค ๊ตฌํ์ฒด = JDBC ๋๋ผ์ด๋ฒ๋ฅผ ๋ก๋ฉํ๋ค.
MySQL์ com.mysql.cj.jdbc.Driver ํด๋์ค๊ฐ Driver ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์๋ค.
Vendor๋ ๋ฒ์ ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ JDBC ๋๋ผ์ด๋ฒ ๋ฌธ์์์ ํด๋น ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๋ค.
try~catch ๋ธ๋ก์ผ๋ก ๋ฌถ์ด SQLException์ด ๋ฐ์ํ ๊ฒฝ์ฐ ServletException ์ธ์คํด์ค์ ๋ด์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋(ํฐ์บฃ)์๊ฒ throwํ๋๋ก ํ๋ค.
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/knou", jdbcProperties);
DriverManager.getConnection()์ ํธ์ถํด์ MySQL ์๋ฒ์ ์ฐ๊ฒฐํ๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๊ฐ์ผ๋ก JDBC URL, ๋ ๋ฒ์งธ ์ธ์๊ฐ์ผ๋ก ์ฌ์ฉ์ ์ ๋ณด๊ฐ ๋ด๊ธด Properties ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ๋ค.
JDBC URL ํ์์ ๋๋ผ์ด๋ฒ๋ง๋ค ์กฐ๊ธ์ฉ ๋ค๋ฅด๋ค.
DB ์ฐ๊ฒฐ์ ์ฑ๊ณตํ๋ฉด java.sql.Connection ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ฅผ ๋ฐํํ๋ค.
stmt = conn.createStatement();
rs = stmt.executeQuery(
"SELECT STUDENT_NO, DEPARTMENT, STUDENT_NAME, GRADE, GENDER, AGE, PHONE_NUMBER, ADDRESS" +
" FROM STUDENT" +
" ORDER BY STUDENT_NO");
conn์ ํตํด SQL๋ฌธ์ ์๋ฒ์ ๋ณด๋ด์ ์คํํ๋ ๊ฐ์ฒด๋ฅผ ์ป์ ์ ์๋ค.
conn.createStatement()๊ฐ ๋ฐํํ๋ ๊ฒ์ java.sql.Statement ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์ด๋ค.
Statement ์ธํฐํ์ด์ค์๋ DB์ ์ง์ํ๋๋ฐ ํ์ํ ๋ฉ์๋๊ฐ ์ ์๋์ด ์๋ค.
SELECT๋ฌธ์ ์คํํ ๋๋ executeQuery()๋ฅผ ์ฌ์ฉํ๋ค.
executeQuery()๊ฐ ๋ฐํํ๋ ๊ฐ์ฒด๋ java.sql.ResultSet์ ๊ตฌํ์ฒด์ด๋ค. ์ด ๊ฐ์ฒด๋ฅผ ํตํด SELECT ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
servletResponse.setContentType("text/html; charset=UTF-8");
PrintWriter out = servletResponse.getWriter();
out.println("<html><head><title>ํ์ ๋ชฉ๋ก</title></head>");
out.println("<body><h1>ํ์ ๋ชฉ๋ก</h1>");
while (rs.next()) {
out.println(
rs.getString("STUDENT_NO") + ", " +
rs.getString("DEPARTMENT") + ", " +
rs.getString("STUDENT_NAME") + ", " +
rs.getInt("GRADE") + ", " +
rs.getString("GENDER") + ", " +
rs.getInt("AGE") + ", " +
rs.getString("PHONE_NUMBER") + ", " +
rs.getString("ADDRESS") + "<br>");
}
out.println("</body></html>");
๋ฐ์ดํฐ๋ฅผ HTML๋ก ์ถ๋ ฅํ๋ค.
setContentType()์ ํธ์ถํด์ ๋ฐ์ดํฐ ํ์์ HTML๋ก, ๋ฌธ์ ์งํฉ์ UTF-8๋ก ์ง์ ํ๋ค.
next()์ ์๋ฒ์์ ๋ค์ ํ์ ๊ฐ์ ธ์ค๋ฉฐ ๋ค์ ํ์ด ์์ผ๋ฉด true, ์์ผ๋ฉด false๋ฅผ ๋ฆฌํดํ๋ค.
์ปฌ๋ผ ๊ฐ์ ๊บผ๋ผ๋๋ getXXX()๋ฅผ ํธ์ถํ๋ค. getXXX()์ ์ปฌ๋ผ ์ด๋ฆ ํน์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํด์ ๊ฐ์ ธ์จ๋ค.
์ฌ๊ธฐ์์๋ ์ด๋ฆ์ ์ง์ ํ๋ค.
finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
finally ๋ธ๋ญ์์ ์์์ ํด์ ํ๋ค.
์์์ ํด์ ํ ๋๋ ์ญ์์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค. (ResultSet -> Statement -> Connection)
3. ๋ฐฐ์น ๋ฐ ํ ์คํธ
ํฐ์บฃ ์คํ ํ๊ฒฝ ์ค์ ์ฐฝ์ ์ด๊ณ [+] - Artifact...๋ฅผ ํด๋ฆญํ๋ค.
๋ชจ๋์ ์ ํํ๊ณ [OK]๋ฅผ ํด๋ฆญํ๋ค.
Application context๋ฅผ ์ง์ ํ๊ณ [OK]๋ฅผ ํด๋ฆญํ๋ค.
ํฐ์บฃ์ ๊ธฐ๋ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ค.
ํน์ JDBC์์ ClassNotFoundException์ด ๋ฐ์ํ๋ค๋ฉด
๋ชจ๋ Artifact์ JDBC ๋๋ผ์ด๋ฒ๊ฐ ์ถ๊ฐ๋์ด์๋์ง ํ์ธํ๊ณ ์๋ค๋ฉด ์ถ๊ฐํ๋ค.
- ๊ด๋ จ ๊ธ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (1) ํ์ ๋ชฉ๋ก ์กฐํ
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (2) ํ์ ๊ฐ์
- [IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (3) ํ์ ์ ๋ณด ์์
- [IntelliJ] ํ์๊ฐ์ ์์ (MVC) - (4) ๋ทฐ(JSP) ๋ถ๋ฆฌํ๊ธฐ
#IntelliJ ์นํ๋ก์ ํธ
#JAVA DB ์ฐ๋ ์์
#JAVA MySQL ์ฐ๋ ์์
References
์ดํ๊ฐ์ ์๋ฐ ์น ๊ฐ๋ฐ ์ํฌ๋ถ(ํ๋ฆฌ๋ , 2016, ์์ง์)
'Javaยท๏ปฟServletยท๏ปฟJSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (3) ํ์ ์ ๋ณด ์์ (0) | 2020.02.10 |
---|---|
[IntelliJ] ํ์๊ฐ์ ์์ (JAVA + MySQL) - (2) ํ์ ๊ฐ์ (0) | 2020.02.09 |
@WebServlet ์ด๋ ธํ ์ด์ ์ฃผ์ ์์ฑ ์ ๋ฆฌ (0) | 2020.02.08 |
GenericServlet์ ์์ํ๋ ์๋ธ๋ฆฟ ์์ฑ ๋ฐ ๋ฐฐ์น (0) | 2020.02.08 |
Servlet ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ธฐ๋ณธ ์๋ธ๋ฆฟ ์์ฑ ๋ฐ ๋ฐฐ์น (59) | 2020.02.04 |
๋๊ธ