자세 한 내용 은 JDBC 를 통 해 간단 한 첨삭 검사(MySQL 을 예 로 들 면)

10591 단어 jdbcmysql
프롤로그:JDBC 가 무엇 입 니까?
자바 데이터베이스 연결,(자바 Database Connectivity,JDBC 로 약칭)은 자바 언어 에서 클 라 이언 트 프로그램 이 데이터 베 이 스 를 어떻게 방문 하 는 지 규범화 하 는 응용 프로그램 인터페이스 로 데이터 베 이 스 를 조회 하고 업데이트 하 는 방법 을 제공 합 니 다.JDBC 도 썬 마이크로 시스템 스 의 상표 다.그것 의 JDBC 는 관계 형 데이터 베 이 스 를 대상 으로 한다.
쉽게 말 하면 SQL 문 구 를 실행 하 는 자바 API 입 니 다.JDBC 를 통 해 우 리 는 자바 프로 그래 밍 을 직접 사용 하여 관계 데이터 베 이 스 를 조작 할 수 있 습 니 다.패 키 징 을 통 해 개발 자 들 이 순수 자바 API 를 사용 하여 SQL 의 실행 을 완성 할 수 있 습 니 다.
1.준비 작업(1):MySQL 설치 설정 및 기초 학습
JDBC 를 사용 하여 데이터 베 이 스 를 조작 하기 전에 먼저 데이터베이스 가 필요 합 니 다.여기에 3 개의 링크 를 제공 하여 독자 가 독학 할 수 있 도록 했다.만약 에 SQL 언어의 사용 경험(학교 에서 의 수업 학습 포함)이 있 었 다 면 앞의 두 링크 는 충분히 손 에 넣 을 수 있 었 다.
Mysql 다운로드 설치,배치 및 도형 화 상세 조작 강좌:https://www.jb51.net/article/87690.htm
입문 강 좌 를 보면 서 연습 하 는 것 을 권장 합 니 다.insert,update,select,delete 등 기본 동작 을 연습 하 는 동시에 뒤에 사용 할 시 계 를 만 드 는 것 을 권장 합 니 다.
다음 그림 은 내 가 다음 에 보 여줄 데이터베이스 의 표 이다.
   
 2.준비 작업(2):데이터베이스 에 대응 하 는 jar 패 키 지 를 다운로드 하고 가 져 오기
JDBC 를 사용 하려 면 프로젝트 에 대응 하 는 jar 패 키 지 를 가 져 와 야 합 니 다.데이터베이스 와 JDBC 패키지 의 대응 관 계 는 각종 데이터베이스 에 대응 하 는 jar 패키지,구동 클래스 와 URL 형식 을 참고 할 수 있 습 니 다.Eclipse 에서 가 져 오 는 방법:
프로젝트 아이콘 에서 오른쪽 클릭 하고"Properties"를 선택 하 십시오."Java Bulid Path"에서"Add External JARs..."를 선택 하고 다운로드 및 압축 해제 후 얻 을 jar 패 키 지 를 선택 하 십시오.
       
MySQL 을 조작 하면 아래 import 가 잘못 보고 되 지 않 습 니 다.

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
이외에 도 JDBC 가방 이 필요 해 직접 import 하면 된다.

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
3.JDBC 기본 조작
간단하게 보기 위해 서 데이터베이스 와 관련 된 조작,명령,매개 변 수 는 모두 하 드 코딩 되 었 다.관심 있 는 독 자 는 이런 것들 을 탐색 하여 데이터 와 작업 의 결합 성 을 낮 출 수 있다.
먼저 구체 적 인 코드 를 보고 실천 하고 본 고 는 다섯 번 째 부분 에서 사용 하 는 API 에 대해 연 구 를 했다.
아래 의 모든 방법 과 데이터 구성원 은 Public class JDBCoperation 내부 에 있 습 니 다.
(1)기록 을 정의 하 는 클래스(선택 가능)
이렇게 하 는 것 은 주로 조작 과 인터페이스 정 의 를 편리 하 게 하기 위해 서 이 며,반드시 필요 한 것 이다.

static class Student {
  private String Id;
  private String Name;
  private String Sex;
  private String Age;

  Student(String Name, String Sex, String Age) {
   this.Id = null; //default
   this.Name = Name;
   this.Sex = Sex;
   this.Age = Age;
  }

  public String getId() {
   return Id;
  }

  public void setId(String Id) {
   this.Id = Id;
  }

  public String getName() {
   return Name;
  }

  public void setName(String Name) {
   this.Name = Name;
  }

  public String getSex() {
   return Sex;
  }

  public void setSex(String Sex) {
   this.Sex = Sex;
  }

  public String getAge() {
   return Age;
  }

  public void setage(String Age) {
   this.Age = Age;
  }
}

(2)연결 가 져 오기
작업 하기 전에 데이터베이스 와 의 연결 을 가 져 와 야 합 니 다.

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;
}

(3)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;
}

(4)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;
}
(5)select
select*from XXX 를 예 로 들 면.

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;
}

(6)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;
}

테스트
테스트 전에 시스템 에서 데이터베이스 에 대응 하 는 서 비 스 를 열 어야 합 니 다.MySQL 의 Windows 시작 명령 은 net start my sql 입 니 다.
테스트 코드

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();
}
Eclipse 의 출력

============================
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)연결 대상,SQL 조회 명령 문자열 만 들 기;
(2)Connection 대상 에 게 SQL 조회 명령 을 전송 하여 Prepared Statement 대상 을 획득 합 니 다.
(3)Prepared Statement 대상 에 게 executeUpdate()또는 executeQurey()를 실행 하여 결 과 를 얻는다.
(4)preparedStatement 대상 과 Connection 대상 을 차례로 닫 습 니 다.
이 를 통 해 알 수 있 듯 이 JDBC 를 사용 할 때 가장 자주 접촉 하 는 것 은 Connection,Prepared Statement 등 두 가지 유형 과 select 중의 ResultSet 류 이다.
Connection
java.sql
인터페이스 연결
모든 슈퍼 인터페이스:Wrapper
--------------------------------------------------------------------------------
public interface Connectionextends Wrapper
특정 데이터베이스 와 의 연결(세 션).연결 컨 텍스트 에서 SQL 문 구 를 실행 하고 결 과 를 되 돌려 줍 니 다.
Connection 대상 의 데이터 베 이 스 는 표,지원 하 는 SQL 문법,저장 과정,이 연결 기능 등 을 설명 하 는 정 보 를 제공 할 수 있 습 니 다.이 정 보 는 getMetaData 방법 으로 얻 은 것 입 니 다.
PreparedStatemnt
java.sql
인터페이스 Prepared Statement
모든 슈퍼 인터페이스:Statement,Wrapper 모든 알 고 있 는 하위 인터페이스:CallableStatement
--------------------------------------------------------------------------------
public interface PreparedStatementextends Statement
사전 컴 파일 된 SQL 문 구 를 나타 내 는 대상 입 니 다.
SQL 문 구 는 예비 컴 파일 되 어 Prepared Statement 대상 에 저 장 됩 니 다.그리고 이 대상 을 사용 하여 이 문장 을 여러 번 효율적으로 집행 할 수 있다.
상용 방법

 boolean execute()
이 Prepared Statement 대상 에서 SQL 문 구 를 실행 합 니 다.이 문 구 는 모든 종류의 SQL 문 구 를 사용 할 수 있 습 니 다.

 ResultSet executeQuery()
이 Prepared Statement 대상 에서 SQL 조 회 를 실행 하고 이 조회 가 생 성 한 ResultSet 대상 을 되 돌려 줍 니 다.

 int executeUpdate()
이 Prepared Statement 대상 에서 SQL 문 구 를 실행 하려 면 이 문 구 는 반드시 SQL 데이터 조작 언어(Data Manipulation Language,DML)문 구 를 사용 해 야 합 니 다.예 를 들 어 INSERT,UPDATE 또는 DELETE 문 구 를 사용 해 야 합 니 다.또는 내용 을 되 돌려 주지 않 은 SQL 문장,예 를 들 어 DDL 문장.
ResultSet
java.sql
인터페이스 ResultSet
모든 슈퍼 인터페이스:Wrapper 모든 알 고 있 는 하위 인터페이스:CachedRowSet,FilteredRowSet,JdbcRowSet,JoinRowSet,RowSet,SyncResolver,WebRowSet
--------------------------------------------------------------------------------
public interface ResultSetextends Wrapper
데이터베이스 결과 집합 을 나타 내 는 데이터 시트 는 일반적으로 데이터 베 이 스 를 조회 하 는 문 구 를 실행 하여 생 성 된다.  
6.사고 문제
1.매번 SQL 작업 을 할 때마다 연결 을 구축 하고 닫 아야 합 니 다.그러면 대량의 자원 비용 을 소모 할 것 입 니 다.어떻게 피 할 수 있 습 니까?
분석:연결 탱크 를 사용 하여 연결 을 통일 적 으로 유지 할 수 있 으 며 매번 구축 하고 닫 을 필요 가 없습니다.사실 이것 은 JDBC 를 봉인 하 는 많은 도구 들 이 사용 하 는 것 이다.
2.자바 코드 에서 들 어 오 는 데이터 형식 이 데이터베이스 정의 와 다 르 면 어떻게 합 니까?자바 의 String 대상 을 데이터베이스 에 할당 하 는 tinyint 속성 과 같 습 니 다.
분석:SQL 문 구 를 실행 할 때 데이터 베 이 스 는 변환 을 시도 합 니 다.내 실험 에 따 르 면 순수한 알파벳 의 String 대상 으로 tinyint 의 age 속성 을 전달 하면 0 으로 바뀐다.구체 적 인 전환 규칙 은 데이터베이스 와 관련 이 있어 야 한다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기