JDBC란 무엇인가요? 이 기사에서는 클라이언트 프로그램이 데이터베이스에 액세스하는 방법을 표준화하는 데 사용되는 Java 언어의 애플리케이션 프로그래밍 인터페이스에 대해 자세히 소개합니다. 관심 있는 친구는 이를 참조할 수 있습니다.
서문: JDBC란 무엇입니까
1. 준비(1): MySQL 설치 구성 및 기본 학습
2. 준비(2): 데이터베이스에 해당하는 jar 패키지를 다운로드하고 import 합니다.
프로젝트 아이콘을 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택한 다음 "Java Bulid Path"에서 "외부 JAR 추가..."를 선택하고 다운로드 및 압축을 푼 후 얻은 jar 패키지를 선택합니다. S mysql을 운영하는 경우 현재 가져오기는 오류를 보고하지 않습니다.
import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement;
import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException;
간단성을 위해 데이터베이스 관련 작업, 명령 및 매개 변수는 모두 하드 코딩됩니다. 관심 있는 독자는 이를 탐색하고 데이터와 작업 간의 결합을 줄일 수 있습니다.
먼저 특정 코드를 살펴보고 실습해 보겠습니다. 이 글의 다섯 번째 부분에서는 사용된 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;
}
}
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;
}
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; }
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; }
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;
}
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; }
테스트하기 전에 시스템에서 해당 데이터베이스의 서비스를 열어야 합니다. 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 语句的对象。
常 이용 방법
booleanexecute()
모든 종류의 SQL 문이 될 수 있는 이 ReadyStatement 객체에서 SQL 문을 실행합니다.
ResultSet ExecutionQuery()
이 ReadyStatement 객체에서 SQL 쿼리를 실행하고 쿼리에 의해 생성된 ResultSet 객체를 반환합니다. ㅋㅋㅋ比如INSERT、UPDATE 或DELETE 语句;或者是无返回内容的SQL DDL 문과 같은 문입니다.
ResultSet
java.sql Interface ResultSet
모든 슈퍼 인터페이스:
알려진 모든 하위 인터페이스:
CachedRowSet, FilteredRowSet, JdbcRowSet, JoinRowSet, RowSet, SyncResolver, Set
공개 인터페이스 설정 ResultSetextends Wrapper
는 일반적으로 데이터베이스를 쿼리하는 문을 실행하여 생성되는 데이터베이스 결과 집합의 데이터 테이블을 나타냅니다.
6. 생각해 볼 질문
모든 SQL 작업은 연결을 설정하고 닫아야 하는데, 이는 필연적으로 많은 리소스 오버헤드를 소모하게 됩니다. 이를 방지하는 방법은 무엇입니까?
분석: 연결 풀을 사용하면 매번 연결을 설정하고 닫을 필요 없이 연결을 균일하게 유지할 수 있습니다. 실제로 이는 JDBC를 캡슐화하는 많은 도구에서 사용됩니다.
위 내용은 Java의 JDBC에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!