JDBC

2023. 9. 20. 09:03java

CONN

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class EX01conn {

	public static void main(String[] args) {
		
		//ojdbc 프로젝트 생성할때 마다 넣어줘야함
		//oraclexe 폴더 C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
		
		//1. 동적 로딩 : 데이터 연결을 위해 driver를 찾을거다.
		try {//예외처리 : 시도하다.
			
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2.DB연결
			String user="service";//db 계정 유저 이름 - service계정
			String password="12345";//
			String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";//@localhost라고 써도됨
			//jdbc:oracle:thin
			//127.0.0.1 -> localhost -> ip 주소(거의 바꾸는건)
			//1521 --> 포트번호 오라클사의 고유 포트번호
			//xe : db 버전이름
			
			Connection conn = DriverManager.getConnection(url,user,password);//url, user, password
			
			if(conn != null) {
				System.out.println("연결이 성공"); //담겨있으면
			}else {
				System.out.println("연결이 실패");
			}
			
		} catch (ClassNotFoundException e) {// 실패 했을때 실행하는 문장
			e.printStackTrace(); //에러문 출력 해주는 기능
		} catch (SQLException e) { // 데이터베이스 접근 또는 다른 에러에 대한 정보를 제공하는 예외
			e.printStackTrace();
		}
		
	}
}

INSERT

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class EX02Insert {

	public static void main(String[] args) {
		
		//전역변수로 만들어주기 finally 사용위해선 그리고 try안에있는 Connection , PreparedStatement 지워주기
		Connection conn=null;
		PreparedStatement psmt=null;
		//1. 동적로딩
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2.DB연결
			String user = "service";
			String password = "12345";
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			
			//try안에 있는 지역변수
			 conn = DriverManager.getConnection(url,user,password);
			if(conn != null) {
				System.out.println("연결성공");
			}else {
				System.out.println("연결실패");
			}
			
			//insert문
			
			//sql문 통과 할 수 있는 통로(connection)를 열어야 한다. //sql에 만들어준 id,pw,name,age
			String sql = "insert into member values('smhrd','1234','park',20)"; //string은 쌍따옴표임
			 psmt = conn.prepareStatement(sql); // 통로를 여는 기능 이름 -> prepareStatement(sql문 가지고)
			
			//sql 실행하는 메소드 구현 --> executeUpdate()
			int row = psmt.executeUpdate();
			
			//executeUpdate --> insert,delete,update
			//executeUpdate는 실행된 문장의 수를 리턴해준다.
			
			if(row > 0) {
				System.out.println("insert success");
			}else {
				System.out.println("insert fail");
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace(); 	
		} catch (SQLException e) {
			e.printStackTrace(); // 에러가 어딘지 빨간글씨로 알려준다.
		}finally {//try, catch 최종적으로 실행되는 문장
			//conn.close(); <- conn이 try 안에있는 지역변수라서 에러임
			
			try {
				if(conn!=null)conn.close();
				if(psmt!=null)psmt.close();
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

 

UPDATE

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class EX03update {

	public static void main(String[] args) {
		
		
		// 1.동적로딩
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		
			//2.DB연동
			String user = "service";
			String password = "12345";
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			
			//연동 통로 열기
			Connection conn = DriverManager.getConnection(url,user,password);
			
			if(conn != null) {
				System.out.println("연결성공");
			}else {
				System.out.println("연결실패");
			}
			
			//update문 실행
			
			//sql문이 지나갈 수 있는 통로 insert에 있는 String sql의 값이 바뀌는 거지 sql 자체의 아이디 비번이 바뀌는게 아님
			String sql = "update member set pw = '5678' where id = 'smhrd' "; 
			PreparedStatement psmt = conn.prepareStatement(sql);
			
			//sql 실행
			//int를 리턴하는 이유 : 실행 문장 수
			int row = psmt.executeUpdate();
			
			if(row > 0) {
				System.out.println("insert success");
			}else {
				System.out.println("insert fail");
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

DELETE

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class EX04delete {

	public static void main(String[] args) {
		
		//1.동적로딩
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2.DB연결
			String user = "service";
			String password = "12345";
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			
			//try안에 있는 지역변수
			Connection conn = DriverManager.getConnection(url,user,password);
			if(conn != null) {
				System.out.println("연결성공");
			}else {
				System.out.println("연결실패");
			}
			
			//delete문
			//sql문이 지나갈수 있는 통로 where id는 데이터가 2개이상일때 쓰는게 낫다.
			String sql = "delete from member where id = 'smhrd'"; 
			PreparedStatement psmt = conn.prepareStatement(sql);
			
			//int를 리턴하는 이유 : 실행 문장 수
			//처음 삭제하면 success가 뜨지만 두번째에는 fail이 뜬다 이유는 데이터가 없기 때문이다.
			int row = psmt.executeUpdate();
			if(row > 0) {
				System.out.println("delete success");
			}else {
				System.out.println("delete fail");
			}	
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

 

 

자기가 원하는값 INSERT

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class EX05Insert2 {

	public static void main(String[] args) {
		// 사용자로부터 입력 받아서 db에 저장하기
		Scanner sc = new Scanner(System.in);
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//2.DB연결
			String user = "service";
			String password = "12345";
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			
			//try안에 있는 지역변수
			Connection conn = DriverManager.getConnection(url,user,password);
			
			//쿼리 문장은 개발자가 적고 values안에는(?,?,?,?)는 사용자가 적기
			String sql = "insert into member values(?,?,?,?)"; 
			
			PreparedStatement psmt =conn.prepareStatement(sql);
			
			String id = sc.next();
			String pw =  sc.next();
			String name = sc.next();
			int age = sc.nextInt();
			
			//파라미터 인덱스 물음표 순서 , name
			psmt.setString(1, id);
			psmt.setString(2, pw);
			psmt.setString(3, name);
			psmt.setInt(4, age);
			
			//5번 코드
			//executeUpdate는 실행된 문장의 수를 리턴해준다.--> insert,delete,update
			int row=psmt.executeUpdate();
				
			if(row > 0) {
				System.out.println("insert success");
			}else {
				System.out.println("insert fail");
			}
			
			//6번 - 연결 끊기 : psmt,conn 마지막부터 끊어주기 <- 끊어주어야(close) commit이 된다.
			psmt.close();
			conn.close();
				
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

DELETE 원하는값 삭제

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class EX06delete2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//DB연결
			String user = "service";
			String password="12345";
			String url="jdbc:oracle:thin:@localhost:1521:xe";
			
			Connection conn = DriverManager.getConnection(url, user, password);
			
			System.out.print("삭제할 id : ");
			String a = sc.next();
			
			// String sql = "delete from member where id = ?"; like랑 =는 같으니 한개만 써주자
			String sql = "delete from member where id like ?";
			
			PreparedStatement psmt = conn.prepareStatement(sql);
			//파라미터 인덱스 물음표 순서 , name
//			psmt.setString(1, id);
			psmt.setString(1, "%" + a + "%");
			
//			System.out.print("로그인할 id : ");
//			String id = sc.next();
//			System.out.print("로그인할 pw : ");
//			String pw =  sc.next();
//			System.out.print("로그인할 name : ");
//			String name = sc.next();
//			System.out.print("로그인할 age : ");
//			int age = sc.nextInt();
			
			
			
			int row = psmt.executeUpdate();
			
			if(row>0) {
				System.out.println(row+"delete success");
			}else {
				System.out.println("delete fail");
			}	
			
			psmt.close();
			conn.close();
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

Search

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class EX07Search {

	public static void main(String[] args) {
		
		//5.5번
		Scanner sc = new Scanner(System.in);
		
		System.out.println("아이디를 입력하세요 >>");
		String inputId = sc.next();
		System.out.println("비번을 입력하세요 >>");
		String inputPw = sc.next();
		
		// select 할 때 조건절에서 검색해서 가져오기
		// +) 로그인
		
		//1.동적로딩
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//2.DB연결
			String user = "service";// db 계정 유저이름
			String password = "12345";
			String url="jdbc:oracle:thin:@localhost:1521:xe";
			Connection conn = DriverManager.getConnection(url,user,password);
			
			//3번
			if(conn != null) {
				System.out.println("연결 성공");
			}else {
				System.out.println("연결 실패");
			}
			
			//sql문 통로 <- 4번
			String sql = "select * from member where id = ? and pw = ?";
			PreparedStatement psmt = conn.prepareStatement(sql);
			
			//?채우기 <-- 통로와 실행 가운데에 채워넣어야함 <- 6번
			psmt.setString(1, inputId); //첫번째 물음표에 뭘 채울거냐
			psmt.setString(2, inputPw);
			
			//sql 실행 excuteUpdate <- insert,update,delete => int를 return함
			// executeQuery <-- select => resertset을 return한다.
			ResultSet rs = psmt.executeQuery(); //5번
			
//			rs.next(); <- true 혹은 false --> 
//			while(rs.next()) { //7번
			if(rs.next()) {//if쓴 이유 : id컬럼이 pk이다고 가정시 어차피 데이터 한개인데 굳이 반복문 돌려서 rs.next 두번할 필요없다.
				String id = rs.getString(1);
				String pw = rs.getString(2);
				String name = rs.getString(3);
				int age = rs.getInt(4);
				
				System.out.println("id : " + id);
				System.out.println("pw : " + pw);
				System.out.println("name : " + name);
				System.out.println("age : " + age);
				System.out.println("================");
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} 
		
		catch (SQLException e) {
			e.printStackTrace();
		}

	}
}

select

package ex_jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class EX07select {

	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement psmt = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//DB연결
			String user = "service";
			String password="12345";
			String url="jdbc:oracle:thin:@localhost:1521:xe";
			
			 conn = DriverManager.getConnection(url, user, password);
			 
			 String sql = "select id, name from member";
			 
			 psmt = conn.prepareStatement(sql);
			 
			 //excuteUpdate <- 다시 돌려받을값이 없을때 씀(insert,update,delete)
			 // select는 다시 돌려받을값을 받아야 하니 executeQuery를 쓴다.<- resertset객체
			 
			 // executeQuery excuteUpdate -> 둘 다 리턴타입 및 쿼리값이 다르다.
			// *** select 할 때만 달라지는 부분!
			 ResultSet rs = psmt.executeQuery();
			 
			 while(rs.next()) { //rs.get~() 인덱스 번호는 select문으로 가져온 테이블이 기준
				 String id = rs.getString(1);
				 //컬럼명 모를땐 rs.getString("id");
				 //String pw = rs.getString(2);
				 String name = rs.getString(3);
				 //int age = rs.getInt(4);
				 
				 System.out.println("id : " + id);
				 //System.out.println("pw : " + pw);
				 System.out.println("name : " + name);
				 //System.out.println("age : " + age);
				 System.out.println();
			 }
			 
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//try 클릭해서 예외가 발생하면 그 즉시 catch 블럭으로 감
			// close를 try 마지막에 적어버리면 실행이 안되버릴 가능성 있음
			// 그래서 try 블럭에서 예외가 발생하더라도 반드시 거치는 최종 블럭 => finally 에 close명령 적어줘야함
			try {
				psmt.close();
				conn.close();
			}catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	}
}

'java' 카테고리의 다른 글

git  (0) 2023.09.20
오버로딩과 오버라이딩의 차이  (0) 2023.09.19
db연결  (0) 2023.09.18
상속1  (0) 2023.09.18
executeQuery  (0) 2023.09.15