>  기사  >  Java  >  Java의 JDBC에 대한 간략한 소개

Java의 JDBC에 대한 간략한 소개

黄舟
黄舟원래의
2017-07-20 14:01:071418검색

JDBC란 무엇인가요? 이 기사에서는 클라이언트 프로그램이 데이터베이스에 액세스하는 방법을 표준화하는 데 사용되는 Java 언어의 애플리케이션 프로그래밍 인터페이스에 대해 자세히 소개합니다. 관심 있는 친구는 이를 참조할 수 있습니다.

서문: JDBC란 무엇입니까

Wikipedia 소개:


 Java Database Connectivity(JDBC)는 클라이언트 프로그램이 데이터베이스에 액세스하는 방법을 표준화하는 데 사용되는 Java 언어의 애플리케이션 프로그래밍 인터페이스입니다. . JDBC는 Sun Microsystems의 상표이기도 합니다. JDBC는 관계형 데이터베이스용입니다.


  쉽게 말하면 SQL 문을 실행하는 데 사용되는 Java API의 일종입니다. JDBC를 통해 Java 프로그래밍을 직접 사용하여 관계형 데이터베이스를 운영할 수 있습니다. 캡슐화를 통해 개발자는 순수 Java API를 사용하여 SQL 실행을 완료할 수 있습니다.


1. 준비(1): MySQL 설치 구성 및 기본 학습

아래 사진은 제가 시연에 사용할 데이터베이스 테이블입니다.


2. 준비(2): 데이터베이스에 해당하는 jar 패키지를 다운로드하고 import 합니다.

JDBC를 사용하려면 해당 jar 패키지를 프로젝트로 import 해야 합니다. Eclipse에서 가져오기 방법:

프로젝트 아이콘을 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택한 다음 "Java Bulid Path"에서 "외부 JAR 추가..."를 선택하고 다운로드 및 압축을 푼 후 얻은 jar 패키지를 선택합니다. S mysql을 운영하는 경우 현재 가져오기는 오류를 보고하지 않습니다.

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

, 이 외에도 직접 가져오려면 JDBC 백도 필요합니다.


import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

3. 기본 JDBC 작업


간단성을 위해 데이터베이스 관련 작업, 명령 및 매개 변수는 모두 하드 코딩됩니다. 관심 있는 독자는 이를 탐색하고 데이터와 작업 간의 결합을 줄일 수 있습니다.

먼저 특정 코드를 살펴보고 실습해 보겠습니다. 이 글의 다섯 번째 부분에서는 사용된 API에 대해 약간 연구합니다.
 아래의 모든 메소드와 데이터 멤버는 공개 클래스 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 )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=&#39;" + name + "&#39;";
 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;
}
4. 테스트

테스트하기 전에 시스템에서 해당 데이터베이스의 서비스를 열어야 합니다. Windows에서 MySQL의 시작 명령은
net start mysql


Test code

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

Output in Eclipse입니다.

=========================
1    엔더        남성    8   
2    콩        남성    6   
3    페트라        페마    9   
4    피터        남성    9   
5    _Graff        남성    40   
6    GOD        fema    255   
===========================
============ ===============
1    엔더        남성    8   
2    콩        남성    6   
3    페트라        페마    9   
4    피터        남성    9   
5    _Graff        남성    40   
6    GOD        fema    255   
7    아킬레스건 남성    14   
============================
resutl: 1
resutl: 1
========== =================
1    엔더        남성    8   
2    콩        남성    7   
3    페트라        페마    9   
4    피터        남성    9   
5    _Graff        남성    40   
6    GOD        fema    255   
= ============================

五、代码分析

上述对数据库进行增删改查的过程中,可以发现其共性부분,即일반적인 흐름:

  (1)创建Connection对象、SQL查询命令字符串;
  (2)对Connection对象传入SQL查询命令,获得PreparedStatement对象;
  (3)对PreparedStatement对象执行executeUpdate()或executeQurey()获得结果;
  (4)先后关闭PreparedStatement对象와Connection对象。

可见,使用JDBC时,最常打交道的是Connection、PreparedStatement这两个类,以及select中的ResultSet类。查阅Java API수册可以了解其具体적의식과방법。

Wrapper

java.sql 

接口 연결
所有超级接口:
Wrapper

공용 인터페이스 Connectionextends Wrapper 

与特定数据库的连接(会话)。지금 连接上下文中执行 SQL 语句并返回结果。
Connection 对象的数据库能够提供描述其表, 所支持的 SQL 语법, 存储过程, 此连接功能等等的信息.此信息是使사용 getMetaData 방법에 따라 Wrapper

所有已知子接口:
CallableStatement


공개 인터페이스 preparedStatementextends 문

表示预编译的 SQL 语句的对象。

SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。 


常 이용 방법

booleanexecute()
모든 종류의 SQL 문이 될 수 있는 이 ReadyStatement 객체에서 SQL 문을 실행합니다.
ResultSet ExecutionQuery()
이 ReadyStatement 객체에서 SQL 쿼리를 실행하고 쿼리에 의해 생성된 ResultSet 객체를 반환합니다. ㅋㅋㅋ比如INSERT、UPDATE 或DELETE 语句;或者是无返回内容的SQL DDL 문과 같은 문입니다.

ResultSet

java.sql Interface ResultSet
모든 슈퍼 인터페이스:

Wrapper

알려진 모든 하위 인터페이스:

CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, Set


공개 인터페이스 설정 ResultSetextends Wrapper

는 일반적으로 데이터베이스를 쿼리하는 문을 실행하여 생성되는 데이터베이스 결과 집합의 데이터 테이블을 나타냅니다. ​

6. 생각해 볼 질문

모든 SQL 작업은 연결을 설정하고 닫아야 하는데, 이는 필연적으로 많은 리소스 오버헤드를 소모하게 됩니다. 이를 방지하는 방법은 무엇입니까?
분석: 연결 풀을 사용하면 매번 연결을 설정하고 닫을 필요 없이 연결을 균일하게 유지할 수 있습니다. 실제로 이는 JDBC를 캡슐화하는 많은 도구에서 사용됩니다.

위 내용은 Java의 JDBC에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.