ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210503_1~4(mysql연동프로그램)
    JAVA(Sol)(정리대기중..언젠가) 2021. 5. 3. 12:19

    연동 프로그램 작성

    1.Connection con <===연동정보를 담고있다

              |

    2.Statement stmt <=== 쿼리 sql을 작성하고 실행하는 객체

              |

    3. ResultSet rs <=== 쿼리 실행 결과를 저장하는 가리키고 처리할수 있는 객체

    서로연동해서 객체를 만드는것(세트로생각)

     

    1번과 2번은 DML(Data Manipulation Language)(insert,update,delete) 문장에서 나옴 

         <====executeUpdate(sql)로 실행

     1번, 2번, 3번은 DQL(Data Query Language)문장에서 나옴 --->select 

         <=== executeQuery(sql)로 실행

     

     

    데이타베이스,네트워크,파일은 사용후 반드시 닫는다.

    물론 사용하지 않으면 닫지 않아도 된다.

    생성 순서의 역순으로 닫는다.   3-->2-->1

     

    3 rs.close(); ==> 실제로는 확인하고 닫는다. if(rs!=null){rs.close()};

    2 stmt.close();

    1 con.close();

     

     

    -------------------------mysql에서 테이블먼저생성후

    create table owner_info
    (
    id int not null primary key, # 주민번호
    nm varchar(50) null, # 이름
    handphone varchar(50), #핸드폰
    gender varchar(4) null # 성별 #<=== 영어 4Byte, 한글 4글자..
    ) engine = innodb default charset= euckr;  #<==트랜잭션과 한글지원

     

    cf) euckr ===> 영어 latin1 + 한글 완성형 한글 : 글자 하나가 2byte

         uft8  ===> 영어 + 한글 (다국어) : 1~3 바이트 가변처리

     

    euc-kr <--- 상호 호환 안됨 ---> UTF-8

     

    INSERTDB

    package chapter27;
    
    import java.sql.*;
    
    public class InsertDB {
    
    	public static void main(String[] args) {
    		String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
    		
    		Connection con = null;
    		Statement stmt = null;
    		ResultSet rs = null; //dml문장이기때문에 안나옴
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver");
    			//드라이버를 동적으로 로딩하시오
    		} catch (java.lang.ClassNotFoundException e) {
    			System.out.println("드라이버를 찾지 못했습니다.");
    			System.out.println(e.getMessage());
    		}
    		try {
    			con = DriverManager.getConnection(url, "javauser", "1234");
    			//연동객체 생성
    			String sqlStr = "INSERT INTO owner_info (id,nm,handphone,gender) VALUES" 
    			+ "(2,'아로미','000-111-2222','여')";
    			//sql문장을 만들었다
    			stmt = con.createStatement();
    			//statement인스턴스생성
    			stmt.executeUpdate(sqlStr);
    			//sqlStr을 db에서실행하라
    			System.out.println("레코드가 추가되었습니다.");
    		} catch (SQLException e) {
    			System.out.println("SQLException : " + e.getMessage());
    		} finally {
    			try {
    				stmt.close(); //생성된객체는 반드시 닫는다
    				con.close();
    			} catch (Exception e) {
    				System.out.println(e.toString());
    			}
    		}
    
    	}
    
    }
    

    con =DriverManager.getConnection(url, "javauser", "1234");


    int cnt = INSERT, UPDATE, DELETE<====executeUpdate(sql)로 실행   #실행하고 반환형이 정수이다

     

    resultSet rs = SELECT<=== executeQuery(sql)로 실행 반환형이 resultSet이다.

     

     

     

     

    SelectDB

    package chapter27;
    
    import java.sql.*;
    
    public class SelectDB {
    
    	public static void main(String[] args) {
    		String url = "jdbc:mysql://127.0.0.1:3306/javadb?useUnicode=true&characterEncoding=euckr";
    		//연동문구 url
    		Connection DbCon = null;
    		Statement stmt = null;
    		ResultSet rs = null; //select문이 나왔기때문에 사용
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver");
    			//드라이버 로딩
    		} catch (java.lang.ClassNotFoundException e) {
    			System.out.println("ClassNotFoundException :");
    			System.out.println(e.getMessage());
    		}
    		try {
    			DbCon = DriverManager.getConnection(url, "javauser", "1234");
    			//(주소,권한)을가지고 연동
    			stmt = DbCon.createStatement(); //연동객체로 스테이트먼트생성
    			String sqlStr = "SELECT id, nm, handphone,gender FROM owner_info";
    			rs = stmt.executeQuery(sqlStr);
    			//executeQuery 반드시 resultset으로 반환
    
    			while (rs.next()) { //모든행을 읽을때까지 반복
    				String id = rs.getString(1); //인덱스번호=셀렉트절에 명기된 컬럼의 순서
    				String name = rs.getString(2);
    				String phone = rs.getString("handphone");
    				String gender = rs.getString("gender");
    				System.out.println(id + " " + name + " " + phone + " " + gender);
    			}
    		} catch (SQLException e) {
    			System.out.println("SQLException : " + e.toString());
    		} finally {
    			try {
    				rs.close();
    				stmt.close();
    				DbCon.close();
    			} catch (Exception e) {
    				System.out.println(e.toString());
    			}
    		}
    
    	}
    
    }
    //2 아로미 000-111-2222 여
    

    Update DB

     

    package chapter27;
    
    import java.sql.*;
    
    public class UpdateDB {
    	public static void main(String[] args) {
    		String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
    		Connection DbCon = null;
    		Statement stmt = null;
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver");
    		} catch (java.lang.ClassNotFoundException e) {
    			System.out.println("ClassNotFoundException :");
    			System.out.println(e.getMessage());
    		}
    		try {
    			DbCon = DriverManager.getConnection(url, "javauser", "1234");
    			stmt = DbCon.createStatement();
    			String sqlStr = "UPDATE owner_info SET handphone = 'XXX-XXXX-XXXX' WHERE id=2";
    
    			stmt.executeUpdate(sqlStr);
    			System.out.println("레코드가 수정되었습니다.");
    		} catch (SQLException e) {
    			System.out.println("SQLException : " + e.getMessage());
    		} finally {
    			try {
    				stmt.close();
    				DbCon.close();
    			} catch (Exception e) {
    				System.out.println(e.toString());
    			}
    
    		}
    	}
    
    }
    

     owner_info "+"SET handphone = 'XXX-XXXX-XXXX' WHERE id=8

    이부분이 자꾸 에러나서 "+"부분을 지워버렸더니 잘됐다..

     

     

    DeleteDB

    package chapter27;
    
    import java.sql.*;
    
    public class DeleteDB {
    	public static void main(String[] args) {
    		String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
    		Connection DbCon = null;
    		Statement stmt = null;
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver");
    		} catch (java.lang.ClassNotFoundException e) {
    			System.err.println("ClassNotFoundException");
    			System.err.println(e.getMessage());
    		}
    		try {
    
    			DbCon = DriverManager.getConnection(url, "javauser", "1234");
    			stmt = DbCon.createStatement();
    			String sqlStr = "DELETE FROM owner_info WHERE id = 2";
    			stmt.execute(sqlStr);
    
    			System.out.println("레코드를 삭제했습니다.");
    		} catch (SQLException e) {
    			System.out.println("SQLException : " + e.getMessage());
    		} finally {
    			try {
    				stmt.close();
    				DbCon.close();
    			} catch (Exception e) {
    				System.out.println(e.toString());
    			}
    		}
    	}
    
    }
    

    PreparedStatement

     

    -------------------

    PreparedStatement : 쿼리를 미리 컴파일한다. 실행속도가 빠름 / 추천한다. 모든DB가 지원하는 것은 아니다.

     

    ----------------------------------------------sql 적용되는 시점

      인스턴스생성 실행시
    Statement X SQL
    PreparedStatement SQL X

    위의 내용은 코딩시 에러가 나지 않기때문에조심해야한다.

     

    동적데이타 (미리컴파일 불가능한 부분은)은 ? 로 대체하고,

     나중에 생성후 pstmt.set데이타형(1(인덱스),"값") 형식으로 초기화한다.

     

    package chapter27;
    
    import java.sql.*;
    
    public class InsertPrepDB {
    	public static void main(String[] args) {
    		String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
    		Connection con = null; //연결객체
    		PreparedStatement pstmt = null; // preparestatement 미리쿼리를 컴파일한다
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver");//드라이버로딩
    
    		} catch (java.lang.ClassNotFoundException e) {
    			System.out.println("드라이버를 찾지 못했습니다.");
    			System.out.println(e.getMessage());
    		}
    
    		try {
    			con = DriverManager.getConnection(url, "javauser", "1234");
    			//서버연결
    			String sqlStr = "INSERT INTO owner_info(id,nm,handphone,gender) values" + "(?,?,?,?)";
    			//인서트문장 동적데이터는?로 빼놓을수있다 뒤에set으로  // sqlStr로 미리 작성해놓고 객체화해서
    			pstmt = con.prepareStatement(sqlStr); // 나중에 pstmt에 넣응다.
    			//prepare인스턴스생성시 sql이 들어간다.
    			pstmt.setInt(1, 10); //sqlstr작성시했던 ?를 set으로
    			pstmt.setString(2, "홍길동");
    			pstmt.setString(3, "999-9999-9999");
    			pstmt.setString(4, "남");
    
    			pstmt.executeUpdate();
    
    			System.out.println("레코드가 추가되었습니다.");
    		} catch (SQLException e) {
    			System.out.println("SQLException : " + e.getMessage());
    		} finally {
    			try {
    				pstmt.close();
    				con.close();
    
    			} catch (Exception e) {
    				System.out.println(e.toString());
    
    			}
    		}
    	}
    
    }
    
    
    package chapter27;
    
    import java.sql.*;
    
    public class PrepDB {
    	public static void main(String[] args) {
    		String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
    		Connection con = null;
    		PreparedStatement pstmt = null;
    		ResultSet rs = null; //select문
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver");
    		} catch (java.lang.ClassNotFoundException e) {
    			System.out.println("ClassNotFoundException :");
    			System.out.println(e.getMessage());
    		}
    		try {
    			con = DriverManager.getConnection(url, "javauser", "1234");
    
    			String sqlStr = "SELECT * FROM owner_info WHERE ID = ?";
    
    			pstmt = con.prepareStatement(sqlStr);
    
    			pstmt.setInt(1, 10);
    
    			rs = pstmt.executeQuery();
    
    			while (rs.next()) { //뷰로직
    				System.out.println("번호 : " + rs.getString("id") + " ");
    				System.out.println("성명 : " + rs.getString("nm") + " ");
    				System.out.println("핸드폰 번호 : " + rs.getString("handphone") + " ");
    				System.out.println("성별 : " + rs.getString("gender") + " ");
    			}
    
    		} catch (SQLException e) {
    			System.out.println("SQLException :" + e.getMessage());
    		} finally {
    			try {
    				rs.close(); //자원반납
    				pstmt.close();
    				con.close();
    			} catch (Exception e) {
    				System.out.println(e.toString());
    			}
    		}
    	}
    
    }
    //번호 : 10 
    //성명 : 홍길동 
    //핸드폰 번호 : 999-9999-9999 
    //성별 : 남 
    
    

     

    앞에 컬럼네임 꺼내와보고싶어서 수정해봄

    package chapter27;
    
    import java.sql.*;
    
    public class PrepDB {
    	public static void main(String[] args) {
    		String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr";
    		Connection con = null; //연결객체
    		PreparedStatement pstmt = null; //preparestatement객체
    		ResultSet rs = null; //select문
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver"); //드라이버불러오기
    		} catch (java.lang.ClassNotFoundException e) {
    			System.out.println("ClassNotFoundException :");
    			System.out.println(e.getMessage());
    		}
    		try {
    			con = DriverManager.getConnection(url, "javauser", "1234");
    			//드라이버 연결
    
    			String sqlStr = "SELECT * FROM owner_info WHERE ID = ?";
    			//sql문을 sqlStr에 넣어놓고
    			pstmt = con.prepareStatement(sqlStr);
    			//생성
    			pstmt.setInt(1, 10);
    			//1번인덱스를 10으로 둔다
    			rs = pstmt.executeQuery();
    			
    			ResultSetMetaData rsmd = rs.getMetaData();
    
    			while (rs.next()) { //뷰로직
    				System.out.println(rsmd.getColumnName(1)+":\t\t" + rs.getString("id") + " ");
    				System.out.println(rsmd.getColumnName(2)+":\t\t" + rs.getString("nm") + " ");
    				System.out.println(rsmd.getColumnName(3)+":\t" + rs.getString("handphone") + " ");
    				System.out.println(rsmd.getColumnName(4)+":\t\t" + rs.getString("gender") + " ");
    			}
    
    		} catch (SQLException e) {
    			System.out.println("SQLException :" + e.getMessage());
    		} finally {
    			try {
    				rs.close(); //자원반납
    				pstmt.close();
    				con.close();
    			} catch (Exception e) {
    				System.out.println(e.toString());
    			}
    		}
    	}
    
    }
    //id:		10 
    //nm:		홍길동 
    //handphone:	999-9999-9999 
    //gender:		남 
    
    
    

     

Designed by Tistory.