window -> cmd -> c:\xampp\mysql\bin\mysql.exe -u root -p -> enter
Welcome ~~~~ 이 나오지 않으면 아무리 eclipse를 실행해도 연결되지 않은 거라
eclipse와 SQL을 사용할 수가 없다.
★ MariaDB 연결 여부를 확인하기 위한 용도(exception .. 에러를 굳이 확인하지 않아도 연결 여부 확인 방법)
1. class DbConnection 을 만들고 SQL와 연결하는 메서드, 코드를 작성한 후 꼭 해당 메서드를 호출해야 연결이 된다.
연결하는 코드를 작성해놓고 해당 메서드를 호출하지 않으면 절대 SQL과 연결되지 않는다.
2. DriverManager.getConnection(url, user, password);
DriverManager : 카카오택시 비유
--> 카카오는 Driver가 아니라 Driver를 관리하는 역할.
3. System.err.printf("[SQL 예외] : %s\n", e.getMessage()) -> try/catch (SQLException e)에서
오류난 원인을 명확하게 명시해주는, 가져다주는 메서드(오류 원인에 따라서 오류메세지가 다르다)
e.printStackTrace(); --> 오류 메세지를 최대한 자세하게 보여준다. 필요하지 않을 경우 주석처리.
4. JDBC 는 DriverManager 이다. JDBC는 카카오 택시이다.
5. Connection connection 은 DB와의 연결이다. DB와의 직통 회선.
6. dbConnection은 사용하지 않을 때는 close() 해주어야 한다.
7. 보험가입할 때, 신청서를 작성해서 준다. 그 신청서가 statement 이다.
8. Statement stmt = connection.createStatement();
stmt.execute(sql, Statement.RETURN_GENERATED_KIYS); --> 빈 신청서를 받아서 작성하고 실행하는 것이다. 작성한 것을 넘긴다.
★ 이 신청서는 당연히 DB와의 연결(connection)한테 받아야 한다.
Option : SQL의 AUTO_INCREMENT 번호 자동 증가. 관련
9. ResultSet rs = statement.getGeneratedKeys();
ResultSet : 보고서 -> SQL에서 보이는 결과. 표. SELECT 한 화면. 테이블을 조회한 결과를 가져온다.
rs는 SQL의 결과를 저장한다.
10. int id = -1; -1은 실패했다는 의미. rs는 책이다. rs.next() 를 통해서 다음 책장으로 넘어간다.
다음 게시물의 번호를 가져온다.
★ ResultSet 은 next()를 통해서 결과를 가져올 수 있다. 다만 한번에 1개의 데이터만 가져올 수 있다.
11. 쿼리 문법 오류가 있을 시, 이클립스에서 작성한 쿼리문을 그대로 복사해서 SQL에서 직접 실행해보고 문법을 고친 후 고친 자료를 그대로 복사해서 이클립스에 복붙.
[ 2020-06-17 수업 1부 영상 정리 자료 ] ↑
--------------------------------------------------------------------------------
12. 게시물 수정 ( 반영된, 영향을 받은 게시물의 개수를 반환한다)
update의 경우, executeupate(); 라는 메서드가 따로 있다.
int affectedRows = 0; --> 영향을 받은 개수.
Statement statement = connection.createStatement();
afftectedRows = statement.executeupdate(sql); -> 기본적으로 반환한다.
13. 게시물 삭제 ( 반영된, 영향을 받은 게시물의 개수를 반환한다)
delete 할 때도, affectedRows = statement.executeupdate(sql);
--> 수정과 똑같이 update를 사용한다. delete라는 메서드는 따로 없는 듯.
delete 메서드 자체에 delete 내용이 없어도 SQL에서 게시물이 삭제되는 이유는?
--> 쿼리문에 DELETE 라고 작성해주었기 때문에 그대로 처리 된 듯. 당연한 것.
14. 최신 게시물 3개 가져오기
SELETE * FROM article ORDER BY id DESC LIMIT 3(3개라는 제약) ( 내림차순 : 처음부터 큰 숫자를 가져온다 )
★이클립스에 쿼리를 작성할 때, 먼저 SQL에 복붙해서 실행이 잘 되는지 확인하고 코드를 작성하면 번거로움을 줄일 수 있다.
SELETE * FROM article ORDER BY id ASC LIMIT 3(3개라는 제약) ( 오름차순 : 위에서 아래로 점점 숫자가 커진다. )
★row : 열 , column : 행
rows 들이 Integer, String 1개의 타입으로만 이루어진 것이 아니라 여러 타입으로 이루어져 있으므로
List<Map<String, Object>> selectRows(String sql) {
} 메서드를 만든다. Object는 모든 타입을 담을 수 있지만 꺼낼때는 모두 형변환을 해주어야 한다.
key는 String으로 이루어져 있다.
그리고 SELECT(데이터를 가져올 때는) execute가 아닌 executeQuery() 라는 메서드를 사용한다.
executeQuery()는 SELECT용이다. --> ★ 이 친구도 ResultSet을 반환한다. : 보고서
★ResultSet 은 무조건 1개의(1페이지의) 값만 가져온다. 중요!
[ 불러오는 방법, 타입, type ]
System.out.println(rs.getInt(1); --> 1페이지의 1열?의 값을 Int로 불러오겠다.
System.out.println(rs.getInt(2); --> 오류 발생 ! 이유 : 2번째 열은 regDate로 DATETIME이라 int로 받아올 수 없다.
DATETIME -> rs.getTimestamp(2) 사용!
15. Query : SELECT id AS n FROM article ORDER BY id ASC LIMIT 3
의미 : 원래의 칼럼 이름id를 n으로 바꿔서 SELETE(조회, 검색, 불러온다) !
★ 칼럼 이름 변경
16. ResultSetMetaData metaData = rs.getMetaData();
--> metaData를 잘 이용하면 칼럼 이름이 바뀌어도, 칼럼 선택 수가 1개이던 모두 선택이던
key, key 값을 알아서 if문을 쓰지 않고도 원하는 결과를 얻을 수가 있다. 스마트하게!
17. int columnSize = metaData.getColumnCount(); --> 이 코드는 현재 칼럼 개수를 가져온다.
칼럼 개수 등은 SELECT를 어떻게 하느냐에 따라 매번 달라질 수 있다. 내가 만들어 놓은 칼럼들이 항상
고정되어서 조회되고 관리되는게 아니다.
18.
for (int columnIndex = 0; columnIndex < columnSize; columnIndex++) {
String columnName = metaData.getColumnName(columnIndex + 1);
Object value = rs.getObject(columnName);
if ( value instanceof long) {
int numValue =(int)(long)value; --> 원래 long타입이기 때문에 먼저 long-> int변경
row.put(columnName, numValue);
}
else if ( value instanceof Timestamp ) {
String dateValue = value.toString();
dateVaule = dateValue.substring(0, dateValue.length() - 2);
row.put(columnName, dateValue);
}
else {
row.put(columnName, columnName); --> 어짜피 String이기 때문에 따로 형변환 없이.
}
// map에 값을 입력 map.put(columnName, columnName으로 getString)
}
★ 데이터를 받아오는 입구에서 한 큐에 형변환을 해결해버린다.
그러지 않으면 다른 메서드에서 사용할 때! 항상 형변환을 해주어야 하는 큰 번거로움이 따른다.!!
19. Query : As -> 별명 의미.
20. SELECT COUNT(*) AS nn FROM article --> 전체 게시물 개수를 보여준다. COUNT(*)만 입력하면 문법 반영되지 않기 때문에 AS nn 으로 별명을 붙여서 Query가 알맞게 반영될 수 있도록 해준다.
21. MAX(id) -> 가장 큰 id를 불러온다.
22. mysql은 참이라는게 없다 ( boolean )
--> 참이라면 0, 거짓이라면 1 반환.
if : 만약에 페이지가 한개도 없다고하면 빈박스라도 리턴하겠다. 라는 의미의 코드.
23. TRUNCATE board; --> board table 의 모든 row(열)를 삭제하겠다. // column(행)
* CHAR 의 최대는 255 이다.
CHAR(255) 가 최대.
[ 참고 영어단어 ]
connect : 연결하다.
suitable : 적합한, 적절한
execute : 실행하다.
generated : 발생시키다, 만들어내다.
denied : 사실이 아니라고 말하다, 부인하다.
statement : 성명서, 진술서, 서술 ( SQL 쿼리 작성 신청서)
'Java' 카테고리의 다른 글
workspace 경로 확인하는 법 (0) | 2020.06.28 |
---|---|
이클립스 클래스 분할 관리(분리, 각 파일 생성), SQL (0) | 2020.06.18 |
SQL, JDBC (0) | 2020.06.16 |
JDBC (0) | 2020.06.15 |
Object type 비교 (0) | 2020.06.03 |