JAVA/개념정리
JDBC (DB와 연결)
inderrom
2022. 10. 10. 01:47
package i_jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBC {
/*
* JDBC(Java Database Connectivity) - 자바와 데이터베이스를 연결해주는 외부 라이브러리 - ojdbc : 오라클
* JDBC
*/
// JDBC 작성 단계
// 0. 데이터베이스 접속 정보 입력
// 1. Connection 생성
// 2. Statement 생성 (쿼리 Query 생성)
// 3. Statement 실행 (쿼리 실행)
// 4. ResultSet에서 결과 추출 (SELECT 경우)
// 5. ResultSet, Statement, Connection 닫기
public static void main(String[] args) {
// 0. 데이터베이스 접속 정보 입력
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "SSR97";
String password = "java";
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
// 1. Connection 생성
conn = DriverManager.getConnection(url, user, password);
// DriverManager : 데이터베이스에 접속하기 위한 드라이버를 관리해주는 클래스
// .getConnection() : 접속에 알맞은 드라이버 자동 로드
// 2. Statement 생성 (쿼리 Query 생성)
String sql = "SELECT * FROM MEMBER"; // 카톡에 쓴내용
ps = conn.prepareStatement(sql); // 카톡에 내가 할 말 쓴 거
// 3. Statement 실행 (쿼리 실행)
// SELECT 인 경우
rs = ps.executeQuery(); // 카톡을 엔터 눌러서 상대에게 보냄
// INSERT, UPDATE, DELETE
// int result = ps.executeUpdate();
// 4. ResultSet에서 결과 추출 (SELECT 경우)
// rs index : 0 (next를 만나기 전까지 ) , 포인터 개념
// 실제 값은 rs가 가지고 있다.
while (rs.next()) { // rs => row
String memId = rs.getString("MEM_ID"); // 컬럼명을 이용하는 방식
String memPass = rs.getString(2); // 컬럼 순서를 이용하는 방식
// Object o = rs.getInt({COLUMN_NAME}); getObjct로 전부 받을 수 있지만 사용할 땐 형변환을 해줘야한다
// 모든 속성 타입과 상관 없이 받을 수 있다.
// int i = rs.getInt({COLUMN_NAME});
// Date d = rs.getInt({COLUMN_NAME});
System.out.println("MEM_id : " + memId + ", MEM_PASS : " + memPass);
}
// while문은 포인터를(rs) 하나씩 밀려줘서 순번이 끝났을 때 와일문도 끝남
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 5. ResultSet, Statement, Connection 닫기
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (ps != null)
try {
ps.close();
} catch (Exception e) {
}
}
}
}
}
package i_jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import e_oop.ScanUtil;
public class JDBC2 {
public static void main(String[] args) {
// 0. 데이터베이스 접속 정보 입력
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "SSR97";
String password = "java";
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
// 1. Connection 생성
conn = DriverManager.getConnection(url, user, password);
// 2. Statement 생성 (쿼리 Query 생성)
// SELECT * FROM CART WHERE CART_MEMBER='a001'
String sql = " SELECT * "
+ " FROM CART "
+ " WHERE CART_MEMBER=? "; //지금은 뭐가 들어갈지 모르니까 ? 를 넣어준다
ps = conn.prepareStatement(sql);
System.out.print("아이디 입력 >>");
ps.setString(1, ScanUtil.nextLine()); //1번째 물음표에 a001을 넣겠다. setString이면 자동으로 ''로 감싸짐
// ps.setString(parameterIndex, x);
// 단, parameterIndex는 1부터 시작
// ps.setInt(parameterIndex, x);
// ps.setObject(parameterIndex,x);
// ps.setDate(1, new Date(new java.util.Date().getTime())); //java.util 이라 써져있지만 임포트할때 java.sql로 임포트 해줘야함
// 3. Statement 실행 (쿼리 실행)
rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData(); //쓰려는 테이블에 컬럼이 뭐가 들어있는지 모를 때 써준다
// 메타데이터 : 데이터에 대한 설명데이터
//컬럼의 총 갯수 구하는 법
int columnCount = rsmd.getColumnCount();
for(int i =1; i <= columnCount; i++) {
System.out.print(rsmd.getColumnName(i) + "\t");
}
System.out.println();
// 4. ResultSet에서 결과 추출 (SELECT 경우)
while(rs.next()) {
for(int i = 1; i <= columnCount; i++) {
//Object o = rs.getObject(i); 인덱스로 가져오는법
Object o = rs.getObject(rsmd.getColumnName(i)); //컬럼명으로 가져오는법
System.out.print(o + "\t");
}
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 5. ResultSet, Statement, Connection 닫기
if(conn != null) try {conn.close(); }catch(Exception e) {}
if(rs != null) try { rs.close(); }catch(Exception e) {}
if(ps != null) try { ps.close(); }catch(Exception e) {}
}
}
}
package i_jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import e_oop.ScanUtil;
public class JDBCTest {
// 0. 데이터베이스 접속 정보 입력
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "SSR97";
String password = "java";
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
public static void main(String[] args) {
new JDBCTest().start();
}
private void start() {
while (true) {
showList();
joinMember();
}
}
private void joinMember() {
try {
// 1. Connection 생성
conn = DriverManager.getConnection(url, user, password);
// 2. Statement 생성 (쿼리 Query 생성)
String sql = " INSERT INTO JAVA_MEMBER " + " (MEM_ID, MEM_PASS, MEM_NAME) " // 어디에 뭐가 들어가는지 보기 편하게 쓰는 습관을
// 키우자
+ " VALUES " + " (?, ? , ?) ";
ps = conn.prepareStatement(sql);
System.out.println("아이디를 입력 >>");
String memId = ScanUtil.nextLine();
System.out.println("비밀번호 입력 >>");
String memPass = ScanUtil.nextLine();
System.out.println("이름 입력 >>");
String memName = ScanUtil.nextLine();
ps.setString(1, memId);
ps.setString(2, memPass);
ps.setString(3, memName);
// 3. Statement 실행 (쿼리 실행)
int result = ps.executeUpdate(); // 데이터가 변경 (int로 받는 이유는 변경된 행의 갯수를 보여줌)
// 영향을 받은 행의 갯수가 리턴된다 // result가 양수라는 것은 업데이트가 성공했다는 뜻임
if (result > 0) {
System.out.println("등록 성공!");
} else {
System.out.println("등록 실패!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 5. ResultSet, Statement, Connection 닫기
if (conn != null)
try {
rs.close();
} catch (Exception e) {
}
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (ps != null)
try {
ps.close();
} catch (Exception e) {
}
}
}
private void showList() {
try {
// 1. Connection 생성
conn = DriverManager.getConnection(url, user, password);
// 2. Statement 생성 (쿼리 Query 생성)
String sql = "SELECT * FROM JAVA_MEMBER";
ps = conn.prepareStatement(sql);
// 3. Statement 실행 (쿼리 실행)
rs = ps.executeQuery();
System.out.println("=============== 회원 목록 =================");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
System.out.print(rsmd.getColumnName(i) + "\t");
}
System.out.println();
System.out.println("-------------------------------------------");
// 4. ResultSet에서 결과 추출 (SELECT 경우)
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
System.out.print(rs.getObject(i) + "\t");
}
System.out.println();
}
System.out.println("============================================");
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 5. ResultSet, Statement, Connection 닫기
if (conn != null)
try {
rs.close();
} catch (Exception e) {
}
if (rs != null)
try {
rs.close();
} catch (Exception e) {
}
if (ps != null)
try {
ps.close();
} catch (Exception e) {
}
}
}
}