2020. 12. 31. 18:59ใ๐๐ปโ๏ธ Study/โ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ( Database )
์ด๋ฒ ํฌ์คํ ์์๋ Docker์ Ubuntu๋ฅผ ๋ง๋ค์ด, Tomcat8์ ์ด์ฉํ์ฌ JDBC ์ Statement ์ค์ต์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
JDBC ์ค์ต์ ์ํ ํ๊ฒ ํ์๋ ค๋ฉด MySQL๊ณผ Launchpad(test-db)๊ฐ ํ์ํ๋ฏ๋ก ์๋์ ๊ธ์ ์ฐธ๊ณ ํ์ ์ ์ค์ตํ์๊ณ ์ค์๋ฉด ๋์์ด ๋์ค๊ฑฐ ๊ฐ์์!
JDBC ๋ ?!
Java Database Connectivity
์ฆ, ์๋ฐ์์ DBMS์ ์ ์ํ๊ธฐ ์ํ API (ํจํค์ง) ์ ๋๋ค. (ex) java.sql.* , javax.sql.*
DBMS์์ ์ ๊ณตํ๋ JDBC ์ปค๋ฅํฐ (๋๋ผ์ด๋ฒ)๋ฅผ ์ค์น ํ ํ ์ฌ์ฉํ์ค ์ ์์ต๋๋ค.
JDBC ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ
JDBC๋ ๋์์ธ ํจํด์ ๋น๋(Builder) ํจํด์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๋น๋(Builder) ํจํด์ด๋ ?
DriveManager -> Connection -> Statement ( -> ResultSet)
1. ๋๋ผ์ด๋ฒ ๋ก๋ฉ
์๋ฐ ๋ฆฌํ๋ ์ (Reflection)์ ๋ค์ด๋๋ฏน ํด๋์ค ๋ก๋ฉ (.class ํ์ผ)
Class.forName(...);
2. DB ์ฐ๊ฒฐ -> Connection ์ค๋ธ์ ํธ ์์ฑ
Connection conn = DriverManager.getConnection(dburl, id, password);
3. Statement ์ค๋ธ์ ํธ ์์ฑ ( SQL์ ๋ฃ์ด์ ์คํํ๋ ์ค๋ธ์ ํธ)
Statement stmt = conn.createStatement();
4. Statement ์คํ ( executeUpdate / executeQuery )
stmt.executeUpdate("INSERT INTO xxxx VAlUES ("") ");
ResultSet rs = stmt.executeQuery(“SELECT …”);
5. ResultSet์ผ๋ก ๊ฒฐ๊ณผ ์ถ๋ ฅ
while (rs.next()) {
String sampleString = rs.getString(1);
int sampleInteger = rs.getInt(2);
}
Docker์ MySQL๊ณผ Launchpad(test-db) ์ค์น๋ ์ด์ ๊ธ์์ ์ค์ตํ์์ผ๋ฏ๋ก, ์๋ตํ๊ณ ๋ฐ๋ก JDBC ์ค์ต๋ง ์๊ฐํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
๐ Docker์ ubuntu ์ค์น ๋ฐ ์คํํ๊ธฐ
JDBC ๋๋ผ์ด๋ฒ๋ก Ubuntu๋ฅผ ์ด์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.
ubuntu ์ค์นํ๊ธฐ
Ubuntu์ ํฌํธ ๋๋ฒ๋ 8080 ์ด๋ฏ๋ก ๊ผญ 8080:8080 ์ผ๋ก ์ง์ ํด์ฃผ์ธ์!
Docker run ๋ช ๋ น์ด๋ฅผ ํตํด ubuntu ์ปจํ ์ด๋๋ฅผ ์ค์น ๋ฐ ๋ฐ๋ก ์คํํ์ค ์ ์์ต๋๋ค
docker run -it -p 8080:8080 --name=ubuntu_new1 ubuntu:18.04
๐ ubuntu์ ํ์ํ ๋๋ผ์ด๋ฒ ์ค์นํ๊ธฐ
ubuntu๋ฅผ ์ค์นํ์ จ์ผ๋ฉด JDBC๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ๋ช๊ฐ์ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
openjdk-8-jdk / nano / tomcat8 / libmysql-java๋ฅผ ์ค์นํด๋๋ก ํ๊ฒ ์ต๋๋ค.
apt upadate
apt install nano
apt install openjdk-8-jdk
apt install libmysql-java
apt install tomcat8
์์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ฐจ๊ทผ์ฐจ๊ทผ ์ค์นํ์๋ฉด ๋ฉ๋๋ค.
๐ tomcat8 ์๋ฒ ์คํํ๊ธฐ
์์ ๋๋ผ์ด๋ฒ๋ฅผ ๋ชจ๋ ์ค์นํ์ จ์ผ๋ฉด ์ด์ mysql-coonector ์ tomcat8์ ์ฐ๊ฒฐํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
cd /usr/share/java
ln -s /usr/share/java/mysql-connector-java.jar /usr/share/tomcat8/lib/
service tomcat8 start
โ๏ธ ์ฌ๊ธฐ์ Fail ์ด ๋ ๋ ํฐ์บฃ์๋ฒ๋ ์คํ๋์์ผ๋ฏ๋ก, ๊ฑฑ์ ํ์์ง ์์๋ ๋ฉ๋๋ค!!
๐ ํฐ์บฃ์๋ฒ ์คํ ํ์ธํ๊ธฐ
ํฌ๋กฌ์ผ๋ก localhost:8080์ ๋ค์ด๊ฐ๋ณด๊ฒ ๋๋ฉด It works ! ๊ฐ ๋ฌ๋ค๋ฉด ๋ง๊ฒ ํฐ์บฃ ์๋ฒ๋ ์คํ๋ ๊ฒ์ ๋๋ค.
localhost:8080
๐ JDBC - Statement jsp ํ์ผ ๋ง๋ค๊ธฐ
์์์ ์ค์นํ nano๋ฅผ ๊ฐ์ง๊ณ jsp ํ์ผ์ ๋ง๋ค์ด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
nano /var/lib/tomcat8/webapps/ROOT/statemen.jsp
ํ์ผ์ ์์ฑ์ ๋จผ์ Docker์ฉ MySQL์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค!
์๋ก์ด ํฐ๋ฏธ๋์ ์ด์ด ์๋ ๋ช ๋ น์ด๋ก MySQL์ IP์ฃผ์๋ฅผ ์ฐพ์์ฃผ์ธ์.
docker inspect mysql1 | grep IPAddress
<%@ page import = "java.sql.*" %>
<% Statement stmt = null; ResultSet rs = null;
Class.forName("com.mysql.jdbc.Driver");
String dbUrl = "jdbc:mysql://172.17.0.2:3306/employees";
Connection conn = DriverManager.getConnection(dbUrl, "root", "yunas");
try {
stmt = conn.createStatement();
if( stmt.execute ("select * from employees limit 10")) {
rs = stmt.getResultSet();
}
while(rs.next()) {
out.println("emp_no : "+rs.getInt("emp_no") +" name : "+ rs.getString("first_name") +" "+ rs.getString("last_name"));
out.write("<br/>");
}
rs.close();
stmt.close();
} catch(Exception e) {
out.println("rs.next() Error");
}
conn.close();
%>
String dbUrl = "jdbc:mysql://{IPAddress -192.17.0.2}:3306/{database}";
Connection conn = DriverManager.getConnection(dbUrl, "root", "{mysql_password}");
{192.17.0.2} ์๋ฆฌ์ ์์์ ์ฐพ์๋ Docker MySQL์ IPAddress๋ฅผ , mysql -u root - p ๋ช ๋ น์ด๋ก MySQL ์๋ฒ์ ๋ค์ด๊ฐ ๋ ์ฌ์ฉํ๋ Password๋ฅผ {mysql_password} ์๋ฆฌ์ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค : )
stmt.execute ("select * from employees limit 10")
์ํ๋ SQL๋ฌธ์ execute ์์ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค : )
rs = stmt.getResultSet();
rs.getString("first_name")
rs.getInt("emp_no")
rs.getDate("hire_date")
out.println("emp_no : "+rs.getInt("emp_no") +" name : "+ rs.getString("first_name") +" "+ rs.getString("last_name"));
๊ฒฐ๊ณผ๊ฐ์ rs์ ResultSet์ผ๋ก ์ ์ฅ๋๋ฉฐ, ํด๋น Column์ ๋ด์ฉ์ ๊ฐ์ ธ์ค์ค ์ ์์ต๋๋ค.
getString(), getInt() ์์ ๋ค์ด๊ฐ๋ ๋ด์ฉ์ ๊ผญ Table์ Column๋ช ๊ณผ ๋์ผํด์ผํฉ๋๋ค!
nano๋ฅผ ์ ์ฅํ๊ณ ๋๊ฐ์๋ ค๋ฉด ?!
control(^) + X , y ๋ก ๋๊ฐ์ค์ ์์ต๋๋ค.
๐ Statement.jsp ์คํ ๊ฒฐ๊ณผ
jsp ์คํ ๊ฒฐ๊ณผ๋ localhost:8080/Satatement.jsp ๋ก ํ์ธํ์ค ์ ์์ต๋๋ค.
MySQL ์๋ฒ์ ๋ค์ด๊ฐ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
์์ ์๋์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ ๊ฒ์ ํ์ธํ์ค ์ ์์ต๋๋ค : )
๋ค์ ํฌ์คํ ์์๋ JDBC PreparedStatement ์ ๊ดํ ์ค์ต์ ๋ํ ๊ธ์ ์จ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค : )
'๐๐ปโโ๏ธ Study > โ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ( Database )' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker/MySQL] JDBC - PreparedStatement ์ค์ต (2) | 2020.12.31 |
---|---|
MySQL Launchpad(test-db) ๋ค์ด๋ก๋ ๋ฐ ์ค์น (0) | 2020.12.29 |
Docker๊ธฐ๋ฐ์ MySQL ์ค์น ๋ฐ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ (0) | 2020.12.29 |