15일차는 강사님이 아프셔서 오전수업밖에 안해서 내용이 없어서 Day15,16일차때 배운내용을 정리해보려한다. 이제 다음주면 HTML/CSS 수업을 진행하기로해서 요새는 네트워크 + 자바 + DB 연결하는 부분을 배우고 있다. DB랑 자바랑 같이 연결하는 건 할만한데 네트워크 + 자바는 좀 어려운것같다. 익숙하지 않아서 그런지 복잡하다ㅠㅡㅠ
statement 방법)
String sql = "INSERT INTO tb_member(컬럼...) VALUES (값1, 값2,...)";
stmt.executeUpdate(sql);
PreparedStatement 사용 방법)
String sql = "INSERT INTO tb_member(컬럼...) VALUES (?,?...)"; // 컬럼의 갯수만큼 ?를 사용해준다.
// ?는 변수 처리
pstmt = conn.prepareStatement(sql); // 컴파일만 시킨다.
pstmt.setString(1, 값1);
pstmt.setString(2, 값2);
...
pstmt.executeUpdate(); // 실행
Q. 단어장 프로그램 만들기
/*
DB 연결 메소드
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBconn {
public static Connection conn;
public static Connection getConnection() throws SQLException, ClassNotFoundException {
String url = "jdbc:mysql://127.0.0.1/jcp?useSSL=false";
String userid = "DB 이름";
String userpw = "DB 비밀번호";
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(url, userid, userpw);
return conn;
}
public static void dbclose(){
try {
conn.close();
conn = null;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
public class VocaDTO {
private int idx;
private String eng;
private String kor;
private int level;
private String rdate;
public VocaDTO() {
}
public VocaDTO(int idx, String eng, String kor, int level, String rdate) {
this.idx = idx;
this.eng = eng;
this.kor = kor;
this.level = level;
this.rdate = rdate;
}
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public String getEng() {
return eng;
}
public void setEng(String eng) {
this.eng = eng;
}
public String getKor() {
return kor;
}
public void setKor(String kor) {
this.kor = kor;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getRdate() {
return rdate;
}
public void setRdate(String rdate) {
this.rdate = rdate;
}
@Override
public String toString() {
return "idx : " + idx + " eng : " + eng + " kor : " + kor + " level : " + level + " rdate : " + rdate;
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
public class VocaDAO {
Connection conn;
Scanner sc;
StringBuilder sql;
PreparedStatement pstmt;
ResultSet rs; // 참조변수
public void insert() {
sc = new Scanner(System.in);
System.out.print("추가할 단어를 입력하세요 >> ");
String eng = sc.next();
System.out.print("단어의 뜻을 입력하세요 >> ");
String kor = sc.next();
System.out.print("레벨을 입력하세요 >> ");
int level = sc.nextInt();
try {
conn = DBconn.getConnection();
sql = new StringBuilder();
sql.append("INSERT INTO tb_word(w_eng, w_kor, w_level) VALUES (?,?,?)");
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, eng);
pstmt.setString(2, kor);
pstmt.setInt(3, level);
int result = pstmt.executeUpdate();
if (result >= 1) System.out.println("단어 등록 성공!");
else System.out.println("단어 등록 실패! ");
DBconn.dbclose();
pstmt.close();
pstmt = null;
} catch (Exception e) {
e.printStackTrace();
}
}
public void list() {
try {
conn = DBconn.getConnection(); // DB 연결
sql = new StringBuilder(); // 문자열을 저장할 Builder 만들기
sql.append("SELECT w_eng , w_kor , w_level, w_datetime FROM tb_word ORDER BY w_eng asc");
pstmt = conn.prepareStatement(sql.toString()); // sql 구문을 넣어 컴파일하여 conn 안에 prepareStatement 실행
rs = pstmt.executeQuery(); // resultSet 반환
while (rs.next()) { // next를 하면 한 줄 아래로 내려감
String eng = rs.getString("w_eng"); // 커서가 첫번째 데이터를 가르키게 된다. 거기서 rs.getString에서 w_eng 컬럼을
// 가져오게 된다. eng에 가져온 데이터를 저장하게 된다.
String kor = rs.getString("w_kor");
int level = rs.getInt("w_level");
String datetime = rs.getString("w_datetime");
System.out.println(eng + " : " + kor + " (" + level + ", " + datetime + ")");
}
DBconn.dbclose(); // 참조변수 없애기
pstmt.close();
pstmt = null;
rs.close();
rs = null;
} catch (Exception e) {
e.printStackTrace();
}
}
public void search() {
sc = new Scanner(System.in);
System.out.print("검색할 단어를 입력하세요 >> ");
String word = sc.next();
try {
boolean isFind = false;
conn = DBconn.getConnection(); // DB 연결
sql = new StringBuilder();
sql.append("SELECT w_eng, w_kor, w_level, w_datetime from tb_word where w_kor =?"); // w_kor에 대한 전체 내용 출력
pstmt = conn.prepareStatement(sql.toString()); // 컴파일시켜서 pstmt를 만들어서
pstmt.setString(1, word); // ?에 들어갈 단어를 입력
rs = pstmt.executeQuery(); // rs로 출력
// if(!rs.next()){ // 이렇게 하면 하나만 출력하게 된다.
// System.out.println("찾는 단어가 없습니다.");
// }else {
// String eng = rs.getString("w_eng"); // 커서가 첫번째 데이터를 가르키게 된다. 거기서 rs.getString에서 w_eng 컬럼을
// // 가져오게 된다. eng에 가져온 데이터를 저장하게 된다.
// String kor = rs.getString("w_kor");
// int level = rs.getInt("w_level");
// String datetime = rs.getString("w_datetime");
// System.out.println(eng + " : " + kor + " (" + level + ", " + datetime + ")");
// }
// rs.next를 하게 되면 커서가 다음으로 넘어가게 된다.
while (rs.next()) { // 이렇게 하면 여러개가 출력되고
isFind = true;
String eng = rs.getString("w_eng");
String kor = rs.getString("w_kor");
int level = rs.getInt("w_level");
String datetime = rs.getString("w_datetime");
System.out.println(eng + " : " + kor + " (" + level + ", " + datetime + ")");
}
if (!isFind) System.out.println("찾는 단어가 없습니다.");
DBconn.dbclose(); // 참조변수 없애기
pstmt.close();
pstmt = null;
rs.close();
rs = null;
} catch (Exception e) {
e.printStackTrace();
}
}
public void edit() {
sc = new Scanner(System.in);
System.out.print("수정할 단어를 입력하세요 >> ");
String eng = sc.next();
System.out.print("단어의 뜻을 입력하세요 >> ");
String kor = sc.next();
System.out.print("레벨을 입력하세요 >> ");
int level = sc.nextInt();
try {
conn = DBconn.getConnection();
sql = new StringBuilder();
sql.append("UPDATE tb_word SET w_kor = ? , w_level =? where w_eng = ?");
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, kor);
pstmt.setInt(2, level);
pstmt.setString(3, eng);
int result = pstmt.executeUpdate();
if (result >= 1) System.out.println("단어 수정 성공!");
else System.out.println("단어 수정 실패! ");
DBconn.dbclose();
pstmt.close();
pstmt = null;
} catch (Exception e) {
e.printStackTrace();
}
}
public void delete() {
sc = new Scanner(System.in);
System.out.print("삭제할 단어를 입력하세요 >> ");
String word = sc.next();
try {
conn = DBconn.getConnection(); // DB 연결
sql = new StringBuilder();
sql.append("DELETE FROM tb_word WHERE w_eng = ?");
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, word);
int result = pstmt.executeUpdate();
if(result >= 1) System.out.println("단어 삭제 성공! ");
else System.out.println("단어 삭제 실패!");
} catch (Exception e) {
e.printStackTrace();
}
}
public void random(){
sc = new Scanner(System.in);
System.out.println("단어 맞추기 게임을 시작합니다");
int sum = 0;
try {
conn = DBconn.getConnection(); // DB 연결
sql = new StringBuilder(); // 문자열을 저장할 Builder 만들기
sql.append("SELECT w_eng , w_kor , w_level, w_datetime FROM tb_word order by rand() limit 10");
pstmt = conn.prepareStatement(sql.toString());
while (true) {
rs = pstmt.executeQuery();
rs.next();
String eng = rs.getString("w_eng");
String kor = rs.getString("w_kor");
System.out.print(eng + "의 뜻을 입력하세요 >> ");
String word = sc.next();
if(kor.equals(word)){
System.out.println("맞았습니다. ");
sum += 1;
System.out.println("최종 점수 : " + sum);
} else System.out.println("틀렸습니다.");
if(sum == 10){
System.out.println("10점 모두 맞혔습니다. ");
System.out.println("게임을 종료하겠습니다😁");
break;
}
}
DBconn.dbclose(); // 참조변수 없애기
pstmt.close();
pstmt = null;
rs.close();
rs = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
VocaDTO vocaDTO;
VocaDAO vocaDAO = new VocaDAO(); // 객체 생성
while(true){
System.out.println("🎁 단어장 🎁");
System.out.println("1. 등록 2.출력 3.검색 4.수정 5.삭제 6. 단어 맞추기 게임 7.프로그램 종료");
int input = sc.nextInt();
if(input == 7){
System.out.println("프로그램을 종료합니다.");
break;
}
switch (input){
case 1:
vocaDAO.insert();
break;
case 2:
vocaDAO.list();
break;
case 3:
vocaDAO.search();
break;
case 4:
vocaDAO.edit();
break;
case 5:
vocaDAO.delete();
break;
case 6:
vocaDAO.random();
break;
}
}
}
}
소켓의 통신 흐름