★ 용어 정리
데이터베이스 만들기
create database study;
데이터베이스 바로 선택하기
mysql -u root -p1234 <DB명>
mysql -u root -p1234 study
비밀번호 바꾸기
use mysql; //mysql 접속한 상태에서
1. update user set password=password('123456') where user='root';
- 설정 적용 : flush privileges;
2. CMD 창에서
mysqladmin -u root -p password 1234
계정 권한 변경
grant <권한> on [DB명].[테이블명] to '계정명@localhost(or %)' identified by '패스워드';
- 권한 : select, insert, delete, update (모든 권한: all privileges)
- localhost : 로컬 접속만 허용, % : 모든 접속(외부 원격) 허용
- 권한 부여 후 반드시 flush privileges; 입력(설정 적용하는거!)
테이블 만들기
create table member(
idx int primary key,
name varchar(20),
gender varchar(4),
age varchar(4),
jumin varchar(20)
);
insert into member values(3,'김태희','여자','30');
-> 원래 5갠데 4개만 적어줘서 에러남!
insert into member(idx,name,gender,age) values(3,'김태희','여자','30');
-> 요렇게 해줘야 함
UPDATE 구문 사용 : 이름이 '김태희'인 사람의 주민등록번호 222222-2222222로 수정
update set jumin='222222-2222222' where name='김태희'
DELETE 구문 사용 : 나이가 25 이상이고 성별이 남자인 회원을 삭제
delete from member where age>=25 and gender='남자'
member 테이블의 자료형을 변경하기
alter table [테이블명] CHANGE (column) [기존 필드명] [바꿀 필드명] [바꿀 자료형]
alter table [테이블명] MODIFY (column) [필드명] [바꿀 자료형]
alter table member CHANGE column age age int;
alter table member MODIFY column age int;
☆ 실습
1. Statement 사용하기
(1) JDBC_Connect1
public class JDBC_Connect1 {
public static void main(String[] args) {
// 1단계 - JDBC 드라이버 로드
String driver = "com.mysql.jdbc.Driver";
try {
// java.lang.Class 클래스의
// 정적 메서드인 forName으로
// Driver 클래스 로드
Class.forName(driver); // Driver 클래스 로드
System.out.println("드라이버 연결 성공!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 실패!");
}
}
}
(2) JDBC_Connect2
public class JDBC_Connect2 {
public static void main(String[] args) {
// 1단계 - JDBC 드라이버 로드
String driver = "com.mysql.jdbc.Driver";
// 2단계 - DB 연결
// jdbc:<DB종류>://DB주소:포트/DB명
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
Connection con = null; // DB연결 객체 선언
try {
// 1단계
// java.lang.Class 클래스의
// 정적 메서드인 forName으로
// Driver 클래스 로드
Class.forName(driver); // Driver 클래스 로드
System.out.println("드라이버 연결 성공!");
//2단계
con = DriverManager.getConnection(url, user, password);
// DB와의 연결을 위한 Connection객체 생성
// getConnection()은 DB연결에 성공하면
// 내부적으로 Connection 객체 생성 후 리턴
// 인스턴스 변수 con에 저장
System.out.println("DB 연결 성공!");
con.close(); // DB연결 해제
} catch (SQLException e) {
System.out.println("드라이버 연결 실패!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 실패!");
}
}
}
(3) JDBC_Connect3_insert
public class JDBC_Connect3_Insert {
public static void main(String[] args) {
// 1단계 - JDBC 드라이버 로드
String driver = "com.mysql.jdbc.Driver";
// 2단계 - DB 연결
// jdbc:<DB종류>://DB주소:포트/DB명
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
// 3단계 - Statement 객체 생성
// 4단계 - SQL문장 실행결과 처리
Connection con = null; // DB연결 객체 선언
Statement stmt = null; // DB에 SQL문장 전달 역할
String sql= null;
try {
// 1단계
// java.lang.Class 클래스의
// 정적 메서드인 forName으로
// Driver 클래스 로드
Class.forName(driver); // Driver 클래스 로드
System.out.println("드라이버 연결 성공!");
//2단계
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결 성공!");
//3단계
stmt = con.createStatement();
//4단계
sql = "insert into member values(2,'김길동','남자','30','333333-1111111');";
// Statement객체의 executeUpdate() 메서드 사용
stmt.executeUpdate(sql);
System.out.println("행 추가 성공!");
//insert, update, delete는 리턴이 필요없다
//select는 리턴이 필요하다.
} catch (SQLException e) {
System.out.println("드라이버 연결 실패!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 실패!");
}finally{
// DB연결 해제
if(con !=null)try {con.close();} catch (SQLException e) {}
if(stmt !=null)try {stmt.close();} catch (SQLException e) {}
}
}
}
(4) JDBC_Connect3_update
public class JDBC_Connect3_Update {
public static void main(String[] args) {
// 1단계 - JDBC 드라이버 로드
String driver = "com.mysql.jdbc.Driver";
// 2단계 - DB 연결
// jdbc:<DB종류>://DB주소:포트/DB명
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
// 3단계 - Statement 객체 생성
// 4단계 - SQL문장 실행결과 처리
Connection con = null; // DB연결 객체 선언
Statement stmt = null; // DB에 SQL문장 전달 역할
String sql= null;
try {
// 1단계
// java.lang.Class 클래스의
// 정적 메서드인 forName으로
// Driver 클래스 로드
Class.forName(driver); // Driver 클래스 로드
System.out.println("드라이버 연결 성공!");
//2단계
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결 성공!");
//3단계
stmt = con.createStatement();
//4단계
sql = "update member set jumin='222222-2222222' where name='김태희';";
// Statement객체의 executeUpdate() 메서드 사용
stmt.executeUpdate(sql);
System.out.println("행 추가 성공!");
//insert, update, delete는 리턴이 필요없다
//select는 리턴이 필요하다.
} catch (SQLException e) {
System.out.println("드라이버 연결 실패!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 실패!");
}finally{
// DB연결 해제
if(con !=null)try {con.close();} catch (SQLException e) {}
if(stmt !=null)try {stmt.close();} catch (SQLException e) {}
}
}
}
(5) JDBC_Connect3_delete
public class JDBC_Connect3_Delete {
public static void main(String[] args) {
// 1단계 - JDBC 드라이버 로드
String driver = "com.mysql.jdbc.Driver";
// 2단계 - DB 연결
// jdbc:<DB종류>://DB주소:포트/DB명
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
// 3단계 - Statement 객체 생성
// 4단계 - SQL문장 실행결과 처리
Connection con = null; // DB연결 객체 선언
Statement stmt = null; // DB에 SQL문장 전달 역할
String sql= null;
try {
// 1단계
// java.lang.Class 클래스의
// 정적 메서드인 forName으로
// Driver 클래스 로드
Class.forName(driver); // Driver 클래스 로드
System.out.println("드라이버 연결 성공!");
//2단계
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결 성공!");
//3단계
stmt = con.createStatement();
//4단계
sql = "delete from member where age>=25 and gender='남자';";
// Statement객체의 executeUpdate() 메서드 사용
stmt.executeUpdate(sql);
System.out.println("행 추가 성공!");
//insert, update, delete는 리턴이 필요없다
//select는 리턴이 필요하다.
} catch (SQLException e) {
System.out.println("드라이버 연결 실패이거나 SQL 구문 오류!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 실패!");
}finally{
// DB연결 해제
if(con !=null)try {con.close();} catch (SQLException e) {}
if(stmt !=null)try {stmt.close();} catch (SQLException e) {}
}
}
}
(6) JDBC_Connect3_select
public class JDBC_Connect3_Select {
public static void main(String[] args) {
// 1단계 - JDBC 드라이버 로드
String driver = "com.mysql.jdbc.Driver";
// 2단계 - DB 연결
// jdbc:<DB종류>://DB주소:포트/DB명
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
// 3단계 - Statement 객체 생성
// 4단계 - SQL문장 실행결과 처리
Connection con = null; // DB연결 객체 선언
Statement stmt = null; // DB에 SQL문장 전달 역할
String sql= null;
ResultSet rs = null;
try {
// 1단계
// java.lang.Class 클래스의
// 정적 메서드인 forName으로
// Driver 클래스 로드
Class.forName(driver); // Driver 클래스 로드
System.out.println("드라이버 연결 성공!");
//2단계
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결 성공!");
//3단계
stmt = con.createStatement();
//4단계
//쿼리문 작성
sql = "select *from member;";
// Statement객체의 executeUpdate() 메서드 사용
// SELECT 구문의 경우 리턴형이 있는
// executeQuery() 사용
// 결과값은 ResultSet타입인 rs에 저장
rs = stmt.executeQuery(sql);
// SELECT 구문의 결과값은
// 여러개의 row, column으로 저장
while(rs.next()){
// 커서가 rs(테이블) 1행의 위에 위치
// DB에서 값을 가져올 때 getXXX()사용
// 여기서 XXX는 자료형.
int dbidx = rs.getInt(1);
String dbname = rs.getString(2);
String dbgender = rs.getString(3);
int dbage = rs.getInt(4);
String jumin = rs.getString(5);
System.out.println(dbidx +" "+dbname+" "+dbgender+" "+dbage+" "+jumin);
}
//insert, update, delete는 리턴이 필요없다
//select는 리턴이 필요하다.
} catch (SQLException e) {
System.out.println("드라이버 연결 실패이거나 SQL 구문 오류!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 연결 실패!");
}finally{
// DB연결 해제
if(con !=null)try {con.close();} catch (SQLException e) {}
if(stmt !=null)try {stmt.close();} catch (SQLException e) {}
if(rs !=null)try {rs.close();} catch (SQLException e) {}
}
}
}
2. PreparedStatement 사용하기
- Statement와 차이점 : insert...등의 4가지 기능을 메서드를 사용해서 한 파일에 구현할 수 있다.
즉, sql문을 명시적으로 지정해줘야 하는 statement에 비해 ?를 사용하여 값을
넣어줄 수 있다는 장점이 있다.
(1) JDBC_Connect4_PreparedStatement
public class JDBC_Connect4_PreparedStatement {
public static void main(String[] args) {
// insert();
// delete();
// update();
select();
}
static void insert(){
// 1단계 : JDBC 드라이버 로드
// 2단계 : DB 연결
// 3단계 : PreparedStatement 객체 생성
// 4단계 : SQL문 실행 후 결과 처리
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
// 외부로부터 입력할 자료를 받아온다고 가정
int idx = 4;
String name = "고길동";
String gender = "남";
int age = 40;
String jumin = "555555-5555555";
try {
// 1단계 : JDBC 드라이버 로드
Class.forName(driver);
System.out.println("드라이버 연결 성공!");
// 2단계 : DB 연결
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 접속 성공!");
// 3단계 : PreparedStatement 객체 생성
// 매개변수로 사용되는 컬럼은 ?로 지정
// ?로 지정된 컬럼은 변수로 처리 가능
// setXXX() 사용하여 값 전달(XXX : 자료형)
sql = "insert into member values(?,?,?,?,?);";
pstmt = con.prepareStatement(sql);
System.out.println("pstmt성공");
pstmt.setInt(1, idx);
pstmt.setString(2, name);
pstmt.setString(3, gender);
pstmt.setInt(4, age);
pstmt.setString(5, jumin);
System.out.println("set성공");
pstmt.executeUpdate();
System.out.println("성공");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패!");
} catch (SQLException e) {
System.out.println("DB접속 실패!");
}finally{
if(pstmt != null) try{ pstmt.close(); } catch (Exception e){};
if(con != null) try{ con.close(); } catch (Exception e){};
}
}
static void delete(){
// 1단계 : JDBC 드라이버 로드
// 2단계 : DB 연결
// 3단계 : PreparedStatement 객체 생성
// 4단계 : SQL문 실행 후 결과 처리
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
int idx = 4;
String name = "김처니";
try {
// 1단계 : JDBC 드라이버 로드
Class.forName(driver);
System.out.println("드라이버 연결 성공!");
// 2단계 : DB 연결
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 접속 성공!");
sql = "delete from member where idx=? and name=?;";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, idx);
pstmt.setString(2, name);
pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패!");
} catch (SQLException e) {
System.out.println("DB접속 실패!");
}finally{
if(pstmt != null) try{ pstmt.close(); } catch (Exception e){};
if(con != null) try{ con.close(); } catch (Exception e){};
}
}
static void update(){
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
int idx = 1;
String name = "정길동";
int age = 20;
try {
// 1단계 - 드라이버 로드
Class.forName(driver);
// 2단계 - Connection 객체
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결 성공");
// 3단계 - 쿼리문 작성
sql = "update member set name=?, age=? where idx=?;";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setInt(2, age);
pstmt.setInt(3, idx);
System.out.println("쿼리문 작성 성공!");
// 4단계 - SQL문 실행 후 결과 처리
pstmt.executeUpdate(); //select는 executeQuery()!
System.out.println("수정 성공!");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패!");
} catch (SQLException e) {
System.out.println("DB접속 실패!");
}finally{
// DB연결 해제
if(con !=null)try {con.close();} catch (SQLException e) {}
if(pstmt !=null)try {pstmt.close();} catch (SQLException e) {}
}
}
static void select(){
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/study";
String user = "root";
String password = "1234";
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
ResultSet rs = null; //select 결과값을 저장할 객체
try {
// 1단계 - 드라이버 로드
Class.forName(driver);
// 2단계 - Connection 객체
con = DriverManager.getConnection(url, user, password);
System.out.println("DB 연결 성공");
// 쿼리문 작성
sql = "select * from member;";
// 3단계 - preparedStatement 객체 생성
pstmt = con.prepareStatement(sql);
// 4단계 - SQL문 실행 후 결과 처리
// SELECT 결과를 rs에 저장
rs = pstmt.executeQuery();
// 다음 내용(rs.next())이 있을동안 반복
while(rs.next()){
int idx = rs.getInt("idx");
String name = rs.getString("name");
String gender = rs.getString("gender");
int age = rs.getInt("age");
String jumin = rs.getString("jumin");
System.out.println("========================");
System.out.println(idx+" "+name+" "+gender+" "+age+" "+jumin);
System.out.println("성공");
}
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로드 실패!");
} catch (SQLException e) {
System.out.println("DB접속 실패!");
}finally{
// DB연결 해제
if(con !=null)try {con.close();} catch (SQLException e) {}
if(pstmt !=null)try {pstmt.close();} catch (SQLException e) {}
if(rs !=null)try {rs.close();} catch (SQLException e) {}
}
}
}
'N스크린하이브리드앱과정 > JAVA' 카테고리의 다른 글
[7주][4~5일][3~4th] JAVA: Swing으로 회원조회 프레임 구현하기(진행중) (0) | 2013.08.29 |
---|---|
[7주][3일][3~4th] JAVA: awt보다 좋은 swing? (0) | 2013.08.28 |
[7주][1일][3~4th] JAVA: JDBC 용어 정리, 이클립스에서 JDBC 설정. (0) | 2013.08.26 |
[6주차 과제] JAVA: 1~5단계 만들기, 계산기 만들기 (0) | 2013.08.25 |
[6주][5일][3~4th] JAVA: awt 실습(마지막): 이벤트 처리 실습 (0) | 2013.08.23 |