JAVA/개념정리
JDBC
inderrom
2022. 11. 27. 19:16
db와 연결 연습
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
// 문제) 사용자로부터 Lprod_Id값을 입력 받아서 입력 받은 값보다
// Lprod_id가 큰 자료들을 출력하시오.
public class JdbcTest02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("lprod_id를 입력하시오 >> ");
int num = sc.nextInt();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",
"SSR97","java");
String sql = "select lprod_id, lprod_gu, lprod_nm as 선롬새 from lprod where lprod_id >" + num;
// String sql = "select * lprod_id"; <<위에 줄이 아니라 이렇게 다 가져오고 while문 안에서 if문 돌리는 방법도 있으나 좋지 않음
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
System.out.println(" == 쿼리문 검색 결과 ==");
while(rs.next()) {
//if(rs.getInt("lprod_id") > num) { // 좋지 않은 방법!
System.out.println("Lprod_ID : " + rs.getInt("lprod_id"));
System.out.println("Lprod_GU : " + rs.getString(2)); // 컬럼번호 이용
System.out.println("Lprod_NM : " + rs.getString("선롬새")); // alias명 이용
System.out.println("--------------------------------------");
//}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
if(rs!=null) try { rs.close();} catch(SQLException e) {}
if(stmt!=null) try { stmt.close();} catch(SQLException e) {}
if(conn!=null) try { conn.close();} catch(SQLException e) {}
}
}
}
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
// 문제) Lprod_id값을 2개 입력 받아서 두 값 중 작은 값부터 큰 값 사이의 자료들을 출력하시오
public class JdbcTest03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 lprod_id값을 입력하시오 >>");
int num1 = sc.nextInt();
System.out.println("두번째 lprod_id값을 입력하시오 >>");
int num2 = sc.nextInt();
int min,max;
// 방법1
// if(num1 < num2) {
// min = num1;
// max = num2;
// }else if(num1> num2) {
// min = num2;
// max = num1;
// }
// 방법2
// max = num1 > num2 ? num1 : num2;
// min = num1 > num2 ? num2 : num1;
// 방법3
max = Math.max(num1, num2);
min = Math.min(num1, num2);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SSR97","java");
//String sql = "select lprod_id, lprod_gu, lprod_nm 선롬새 from lprod where lprod_id >=" + min + "and lprod_id <=" + max;
String sql = "select lprod_id, lprod_gu, lprod_nm 선롬새 from lprod where lprod_id between " + min + " and " + max;
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
System.out.println("Lprod_ID : " + rs.getInt("lprod_id"));
System.out.println("Lprod_GU : " + rs.getString(2)); // 컬럼번호 이용
System.out.println("Lprod_NM : " + rs.getString("선롬새")); // alias명 이용
System.out.println("--------------------------------------");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
if(rs!=null) try { rs.close();} catch(SQLException e) {}
if(stmt!=null) try { stmt.close();} catch(SQLException e) {}
if(conn!=null) try { conn.close();} catch(SQLException e) {}
}
}
}
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class JdbcTest04 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SSR97","java");
System.out.println("==계좌번호 정보 추가하기 ==");
System.out.print("계좌번호 >>");
String bankNo = scan.next();
System.out.print("은 행 명 >> ");
String bankName = scan.next();
System.out.print("예금주명 >> ");
String userName = scan.next();
/*
//------------------------------------------
// Statement객체를 이용하여 데이터 추가하기
String sql = "insert into bankinfo(bank_no, bank_name, bank_user_name, bank_date)"
+ "values('" +bankNo + "','" + bankName + "', '" + userName + "', sysdate)";
stmt = conn.createStatement();
// 실행할 SQL문이 select문일 경우에는 executeQuery()메서드를 사용하는데
// SQL문이 insert, update, delete문 등일 경우에는 executeUpdate()메서드를 사용한다.
// executeUpdate()메서드의 반환값 ==> 작업에 성공한 레코드 수
int cnt = stmt.executeUpdate(sql);
*/
//-------------------------------------------
// PreparedStatement객체를 이용하여 데이터 추가하기
//SQL문을 작성할 때 데이터가 들어갈 자리를 물음표(?)표시하여 작성한다.
String sql = "insert into bankinfo(bank_no, bank_name, bank_user_name, bank_date)"
+ "values(?, ?, ?, sysdate)";
// PreparedStatement객체 생성 ==> 이 때 사용할 SQL문을 인수값으로 넣어준다.
pstmt = conn.prepareStatement(sql);
// SQL문의 물음표(?)자리에 들어갈 데이터 셋팅한다.
// 형식) pstmt.set자료형이름(물음표번호, 셋팅할데이터)
// ==> 물음표 번호는 1번부터 시작한다.
pstmt.setString(1, bankNo);
pstmt.setString(2, bankName);
pstmt.setString(3, userName);
// 데이터 셋팅이 완료되면 SQL문을 실행한다.
int cnt = pstmt.executeUpdate();
//-------------------------------------------
System.out.println("반환값 : " + cnt);
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
if(stmt != null) try {stmt.close();} catch(SQLException e) {}
if(pstmt != null) try {pstmt.close();} catch(SQLException e) {}
if(conn != null) try {conn.close();} catch(SQLException e) {}
}
}
}
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import kr.or.ddit.util.DBUtil;
/*
LPROD테이블에 새로운 데이터 추가하기
lprod_gu와 lprod_nm값은 직접 입력받아서 처리하고,
lprod_id는 현재의 Lprod_id 중에서 제일 큰 값보다 1크게 한다.
입력 받은 lprod_gu(기본키)가 이미 등록되어 있으면 다시 입력 받아서 처리한다.
*/
public class JdbcTest05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// Class.forName("oracle.jdbc.driver.OracleDriver");
//
// conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SSR97","java");
conn = DBUtil.getConnection();
// lprod_id는 현재의 lprod_id 중에서 제일 큰 값보다 1 크게 한다.
String sql = "select nvl(max(lprod_id), 0 ) maxid from lprod";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
int maxid = 0;
if(rs.next()) {
//maxid = rs.getInt(1);
maxid = rs.getInt("maxid");
}
maxid++; // 제일 큰 값 +1
//--------------------------------------------
//입력 받은 Lprod_gu가 이미 등록되어 있으면 다시 입력 받는다.
String gu; // 입력한 Lprod_gu가 저장될 변수
int count = 0; // 입력한 Lprod_gu가 DB에 몇 개가 있는지 개수를 저장할 변수
do{
System.out.print("LPROD_GU값 입력 >>");
gu = scan.next();
String sql2 = "select count(*) cnt from lprod where lprod_gu=?";
pstmt = conn.prepareStatement(sql2);
pstmt.setString(1, gu);
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt("cnt");
}
if(count > 0) {
System.out.println("입력한 LPROD_GU값 " + gu + "은(는) 이미 등록되어 있습니다.");
System.out.println("다시 입력하세요...");
}
}while(count>0);
//-------------------------------------------------
System.out.print("LPROD_NM값 입력 >>");
String nm = scan.next();
String sql3 = "insert into lprod (lprod_id, lprod_gu,lprod_nm)"
+ "values(?, ?, ?)";
pstmt = conn.prepareStatement(sql3);
pstmt.setInt(1, maxid);
pstmt.setString(2, gu);
pstmt.setString(3, nm);
int cnt = pstmt.executeUpdate(); // select문이 아닐 때...
if(cnt >0) {
System.out.println("등록 성공 !!!");
}else {
System.out.println("등록실패 !!!");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(stmt != null) try { stmt.close();} catch(SQLException e) {}
if(pstmt != null) try { pstmt.close();} catch(SQLException e) {}
if(conn != null) try { conn.close();} catch(SQLException e) {}
}
}
}
-- 회원을 관리하는 프로그램을 작성하시오 !
package kr.or.ddit.basic;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import kr.or.ddit.util.DBUtil;
import kr.or.ddit.util.DBUtil2;
import kr.or.ddit.util.DBUtil3;
/*
MVC패턴, Singleton패턴 조사!
회원을 관리하는 프로그램을 작성하시오. (MYMEMBER 테이블 이용)
아래 메뉴의 기능을 모두 구현하시오. ( CRUD 기능 구현하기...) C - INSERT
------------------------------------
== 작업 선택 ==
1. 자료 추가 --> INSERT
2. 자료 삭제 --> DELETE
3. 자료 수정 --> UPDATE
4. 전체 자료 출력 --> SELECT
0. 작업 끝.
------------------------------------
MEM_ID VARCHAR(20) NOT NULL, -- 회원ID
MEM_PASS VARCHAR2(30) NOT NULL, -- 비밀번호
MEM_NAME VARCHAR2(30) NOT NULL, -- 회원이름
MEM_TEL VARCHAR2(14) NOT NULL, -- 전화번호
MEM_ADDR V
조건)
1) 자료 추가에서 '회원ID'는 중복되지 않는다.(중복되면 다시 입력 받는다.)
2) 자료 삭제는 '회원ID'를 입력 받아서 처리한다.
3) 자료 수정에서 '회원ID'는 변경되지 않는다.
*/
public class JdbcTest06 {
private Scanner scan = new Scanner(System.in);
private Connection conn;
private Statement stmt;
private PreparedStatement pstmt;
private ResultSet rs;
public static void main(String[] args) {
new JdbcTest06().startMember();
}
// 자원을 반납하는 메서드
private void disConnect() {
if(rs!=null) try {rs.close();} catch(SQLException e) {}
if(stmt!=null) try {stmt.close();} catch(SQLException e) {}
if(pstmt!=null) try {pstmt.close();} catch(SQLException e) {}
if(conn!=null) try {conn.close();} catch(SQLException e) {}
}
// 시작 메서드
public void startMember() {
System.out.println();
System.out.println("*****************************");
System.out.println(" 회 원 관 리 프 로 그 램");
System.out.println("*****************************");
System.out.println();
while(true) {
int choice = displayMenu();
switch (choice) {
case 1: // 추가
insertMember(); break;
case 2: // 삭제
deleteMember(); break;
case 3: // 수정
updateMember(); break;
case 4: // 전체 자료 출력
displayMember(); break;
case 5: // 전체 자료 출력
updateMember2(); break;
case 0: // 작업 끝.
System.out.println("회원 관리 프로그램을 마칩니다...");
return;
default:
System.out.println("작업 번호를 잘못 입력했습니다. 다시 입력하세요.");
System.out.println();
}
}
}
// 회원 정보를 수정하는 메서드 ==> 원하는 항목을 선택하여 그 항목만 수정하는 메서드
private void updateMember2() {
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요...");
System.out.print("회원ID >> ");
String memId = scan.next();
int count = getMemberCount(memId);
if(count==0) {
System.out.println(memId + "은(는) 등록되지 않은 회원입니다.");
System.out.println("수정 작업을 마칩니다...");
return;
}
// 수정할 항목을 선택하기
int num; // 수정할 항목의 선택 번호
String updateField = null; // 수정할 컬럼명이 저장될 변수
String updateTitle = null; // 입력할 때 출력할 제목이 저장될 변수
do {
System.out.println();
System.out.println("수정할 항목을 선택하세요...");
System.out.println("1.비밀번호 2.회원이름 3.전화번호 4.회원주소");
System.out.print("수정할 항목 선택 >> ");
num = scan.nextInt();
switch (num) {
case 1: updateField = "mem_pass"; updateTitle="비밀번호"; break;
case 2: updateField = "mem_name"; updateTitle="회원이름"; break;
case 3: updateField = "mem_tel"; updateTitle="전화번호"; break;
case 4: updateField = "mem_addr"; updateTitle="회원주소"; break;
default : System.out.println("수정할 항목 번호를 잘못 입력했습니다.");
System.out.println("다시 입력하세요...");
}
}while(num<1 || num>4);
scan.nextLine(); // 입력 버퍼 비우기
System.out.println();
System.out.print("새로운" + updateTitle + " >> ");
String updateData = scan.nextLine();
try {
conn = DBUtil.getConnection();
String sql = "update mymember set " + updateField + " = ? where mem_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, updateData);
pstmt.setString(2, memId);
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println("수정 작업 성공!!!");
}else {
System.out.println("수정 작업 실패~~~");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
disConnect();
}
}
// 회원 정보를 수정하는 메서드 ==> 전체 항목 수정하기
private void updateMember() {
System.out.println();
System.out.println("수정할 회원 정보를 입력하세요...");
System.out.print("회원ID >> ");
String memId = scan.next();
int count = getMemberCount(memId);
if(count==0) {
System.out.println(memId + "은(는) 등록되지 않은 회원입니다.");
System.out.println("수정 작업을 마칩니다...");
return;
}
System.out.println("새로운 비밀번호 >> ");
String newMemPass = scan.next();
System.out.println("새로운 회원이름 >> ");
String newMemName = scan.next();
System.out.println("새로운 전화번호 >> ");
String newMemTel = scan.next();
scan.nextLine();
System.out.println("새로운 회원주소 >> ");
String newMemAddr = scan.next();
try {
conn = DBUtil.getConnection();
String sql = "update mymember set mem_pass =?, mem_name =?,"
+ "mem_tel =?, mem_addr =?"
+ "where mem_id =?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, newMemPass);
pstmt.setString(2, newMemName);
pstmt.setString(3, newMemTel);
pstmt.setString(4, newMemAddr);
pstmt.setString(5, memId);
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println(memId + "회원 정보 수정 성공!!");
}else {
System.out.println(memId + "회원 정보 수정 실패~~~");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
disConnect();
}
}
// 회원 정보를 삭제하는 메서드
private void deleteMember() {
System.out.println();
System.out.println("삭제할 회원 정보를 입력하세요...");
System.out.print("삭제할 회원ID >> ");
String memId = scan.next();
try {
conn = DBUtil.getConnection();
String sql = "delete from mymember where mem_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
int cnt = pstmt.executeUpdate();
if(cnt>0) {
System.out.println("회원ID가" + memId + "인 회원 정보 삭제 성공!! ");
}else {
System.out.println(memId + "회원은 없는 회원이거나 삭제에 실패했습니다.~~~");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
disConnect();
}
}
// 전체 회원 정보를 출력하는 메서드
private void displayMember(){
System.out.println();
System.out.println("------------------------------------------------");
System.out.println(" ID 비밀번호 이름 전화번호 주소");
System.out.println("------------------------------------------------");
try {
// conn = DBUtil.getConnection();
// conn = DBUtil2.getConnection();
conn = DBUtil3.getConnection();
String sql = "select * from mymember";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) { // 데이터가 많이 나올 수 있기 때문에 while문을 써줌
String memId = rs.getString("mem_id");
String memPass = rs.getString("mem_pass");
String memName = rs.getString("mem_name");
String memTel = rs.getString("mem_tel");
String memAddr = rs.getString("mem_addr");
System.out.println(" " + memId + " " + memPass + " " + memName + " " + memTel + " " + memAddr );
}
System.out.println("-----------------------------------------------");
} catch (SQLException e) {
e.printStackTrace();
} finally {
disConnect();
}
}
// 회원 정보를 추가하는 메서드
private void insertMember() {
System.out.println();
System.out.println("추가할 회원 정보를 입력하세요...");
int count = 0; // 회원ID의 개수가 저장될 변수
String memId; // 회원ID가 저장될 변수
do {
System.out.println("회원ID >> ");
memId = scan.next();
count = getMemberCount(memId);
if(count>0) {
System.out.println(memId +"은(는) 이미 등록된 회원ID입니다.");
System.out.println("다른 회원ID를 입력하세요...");
}
}while(count>0);
System.out.print("비밀번호 >> ");
String memPass = scan.next();
System.out.print("회원이름 >> ");
String memName = scan.next();
System.out.print("전화번호 >> ");
String memTel = scan.next();
scan.nextLine(); // 입력 버퍼 비우기
System.out.print("회원주소 >> ");
String memAddr = scan.next();
try {
conn = DBUtil.getConnection();
String sql = "insert into mymember (mem_id, mem_pass, mem_name, mem_tel, mem_addr)"
+ "values(?, ?, ?, ?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
pstmt.setString(2, memPass);
pstmt.setString(3, memName);
pstmt.setString(4, memTel);
pstmt.setString(5, memAddr);
int cnt = pstmt.executeUpdate();
if(cnt > 0) {
System.out.println(memId + "회원 정보 추가 완료!!!");
}else {
System.out.println(memId + "회원 정보 추가 실패~~~");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
disConnect();
}
}
// 회원ID를 인수값으로 받아서 DB에 등록된 해당 회원ID의 개수를 반환하는 메서드
private int getMemberCount(String memId ) {
int count = 0; // 반환값이 저장될 변수
try {
conn = DBUtil.getConnection();
String sql = "select count(*) cnt from mymember where mem_id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, memId);
rs = pstmt.executeQuery();
if(rs.next()) {
count = rs.getInt("cnt");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
disConnect();
}
return count;
}
// 메뉴를 출력하고 입력한 작업 번호를 반환하는 메서드
private int displayMenu() {
System.out.println();
System.out.println("==== 작업 선택 ====");
System.out.println("1. 자료 추가");
System.out.println("2. 자료 삭제");
System.out.println("3. 자료 수정");
System.out.println("4. 전체 자료 출력");
System.out.println("5. 자료 수정2");
System.out.println("0. 작업 끝.");
System.out.println();
System.out.print("작업 번호 입력>>");
return scan.nextInt();
}
}
**db연결을 한번에 처리하기
package kr.or.ddit.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// JDBC드라이버를 로딩하고 DB서버에 연결된 Connection객체를 생성하는 메서드로 구성된 class
public class DBUtil {
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패~~~");
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SSR97","java");
} catch (SQLException e) {
System.out.println("DB 연결 실패 !!!");
return null;
}
}
}