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 연동하는 법
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 |
---|