자바 & DB 연결WEB JAVA SPRING/etc2023. 8. 24. 13:15
Table of Contents
DBTestMain
package ko.co.mlec.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/*
*
* 작업순서
* 1. JDBC 드라이버 로딩
* 2. DB접속 하여 연결객체 얻어오기
* 3. SQL 쿼리 생성
* 4. 쿼리 실행 및 결과 얻기
* 5. 접속 해제
*
*/
public class DBTestMain { // 자바와 DB 연결 class 생성
public static void main(String[] args) { // 자바 DB 연결 메인 작성
// 이름 틀릴 수도 있어서 예외처리 해줘야함
// 예외처리를 담당하는 구문. 예외가 발생할 수 있는 부분을 try 블럭으로 감싸주면 예외처리를 할 수 있다.
//try해서 성공시 try안으로 실패시 catch로 들어감
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//1. 드라이버 로딩
System.out.println("오라클 드라이버 로딩 성공...");
Connection conn = DriverManager.getConnection( //2. DB접속
"jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
System.out.println("DB 접속 성공 : " + conn);
} catch (Exception e) { // e : 에러변수
e.printStackTrace(); //에러의 발생근원지를 찾아서 단계별로 에러를 출력
//즉 에러변수인 e를 출력하겠다
}
}
콘솔
오라클 드라이버 로딩 성공...
DB 접속 성공 : oracle.jdbc.driver.T4CConnection@5891e32e
InsertMain01
package ko.co.mlec.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertMain01 {
public static void main(String[] args) {
Connection conn = null; // null 값으로 초기화 .
Statement stmt = null;
try {
// 1단계 : JDBC 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver"); // checked exception(컴파일 시점의 예외처리)
// 2단계 : DB 접속 및 Connection 객체 얻어오기
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hr";
String password = "hr";
conn = DriverManager.getConnection(url, user, password);
// conn : connection객체 얻어오려고 쓴 변수
System.out.println(conn);
/*
* oracle.jdbc.driver.T4CConnection@5891e32e 이렇게 출력됐음 JDBC드라이버를 선택하고 연결한 객체를
* 출력한거임
*/
////db삽입
// 3단계 : SQL 실행 객체 얻어오기 & 쿼리 작성
stmt = conn.createStatement(); // stmt : conn의 실행객체 가져와서 쿼리를 작성하려고 쓴 변수
String sql = "insert into t_test(id, name) values('park','박길동')";
// 명령에 대한 것만 수행으로 sql세미콜론 작성 x
// sql : insert할라구..
// 4단계 : 쿼리 실행 및 결과 얻어오기
int cnt = stmt.executeUpdate(sql); // cnt : dbms에 실행
System.out.println("총 " + cnt + "개 행이 삽입되었습니다.");
//////.db삽입
// 틀렸다면 try말고 여기로
} catch (Exception e) {
e.printStackTrace(); // 에러난 이유를 알려줌
}
// 5단계: DB접속 종료 + 1~4단계에서 에러가 나면 sql문 종료 어렵다. so, finally 문 작성으로 옮겨줘야 함.
// conn도 같이 쓸 수 있지만 stmt에서 오류가 날 수 있기 때문에 try를 작성 또해
finally {
try {
stmt.close(); //stmt close 하는 이유 : 상태종료시켜줘야하니까
} catch (SQLException e) { // 왜 여긴 Sql~냐 ?? -->stmt가 sql문이라서
e.printStackTrace();
}
try { // conn의 종료를 위해 try 2번 진행
conn.close();
} catch (Exception e) {
//종료하면 오류날일이 ?
}
}
}
}
InsertMain02
package ko.co.mlec.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
//용도 : 자바안에서 데이터 insert
public class InsertMain02 {
public static void main(String[] args) {
//다 똑같
Connection conn = null;
Statement stmt = null;
try {
//1단계: JDBC 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//2단계: DB 접속 및 Connection 객체 얻어오기
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hr";
String password = "hr";
conn = DriverManager.getConnection(url, user, password);
///다른 부분 part 2!!!!!!!
////// 진짜 하고 싶었던거
//3단계: SQL 실행 객체 얻어오기 & 쿼리 작성
Scanner sc = new Scanner(System.in);
stmt = conn.createStatement(); // stmt : conn의 실행객체 가져와서 쿼리를 작성하려고 쓴 변수
//자바가 db랑 연결할 때 데이터를 작성하게 만들어주는 상태로 변경
System.out.println("아이디를 입력하세요.");
String id = sc.nextLine();
System.out.println("이름을 입력하세요: ");
String name = sc.nextLine();
//비효율적임
String sql = "insert into t_test(id,name) values"
+ "(\'"
+ id + "\',\'" + name + "\')";
//4단계 : 쿼리 실행 및 결과 얻어오기
int cnt = stmt.executeUpdate(sql);
System.out.println("총 " + cnt + "개 행이 삽입되었습니다." );
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
}
}
콘솔
아이디를 입력하세요.
choi
이름을 입력하세요:
fff
총 1개 행이 삽입되었습니다.
InsertMain03
package ko.co.mlec.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class InsertMain03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn = null;
PreparedStatement pstmt = null; //statement는 잘안써서 나옴 //상태만들어줌
//prepareStatement: 호출할 개체를 만듭니다.* 데이터베이스 저장 프로시저.
try {
//1. JDBC 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DB 접속 및 Connection 객체 얻어오기
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hr";
String password = "hr";
conn = DriverManager.getConnection(url, user, password);
/////////////////////////쿼리작성
Scanner sc = new Scanner(System.in);
System.out.println("아이디를 입력하세요. ");
String id = sc.nextLine();
System.out.println("이름을 입력하세요. ");
String name = sc.nextLine();
//여기까진 아까랑 같아
//2번째 방식
//3. 쿼리작성 및 실행객체 얻기
String sql = "insert into t_test(id,name) "; //키값을 넣겠다
sql +="values(?,?) "; //밸류값
pstmt = conn.prepareStatement(sql); //pstmt : conn 실행객체 가져와서 쿼리 작성 상태 만듬.
//sql은 pl아니라 0부터 시작안함
//set 사용한 이유 : 확장성 좋음 , 직접접근 막음(무결성 )
pstmt.setString(1, id); //1행엔 id 넣음
pstmt.setString(2, name);
//4. 실행 및 결과 얻기
int cnt = pstmt.executeUpdate();
System.out.println("총 " + cnt + "삽입되었습니다. ");
/////////////////////////쿼리작성
}catch (Exception e) {
e.printStackTrace();
}finally {
//5. 접속 종료
//초기값 위에서 null로 줬는데 null로 들어가면 오류(=아무것도 작성이 안됐음) 그래서 예외처리라는 안전장치를 줬어
//null이 아니면
if(pstmt != null);
try {
pstmt.close(); //끝
}catch(Exception e) {
e.printStackTrace(); // 안전장치
}
}
if(conn !=null) {
try {
conn.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
콘솔
아이디를 입력하세요.
lee
이름을 입력하세요.
이ㅇㅇ
총 1삽입되었습니다.
UpdateMain01
package ko.co.mlec.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;
import ko.co.mlec.util.ConnectionFactory;
import ko.co.mlec.util.JDBCClose;
/*
* 검색할 ID를 입력하세요: hong
* 수정할 이름을 입력하세요 : 홍개똥
* 총 1개의 행이 수정되었습니다.
*
*/
public class UpdateMain01 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
//ConnectionFactory factory = new ConnectionFactory();
//conn = factory.getConnection();
conn = new ConnectionFactory().getConnection(); //인스턴스 메소드 호출
Scanner sc = new Scanner(System.in);
System.out.println("검색할 ID를 입력하세요: ");
String id = sc.nextLine();
System.out.println("수정할 이름을 입력하세요: ");
String name = sc.nextLine();
String sql = "update t_test";
sql += " set name = ? ";
sql += " where id = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, id);
pstmt.executeUpdate();
System.out.println("총 " + pstmt + "개 행이 수정되었습니다.");
}catch(Exception e) {
e.printStackTrace();
//만약에 다른 클래스에서 또 이렇게까지하면 좀
//그 때마다 쓰기싫어서 클래스 하나를 만들어놓고 썼다.
}finally {
JDBCClose.close(pstmt, conn); //묵시적 형변환 사용, 앞의 내용 넘 길어서 짧게 가자
}
}
}
콘솔출력
검색할 ID를 입력하세요:
choi
수정할 이름을 입력하세요:
최
총 oracle.jdbc.driver.OraclePreparedStatementWrapper@68567e20개 행이 수정되었습니다.
selectMain
package ko.co.mlec.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class SelectMain {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
//원래는 죄다 적었는데 connectionFactory 클래스를 정의해서 짧아짐
// 그래서 여기서 . 으로 호출했음 ~
//2번
//conn : 객체 불러옴 연결해서 select할라고
//호출하고 싶어서 new 클래스().함수()
conn = new ConnectionFactory().getConnection();
//얘낸 번호 안쓰고 바로 삽입 3.sql 쿼리만을 실행 in developer
String sql = "select * from t_test "; //sql : t_test테이블 select 할라고 쓴 문자열형 변수
sql += "order by name asc"; //오름차순으로 정렬하겠다 내림차순 desc
pstmt = conn.prepareStatement(sql);
//4.자바에서 sql 출력
//쿼리값 다 출력하려고 ResultSet 쓴듯
ResultSet rs = pstmt.executeQuery();
//rs를 next하면서 하나하나 다출력함 rs끝나면 while문 빠져나가
while(rs.next()) {
//sql문 출력할려고..
String id = rs.getString("id"); //rs id 행의 열의 값 가져와
String name = rs.getString("name");
System.out.println("id: " + id + ", name : " + name);
}
}catch(Exception e) {
e.printStackTrace();
}finally{
JDBCClose.close(pstmt,conn);
}
}
}
콘솔
id: park, name : 박길동
id: id, name : 아라
id: iphone, name : 아이폰
id: cup, name : 종이컵
id: choi, name : 최현
id: hong, name : 홍길동
ConnectionFactory
ConnectionFactory
package ko.co.mlec.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectionFactory {
public Connection getConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "hr";
String password = "hr";
conn = DriverManager.getConnection(url, user, password);
}catch(Exception e) {
e.printStackTrace();
}
return conn;
}
}
JDBCClose
package ko.co.mlec.util;
import java.sql.Connection;
import java.sql.Statement;
public class JDBCClose {
public static void close(Statement stmt,Connection conn) {
// static으로 close만 사용
if(stmt != null) {
try {
stmt.close();
}catch(Exception e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
'WEB JAVA SPRING > etc' 카테고리의 다른 글
Spring 어노테이션 (0) | 2023.08.28 |
---|---|
Spring Security 인증/인가 (0) | 2023.08.28 |
Spring Data JPA(Java Persistence API) (0) | 2023.08.28 |
REST API (0) | 2023.08.28 |
JVM (0) | 2023.08.24 |