JDBC
2023. 9. 20. 09:03ㆍjava
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 |