참고
https://m.blog.naver.com/rnalsttnn2/222099599178
https://sas-study.tistory.com/160
package config;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcConnection {
String url = "jdbc:mysql://localhost:3306/test" + "?serverTimezone=Asia/Seoul&characterEncoding=UTF-8";
String root = "root";
String password = "1q2w3e4r!!";
public Connection getJdbc(){
Connection conn;
try{
// 1. JDBC 드라이버 로딩
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 데이터베이스 커넥션 생성
conn = DriverManager.getconnection(url, root, password);
} catch (DriverNotFoundException | SQLException e){ // 예외처리
throw new RuntimeException(e);
}
return conn;
} // getJdbc 끝
} // MovieConnection 끝
1. url, id, pw를 선언하고 Connection conn을 전역변수로 선언한다.
2. Class.forName()
Class라는 이름을 가진 클래스는 JVM에서 동작할 클래스들의 정보를 묘사하는 일종의 메타클래스.
데이터 베이스와 연결할 드라이버 클래스를 찾아서 로드하는 열할.
데이터베이스와 연결하는 드라이버 클래스를 찾아 로드.
3. conn = DriverManager.getConnection(url, root, password)
선언한 conn에 생성된 Connection 객체 대입.
드라이버 서버에 접속ㅊ할 수 있는 커넥션 객체를 가져옴.
연결을 관리하는 Connection 객체를 생성.
* DriverManager.getConnection(연결문자열,DB_ID, DB_PW)
연결문자열(Connection String) : url
4. catch(ClassNotFoundException e)
2번 Class.forName에는 예외처리 필요.
에러가 있다면 드라이버 로드에 실패한 것.
5. catch(SQLException e)
3번 DriverManager.getConnection(url, root, password)
SQLServer에서 경고 또는 오류를 반환할 때 throw되는 예외.
에러가 있다면 Connection 객체 실패한 것.
package repository;
import ...
public class UserRepository {
private static UserRepository repository;
public static UserRepository getRepository(){ // repository가 비어 있으면 UserRepository() 생성
if(repository == null) repository = new UserRepository();
return repository;
}
public UserDto login(String userId, String userPwd) {
Connection conn = new JdbcConnection().getJdbc();
String sql = "select * from user where user_id = ? and user_pwd = ?";
UserDto user = new UserDto();
try{
// 3. Statement 생성
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setString(1, userId);
psmt.setString(2, userPwd);
// 4. 쿼리 실행
ResultSet resultSet = psmt.executeQuery();
while(resultSet.next()){
user.setUserId(resultSet.getString("user_id"));
user.setUserEmail(resultSet.getString("user_email"));
user.setUserPwd(resultSet.getString("user_pwd"));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
return user;
} // login(...) 끝
}
1. Connection conn = new JdbcConnection().getJdbc()
class JdbcConnction에서 forName하고 DriverManager.getConnection 했음.
2. PreparedStatement psmt = conn.prepareStatment(sql)
prepareStatement 클래스
Statement 클래스보다 기능이 향상된 클래스
인자와 관련된 작업이 특화(매개변수)
코드 안정성 높은, 가독성 높음
코드량이 증가 -> 매개변수를 set해줘야하기 때문에
텍스트 sql 호출
sql 구문에 변수나 값을 넣을 때 ?를 사용한다.
sql = "insert into tblMemo values(memoSeq.nextval,?,?,default,?)"; pstat = conn.prepareStatement(sql); //매개변수 값 대입 + 매개변수 유효화 처리. pstat.setString(1, name); pstat.setString(2, memo); pstat.setString(3, priority);
Statement 클래스
- sql 구문 실행하는 역할
- 스스로는 sql 구문 이해 못함 → 전달역할
- sql 관리 O, 연결 정보 X
- ++를 사용하거나 String.format을 사용
String name = "이세삼"; String memo = "스테이먼트 테스트"; String number = "1"; stmt = conn.createStatement(); // ++ 사용 stmt.executeQuery("SELECT * FROM TEST WHERE NAME >" + name + "AND MEMO>" + memo) // or format형식 사용 String sql = String.format("SELECT * FROM TEST WHERE NAME NAME'%s'", name);
Connection객체를 생성한 후에는 Connection 객체로부터 Statement를 생성하고 쿼리를 실행할 수 있음.
Statement는 다음과 같이 Connection의 creatStatement() 메소드를 사용하여 생성.
'공부 > SQL' 카테고리의 다른 글
52회 SQLD 후기 (7) | 2024.03.14 |
---|---|
DDL, DML, DCL (0) | 2023.06.02 |