JDBC(Java DataBase Connectivity)
public class JdbcUtil_Jdbc {
public static Connection getConnection() {
// JDBC 연동 - 커넥션 드라이버 찾기
String url = "jdbc:h2:~/test"; // DB Url
String user = "sa"; // 사용자 id
String password = ""; // 비밀번호
Connection conn = null;
try {
Class.forName("org.h2.Driver"); // 드라이버 검색 => 인스턴스화
System.out.println("드라이버 검색 성공");
conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
} catch (ClassNotFoundException e) {
System.out.println("드라이버 검색 실패");
throw new RuntimeException(e);
} catch (SQLException e) {
System.out.println("SQL 오류");
throw new RuntimeException(e);
}
return conn;
}
public static void close(Connection obj) {
try {
if(obj != null) obj.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
url, userId, password close()를 통해 사용 후 conn의 통로를 닫아준다.
public class SaramDAO {
// Database에 CRUD를 전담하는 클래스
Connection conn = null; // 디비 연결 용도
PreparedStatement stmt = null; // 디비에 SQL 전달
ResultSet rs = null; // 결과를 받아 올때 사용.
// 검색
public List<SaramDTO> findAll() {
List<SaramDTO> list = new ArrayList<SaramDTO>();
try {
conn = JdbcUtil_Jdbc.getConnection();
stmt = conn.prepareStatement("SELECT * FROM SARAM");
rs = stmt.executeQuery();
while(rs.next()) {
Long seq = rs.getLong("seq");
String id = rs.getString("id");
String name = rs.getString("name");
int age = rs.getInt("age");
list.add(new SaramDTO(Math.toIntExact(seq), id, name, age));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil_Jdbc.close(conn, stmt, rs);
}
return list;
}
JDNI(Java Naming and Directory Interface)
https://tomcat.apache.org/tomcat-9.0-doc/jndi-resources-howto.html
<resource-ref>
<res-ref-name>jdbc/H2DB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
web.xml에 다음과 같이 설정한다.
<Context >
<Resource name="jdbc/H2DB"
auth="Container"
type="javax.sql.DataSource"
username="sa"
password=""
driverClassName="org.h2.Driver"
url="jdbc:h2:~/test"
maxTotal="8"
maxIdle="4"/>
</Context>
META-INFO/context.xml에 다음과 같이 설정한다. 인텔리제이를 사용중이라 META-INFO조차 없었는데 Project Structure -> Modules -> Add Application Server specific dexriptor...에서 추가해서 만들어졌다! 여기서 name="jdbc/H2DB"
과 web.xml의 <res-ref-name>jdbc/H2DB</res-ref-name>
의 name은 동일해야한다.
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/H2DB");
DB Connection 부분 설정 코드이다.
https://heekng.tistory.com/32
https://go-coding.tistory.com/76
https://2-juhyun-2.tistory.com/638