[#25] DB(데이터베이스) + SQL

2025. 2. 28. 17:47·LG 유플러스 유레카 SW/SQL

DBMS

  • Oracle / MySQL/ DB2 ... 제품들 ➡️ ANSI SQL을 지원하면서 별도의 자기들만의 SQL을 가지고 있음
  • 표준 텍스트 포맷인 SQL을 만들어서 WORA 문제 해결 ➡️ 개발자 편의성 증대를 위해 ANSI SQL 지원
  • ANSI SQL은  RDBMS(Relational)만 해석 가능
  • NoSQL (Not only SQL): SQL이 아니더라도 다른 방식으로 표현가능하다는 의미
    • MongoDB(document): { "이름" : 값 } 형태
    • radis(key-value): map 형태

 

데이터베이스 용어

테이블 데이터베이스에서 데이터를 구성하기 위한 기본적인 단위, 행과 열로 구성
행 테이블의 구성 요소 중 하나, 테이블의 가로로 배열된 데이터의 집합
열 테이블의 구성 요소 중 하나, 행에 저장되는 유형의 데이터
기본키 행을 구분할 수 있는 식별자
쿼리 데이터베이스에서 데이터를 조회하거나 삭제, 생성, 수정 같은 처리를 하기 위해 사용하는 명령문

 

데이터 유형

varchar 문자형 - 가변적
char 문자형 - 고정적
int 숫자형

 

SQL

 

-- user 생성
CREATE USER 'ureca'@'%' IDENTIFIED BY 'ureca';
GRANT ALL PRIVILEGES ON *.* TO 'ureca'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;


-- db 생성
CAREATE DATABASE ureca


-- 테이블 생성
CREATE TABLE `ureca`.`member` (
  `name` VARCHAR(45) ,
  `age` INT 
);


-- 테이블 구조 변경
ALTER TABLE `ureca`.`member` 
ADD COLUMN `id` VARCHAR(45) NOT NULL ,
ADD COLUMN `pw` VARCHAR(45) NOT NULL ,
CHANGE COLUMN `name` `name` VARCHAR(50) NOT NULL ,
CHANGE COLUMN `age` `age` INT NOT NULL ,
ADD PRIMARY KEY (`id`);


-- 테이블 삭제
DROP TABLE `ureca`.`member` ;


-- 테이블 데이터 삭제
DELETE FROM `ureca`.`member`;
TRUNCATE TABLE `ureca`.`member` ;


-- 트랜잭션 관리
select * from member;
start transaction;
delete from member;
truncate table member;
rollback;

 

Client - DB 연동하는 법

출처: https://velog.io/@alstjdwo1601/JDBC%EB%9E%80

1. 드라이버 등록 (jdbc 드라이버)

2. 연결

3. statment 생성

4. SQL 전송

5. 결과 얻기

6. 자원 종료

package test1;

import java.sql.*;

public class SelectTest {

	public static void main(String[] args) {
		// JDBC 6단계

		try {
			// 1. Driver 등록
			Class.forName("com.mysql.cj.jdbc.Driver"); // 대표 드라이버 클래스 이름으로 작성(mySQL: com.mysql.cj.jdbc.Driver)

			// 2. Connection
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca"); // 인자: url(protocol/DBMS/ip/database), user, uswer_pw
			

			// 3. Statement 생성
			Statement stmt = con.createStatement();

			// 4. SQL 전송
			ResultSet rs = stmt.executeQuery("select * from member");
			System.out.println(rs);

			// 5. 결과 얻기
			while (rs.next()) {
				String id = rs.getString("id");
				String pw = rs.getString("pw");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				System.out.println(id + ":" + pw + ":" + name + ":" + age);
			}
			
			// 6. 자원 종료 (연 순서의 반대 순서로 닫아줌)
			rs.close();
			stmt.close();
			con.close();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

 

🌟 쿼리 문 입력 시 결과 값 UI 출력해보기

package test1;

import java.awt.*;
import java.awt.event.*;
import java.sql.*;

public class MyWorkbench {
	static Connection con;

	public static void main(String[] args) throws Exception {
		Frame f = new Frame();
		TextArea ta = new TextArea();
		Panel p = new Panel();
		TextField tf = new TextField(35);

		f.add(ta);
		f.add(p, BorderLayout.SOUTH);
		p.add(tf);

		dbSet();

		tf.addActionListener(e -> {
			String sql = tf.getText();

			try {
				PreparedStatement stmt = con.prepareStatement(sql);

//				if (sql.startsWith("select")) {
//					ResultSet rs = stmt.executeQuery();
//
//					while (rs.next()) {
//						String id = rs.getString("id");
//						String pw = rs.getString("pw");
//						String name = rs.getString("name");
//						int age = rs.getInt("age");
//						ta.append(id + ":" + pw + ":" + name + ":" + age + "\n");
//					}
//				} else {
//					int i = stmt.executeUpdate();
//					ta.append(i + "행이 변경되었습니다." + "\n");
//				}

				if (stmt.execute()) {
					ResultSetMetaData rsmd = stmt.getMetaData();
					ResultSet rs = stmt.getResultSet();
					int colCnt = rsmd.getColumnCount();

					StringBuilder sb = new StringBuilder();
					while (rs.next()) {
						for (int i = 1; i <= colCnt; i++) {
							sb.append(rs.getString(i)).append(" ");
						}
						sb.append("\n");
					}
					ta.append(sb.toString() + "\n");
				} else {
					int i = stmt.executeUpdate();
					ta.append(i + "행이 변경되었습니다." + "\n");
				}
				tf.setText("");

			} catch (SQLException e1) {
				e1.printStackTrace();
			}

		});

		f.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		f.setSize(500, 400);
		f.setVisible(true);

	}

	private static void dbSet() throws Exception {
		Class.forName("com.mysql.cj.jdbc.Driver");

		con = DriverManager.getConnection("jdbc:mysql://localhost/ureca", "ureca", "ureca");

	}

}
728x90
반응형

'LG 유플러스 유레카 SW > SQL' 카테고리의 다른 글

[#26] SQL 문법 + 쇼핑몰 DB/Back/Front 연동 실습  (0) 2025.03.04
'LG 유플러스 유레카 SW/SQL' 카테고리의 다른 글
  • [#26] SQL 문법 + 쇼핑몰 DB/Back/Front 연동 실습
nueos
nueos
  • nueos
    nueos 공부 기록
    nueos
  • 전체
    오늘
    어제
    • 분류 전체보기 (191)
      • 해커톤 (1)
      • 네이버 BoostCamp (6)
      • LG 유플러스 유레카 SW (3)
        • React (21)
        • TypeScript (2)
        • JavaScript (2)
        • HTML+CSS (5)
        • Spring (7)
        • Java (6)
        • SQL (2)
        • Algorithm (8)
        • CX (6)
        • Git (2)
        • 프로젝트 (2)
        • 스터디 (9)
        • 과제 (8)
        • 특강 (1)
      • React (3)
      • Next (0)
      • Javascript (2)
      • HTML (2)
      • CSS (9)
      • Algorithm (6)
      • Database (0)
      • OS (13)
      • C++ (24)
      • Python (1)
      • jQuery (1)
      • Django (1)
      • Git (1)
      • 개발 지식 (3)
      • 정보 보안 (22)
      • 포렌식 (1)
      • 암호 (2)
      • 기타 (4)
      • 패스트캠퍼스 FE 프로젝트십 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Stack
    exhaustive search
    제주해커톤
    Queue
    디지털혁신
    제주지역혁신플랫폼지능형서비스사업단
    기술로바꾸는세상
    스택
    큐
    디지랩챌린지
    힙
    완전 탐색
    heap
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
nueos
[#25] DB(데이터베이스) + SQL
상단으로

티스토리툴바