Java 학습노트--JDBC

Sun회사는 표준api를 개발했는데 그들은 인터페이스일 뿐 실현 클래스를 제공하지 않았다. 데이터베이스 업체가 실현 클래스, 즉 드라이버를 제공했다.
jdbc 작업:
  • jar 패키지 가져오기
  • 기록된 클래스 정의(예를 들어 Student 클래스)
  • 접속 획득
  • sql의 실행
  • //      :
    private static Connection getConn() {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/samp_db";
        String username = "root";
        String password = "";
        Connection conn = null;
        try {
            Class.forName(driver); //classLoader,      
            conn = (Connection) DriverManager.getConnection(url, username, password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

     
    // sql    
    // insert
    private static int insert(Student student) {
        Connection conn = getConn();
        int i = 0;
        String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
        PreparedStatement pstmt;
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            pstmt.setString(1, student.getName());
            pstmt.setString(2, student.getSex());
            pstmt.setString(3, student.getAge());
            i = pstmt.executeUpdate();
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }
    
    // update
    private static int update(Student student) {
        Connection conn = getConn();
        int i = 0;
        String sql = "update students set Age='" + student.getAge() + "' where Name='" + student.getName() + "'";
        PreparedStatement pstmt;
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            i = pstmt.executeUpdate();
            System.out.println("resutl: " + i);
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }
    // select xx from tableName
    private static Integer getAll() {
        Connection conn = getConn();
        String sql = "select * from students";
        PreparedStatement pstmt;
        try {
            pstmt = (PreparedStatement)conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            int col = rs.getMetaData().getColumnCount();
            System.out.println("============================");
            while (rs.next()) {
                for (int i = 1; i <= col; i++) {
                    System.out.print(rs.getString(i) + "\t");
                    if ((i == 2) && (rs.getString(i).length() < 8)) {
                        System.out.print("\t");
                    }
                 }
                System.out.println("");
            }
                System.out.println("============================");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    // delete
    private static int delete(String name) {
        Connection conn = getConn();
        int i = 0;
        String sql = "delete from students where Name='" + name + "'";
        PreparedStatement pstmt;
        try {
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
            i = pstmt.executeUpdate();
            System.out.println("resutl: " + i);
            pstmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return i;
    }
    
    

    테스트:
    //   
    public static void main(String args[]) {
        JDBCOperation.getAll();
        JDBCOperation.insert(new Student("Achilles", "Male", "14"));
        JDBCOperation.getAll();
        JDBCOperation.update(new Student("Bean", "", "7"));
        JDBCOperation.delete("Achilles");
        JDBCOperation.getAll();
    }

    결과 출력:
    ============================
    1    Ender        male    8    
    2    Bean        male    6    
    3    Petra        fema    9    
    4    Peter        male    9    
    5    _Graff        male    40    
    6    GOD        fema    255    
    ============================
    ============================
    1    Ender        male    8    
    2    Bean        male    6    
    3    Petra        fema    9    
    4    Peter        male    9    
    5    _Graff        male    40    
    6    GOD        fema    255    
    7    Achilles    Male    14    
    ============================
    resutl: 1
    resutl: 1
    ============================
    1    Ender        male    8    
    2    Bean        male    7    
    3    Petra        fema    9    
    4    Peter        male    9    
    5    _Graff        male    40    
    6    GOD        fema    255    
    ============================

    코드 분석:
    위에서 언급한 데이터베이스를 첨삭 및 수정하는 과정에서 공통적인 부분, 즉 통용되는 절차를 발견할 수 있다.
    (1) Connection 객체, SQL 쿼리 명령 문자열 작성
    (2) Connection 대상에게 SQL 조회 명령을 보내고PreparedStatement 대상을 획득한다.
    (3)PreparedStatement 대상에게excuteUpdate() 또는excuteQurey()를 실행하여 결과를 얻기;
    (4) PreparedStatement 객체 및 Connection 객체를 차례로 닫습니다.
    이를 통해 알 수 있듯이 JDBC를 사용할 때 가장 자주 접촉하는 것은 연결, Prepared Statement 두 종류와 select의 Result Set 종류이다.
     
    문제를 사고하다
    1. 매번 SQL 작업은 연결을 구축하고 닫아야 한다. 그러면 대량의 자원 비용이 소모될 것이다. 어떻게 피해야 합니까?
    분석: 연결 탱크를 이용하여 연결을 통일적으로 유지보수할 수 있으며 매번 구축하고 닫을 필요가 없다.사실 이것은 JDBC를 봉인하는 많은 도구들이 채택한 것이다.
    2. 자바 코드에서 전송된 데이터 형식과 데이터베이스 정의가 다르면 어떻게 합니까?예를 들어 자바의 String 대상을 데이터베이스에tinyint 속성에 값을 부여합니다.
    분석: SQL 문을 실행할 때 데이터베이스에서 변환을 시도합니다.내 실험에 따르면 순수한 자모의 스트링 대상으로tinyint의age 속성을 전송하면 0으로 바뀐다.구체적인 전환 규칙은 데이터베이스와 관련이 있어야 한다.

    좋은 웹페이지 즐겨찾기