Apache Commons DBUtils-빠른 가이드
Apache Commons DbUtils 라이브러리는 리소스 누출없이 JDBC 호출 처리를보다 쉽게 수행하고 코드를 더 깔끔하게 만들 수 있도록 설계된 아주 작은 클래스 집합입니다. JDBC 리소스 정리는 매우 지루하고 오류가 발생하기 쉬우므로 DBUtils 클래스는 보일러 플레이트 코드를 추상화하는 데 도움이되므로 개발자는 데이터베이스 관련 작업에만 집중할 수 있습니다.
DBUtils의 장점
Apache Commons DBUtils 사용의 장점은 다음과 같습니다.
No Resource Leakage − DBUtils 클래스는 리소스 누출이 발생하지 않도록합니다.
Clean & Clear code − DBUtils 클래스는 정리 또는 리소스 누출 방지 코드를 작성하지 않고도 데이터베이스 작업을 수행 할 수있는 깔끔하고 명확한 코드를 제공합니다.
Bean Mapping − DBUtils 클래스는 결과 집합에서 자동으로 javabeans를 채우도록 지원합니다.
DBUtils 설계 원칙
Apache Commons DBUtils의 설계 원칙은 다음과 같습니다.
Small − DBUtils 라이브러리는 클래스 수가 적고 크기가 매우 작아 이해하고 사용하기 쉽습니다.
Transparent− DBUtils 라이브러리는 배후에서 많은 작업을 수행하지 않습니다. 단순히 쿼리를 받아 실행합니다.
Fast − DBUtils 라이브러리 클래스는 많은 백그라운드 객체를 생성하지 않으며 데이터베이스 작업 실행에서 매우 빠릅니다.
DBUtils로 개발을 시작하려면 아래 표시된 단계에 따라 DBUtils 환경을 설정해야합니다. Windows 플랫폼에서 작업하고 있다고 가정합니다.
Java 설치
Java 공식 사이트 에서 J2SE 개발 키트 5.0 (JDK 5.0)을 설치합니다 .
아래에 설명 된대로 다음 환경 변수가 설정되어 있는지 확인하십시오.
JAVA_HOME −이 환경 변수는 JDK를 설치 한 디렉토리를 가리켜 야합니다 (예 : C : \ Program Files \ Java \ jdk1.5.0).
CLASSPATH −이 환경 변수에는 C : \ Program Files \ Java \ jdk1.5.0_20 \ jre \ lib와 같은 적절한 경로가 설정되어 있어야합니다.
PATH −이 환경 변수는 적절한 JRE bin (예 : C : \ Program Files \ Java \ jre1.5.0_20 \ bin)을 가리켜 야합니다.
이러한 변수가 이미 설정되어있을 수 있지만 확인하는 방법은 다음과 같습니다.
제어판으로 이동하여 시스템을 두 번 클릭하십시오. Windows XP 사용자 인 경우 시스템 아이콘이 표시되기 전에 성능 및 유지 관리를 열어야 할 수 있습니다.
고급 탭으로 이동하여 환경 변수를 클릭하십시오.
이제 위에서 언급 한 모든 변수가 올바르게 설정되었는지 확인하십시오.
데이터베이스 설치
물론 가장 중요한 것은 쿼리하고 수정할 수있는 테이블이있는 실제 실행중인 데이터베이스입니다.
가장 적합한 데이터베이스를 설치하십시오. 당신은 많은 선택을 할 수 있고 가장 일반적인 것은-
MySQL DB:MySQL은 오픈 소스 데이터베이스입니다. MySQL 공식 사이트 에서 다운로드 할 수 있습니다 . 전체 Windows 설치를 다운로드하는 것이 좋습니다.
그리고 또한, 다운로드에서 설치 MySQL의 관리자 뿐만 아니라 MySQL의 쿼리 브라우저 . 이들은 개발을 훨씬 쉽게 만들어주는 GUI 기반 도구입니다.
마지막으로 편리한 디렉토리에 MySQL Connector / J (MySQL JDBC 드라이버)를 다운로드하고 압축을 풉니 다 . 이 자습서에서는 C : \ Program Files \ MySQL \ mysql-connector-java-5.1.8에 드라이버를 설치했다고 가정합니다.
따라서 CLASSPATH 변수를 C : \ Program Files \ MySQL \ mysql-connector-java-5.1.8 \ mysql-connector-java-5.1.8-bin.jar로 설정합니다. 드라이버 버전은 설치에 따라 다를 수 있습니다.
PostgreSQL DB:PostgreSQL은 오픈 소스 데이터베이스입니다. PostgreSQL 공식 사이트 에서 다운로드 할 수 있습니다 .
Postgres 설치에는 pgAdmin III라는 GUI 기반 관리 도구가 포함되어 있습니다. JDBC 드라이버도 설치의 일부로 포함됩니다.
Oracle DB− Oracle DB는 Oracle에서 판매하는 상용 데이터베이스입니다. 이를 설치하는 데 필요한 배포 매체가 있다고 가정합니다.
Oracle 설치에는 Enterprise Manager라는 GUI 기반 관리 도구가 포함되어 있습니다. JDBC 드라이버도 설치의 일부로 포함됩니다.
데이터베이스 드라이버 설치
최신 JDK에는 JDBC API를 사용하는 프로그래머가 대부분의 ODBC (Open Database Connectivity) 드라이버를 사용할 수 있도록하는 JDBC-ODBC 브리지 드라이버가 포함되어 있습니다.
오늘날 대부분의 데이터베이스 공급 업체는 데이터베이스 설치와 함께 적절한 JDBC 드라이버를 제공하고 있습니다. 따라서이 부분에 대해 걱정할 필요가 없습니다.
데이터베이스 자격 증명 설정
이 튜토리얼에서는 MySQL 데이터베이스를 사용합니다. 위의 데이터베이스를 설치할 때 관리자 ID는 다음으로 설정됩니다.root 원하는 비밀번호를 설정할 수 있습니다.
루트 ID 및 비밀번호를 사용하여 다른 사용자 ID 및 비밀번호를 작성하거나 JDBC 애플리케이션에 대한 루트 ID 및 비밀번호를 사용할 수 있습니다.
데이터베이스 생성 및 삭제와 같은 다양한 데이터베이스 작업이 있으며 관리자 ID와 비밀번호가 필요합니다.
나머지 JDBC 튜토리얼에서는 MySQL 데이터베이스를 username ID로 password 암호로.
새 사용자를 만들 수있는 충분한 권한이없는 경우 데이터베이스 관리자 (DBA)에게 사용자 ID와 암호를 만들도록 요청할 수 있습니다.
데이터베이스 생성
만들려면 emp 데이터베이스, 다음 단계를 사용하십시오-
1 단계
열기 Command Prompt 다음과 같이 설치 디렉토리로 변경하십시오-
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
Note: 경로 mysqld.exe시스템의 MySQL 설치 위치에 따라 다를 수 있습니다. 데이터베이스 서버 시작 및 중지 방법에 대한 문서를 확인할 수도 있습니다.
2 단계
아직 실행 중이 아니면 다음 명령을 실행하여 데이터베이스 서버를 시작하십시오.
C:\Program Files\MySQL\bin>mysqld
C:\Program Files\MySQL\bin>
3 단계
만들기 emp 다음 명령을 실행하여 데이터베이스-
C:\Program Files\MySQL\bin> mysqladmin create emp -u root -p
Enter password: ********
C:\Program Files\MySQL\bin>
테이블 생성
만들려면 Employees emp 데이터베이스의 테이블, 다음 단계를 사용하십시오-
1 단계
열기 Command Prompt 다음과 같이 설치 디렉토리로 변경하십시오-
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
2 단계
다음과 같이 데이터베이스에 로그인하십시오-
C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>
3 단계
테이블 만들기 Employee 다음과 같이-
mysql> use emp;
mysql> create table Employees
-> (
-> id int not null,
-> age int not null,
-> first varchar (255),
-> last varchar (255)
-> );
Query OK, 0 rows affected (0.08 sec)
mysql>
데이터 레코드 생성
마지막으로 다음과 같이 Employee 테이블에 몇 개의 레코드를 생성합니다.
mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
Query OK, 1 row affected (0.00 sec)
mysql>
MySQL 데이터베이스에 대한 완전한 이해를 위해 MySQL Tutorial을 공부하십시오 .
Commons DBUtils 아카이브 다운로드
commons-dbutils-1.7-bin.zip , MySql 커넥터 mysql-connector-java-5.1.28-bin.jar , Apache Commons DBCP commons-dbcp2-2.1.1-bin 에서 최신 버전의 Apache Common DBUtils jar 파일을 다운로드하십시오 . zip , Apache Commons Pool commons-pool2-2.4.3-bin.zip 및, Apache Commons Logging commons-logging-1.2-bin.zip . 이 튜토리얼을 작성하는 시점에 commons-dbutils-1.7-bin.zip , mysql-connector-java-5.1.28-bin.jar , commons-dbcp2-2.1.1-bin.zip , commons- pool2를 다운로드 했습니다 . -2.4.3-bin.zip , commons-logging-1.2-bin.zip 파일 을 C : \> Apache 폴더에 복사했습니다.
OS | 아카이브 이름 |
---|---|
윈도우 | commons-dbutils-1.7-bin.zip |
리눅스 | commons-dbutils-1.7-bin.tar.gz |
맥 | commons-dbutils-1.7-bin.tar.gz |
Apache 공통 DBUtils 환경 설정
설정 APACHE_HOMEApache jar가 시스템에 저장된 기본 디렉토리 위치를 가리키는 환경 변수. 다음과 같이 다양한 운영 체제의 Apache 폴더에서 commons-dbutils-1.7-bin.zip을 추출했다고 가정합니다.
OS | 산출 |
---|---|
윈도우 | 환경 변수 APACHE_HOME을 C : \ Apache로 설정합니다. |
리눅스 | export APACHE_HOME = / usr / local / Apache |
맥 | export APACHE_HOME = / Library / Apache |
CLASSPATH 변수 설정
설정 CLASSPATH공통 IO jar 위치를 가리키는 환경 변수. 다음과 같이 다양한 운영 체제의 Apache 폴더에 commons-dbutils-1.7-bin.zip을 저장했다고 가정합니다.
OS | 산출 |
---|---|
윈도우 | 환경 변수 CLASSPATH를 % CLASSPATH %; % APACHE_HOME % \ commons-dbutils-1.7.jar; mysql-connector-java-5.1.28.jar; commons-dbcp2-2.1.1.jar; commons-pool2-2.4로 설정합니다. 3.jar; commons-logging-1.2.jar; |
리눅스 | 내보내기 CLASSPATH =$CLASSPATH:$APACHE_HOME / commons-dbutils-1.7.jar : mysql-connector-java-5.1.28.jar : commons-dbcp2-2.1.1 : commons-pool2-2.4.3.jar : commons-logging-1.2.jar. |
맥 | 내보내기 CLASSPATH =$CLASSPATH:$APACHE_HOME / commons-dbutils-1.7.jar : mysql-connector-java-5.1.28 : commons-dbcp2-2.1.1.jar : commons-pool2-2.4.3.jar; commons-logging-1.2.jar. |
이제 DBUtils 실험을 시작할 준비가되었습니다. 다음 장에서는 DBUtils 프로그래밍에 대한 샘플 예제를 제공합니다.
이 장에서는 DBUtils 라이브러리를 사용하여 간단한 JDBC 응용 프로그램을 만드는 방법의 예를 제공합니다. 이것은 데이터베이스 연결을 열고 SQL 쿼리를 실행하고 결과를 표시하는 방법을 보여줍니다.
이 템플릿 예제에 언급 된 모든 단계는이 자습서의 후속 장에서 설명됩니다.
JDBC 애플리케이션 생성
JDBC 애플리케이션을 구축하는 데 관련된 다음 6 단계가 있습니다.
Import the packages− 데이터베이스 프로그래밍에 필요한 JDBC 클래스를 포함하는 패키지를 포함해야합니다. 가장 자주 사용import java.sql.* 충분합니다.
Register the JDBC driver − 드라이버를 초기화해야 데이터베이스와 통신 채널을 열 수 있습니다.
Open a connection − DriverManager.getConnection() 데이터베이스와의 물리적 연결을 나타내는 Connection 개체를 만드는 메서드입니다.
Execute a query − SQL 문을 작성하고 데이터베이스에 제출하려면 Statement 유형의 개체를 사용해야합니다.
Extract data from result set − 적절한 ResultSet.getXXX() 결과 세트에서 데이터를 검색하는 메소드.
Clean up the environment − JVM의 가비지 수집에 의존하는 대신 모든 데이터베이스 리소스를 명시 적으로 닫아야합니다.
샘플 코드
이 샘플 예제는 나중에 고유 한 JDBC 애플리케이션을 만들어야 할 때 템플릿으로 사용할 수 있습니다.
이 샘플 코드는 이전 장에서 수행 한 환경 및 데이터베이스 설정을 기반으로 작성되었습니다.
MainApp.java에 다음 예제를 복사하여 붙여넣고 다음과 같이 컴파일하고 실행하십시오.
MainApp.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
Employee.java
프로그램은 다음과 같습니다-
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
이제 위의 예를 다음과 같이 컴파일 해 보겠습니다.
C:\>javac MainApp.java Employee.java
C:\>
당신이 달릴 때 MainApp, 다음 결과를 생성합니다-
C:\>java MainApp
Connecting to database...
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>
다음 예제는 DBUtils의 도움으로 쿼리 삽입을 사용하여 레코드를 만드는 방법을 보여줍니다. Employees Table에 레코드를 삽입합니다.
통사론
쿼리를 생성하는 구문은 다음과 같습니다.
String insertQuery ="INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)";
int insertedRecords = queryRunner.update(conn, insertQuery,104,30, "Sohan","Kumar");
어디,
insertQuery − 자리 표시자가있는 쿼리를 삽입합니다.
queryRunner − QueryRunner 개체는 직원 개체를 데이터베이스에 삽입합니다.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 삽입 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int insertedRecords = queryRunner.update(conn,
"INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)",
104,30, "Sohan","Kumar");
System.out.println(insertedRecords + " record(s) inserted");
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
1 record(s) inserted.
다음 예제는 DBUtils의 도움으로 읽기 쿼리를 사용하여 레코드를 읽는 방법을 보여줍니다. Employees Table에서 레코드를 읽습니다.
통사론
읽기 쿼리 구문은 다음과 같습니다.
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
어디,
resultHandler − ResultSetHandler 객체는 결과 집합을 Employee 객체에 매핑합니다.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행할 예제를 작성해 보겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler =
new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE id=?", resultHandler, 104);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
ID: 104, Age: 30, First: Sohan, Last: Kumar
다음 예제는 DBUtils의 도움으로 업데이트 쿼리를 사용하여 레코드를 업데이트하는 방법을 보여줍니다. Employees Table의 레코드를 업데이트합니다.
통사론
업데이트 쿼리 구문은 다음과 같습니다.
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
int updatedRecords = queryRunner.update(conn, updateQuery, 33,104);
어디,
updateQuery − 자리 표시자가있는 업데이트 쿼리.
queryRunner − QueryRunner 개체는 데이터베이스의 직원 개체를 업데이트합니다.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 업데이트 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int updatedRecords = queryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,104);
System.out.println(updatedRecords + " record(s) updated.");
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
1 record(s) updated.
다음 예제는 DBUtils의 도움으로 쿼리 삭제를 사용하여 레코드를 삭제하는 방법을 보여줍니다. Employees Table에서 레코드를 삭제합니다.
통사론
삭제 쿼리 구문은 아래에 언급되어 있습니다.
String deleteQuery = "DELETE FROM employees WHERE id=?";
int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);
어디,
deleteQuery − 자리 표시자가있는 DELETE 쿼리.
queryRunner − QueryRunner 개체는 데이터베이스에서 직원 개체를 삭제합니다.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 삭제 쿼리를 실행하는 예제를 작성해 보겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
int deletedRecords = queryRunner.update(conn,
"DELETE from employees WHERE id=?", 104);
System.out.println(deletedRecords + " record(s) deleted.");
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
1 record(s) deleted.
그만큼 org.apache.commons.dbutils.QueryRunnerclass는 DBUtils 라이브러리의 중심 클래스입니다. ResultSet을 처리하기위한 플러그 형 전략으로 SQL 쿼리를 실행합니다. 이 클래스는 스레드로부터 안전합니다.
클래스 선언
다음은 org.apache.commons.dbutils.QueryRunner 클래스에 대한 선언입니다-
public class QueryRunner
extends AbstractQueryRunner
용법
Step 1 − 연결 개체를 생성합니다.
Step 2 − QueryRunner 개체 메서드를 사용하여 데이터베이스 작업을 수행합니다.
예
다음 예제는 QueryRunner 클래스를 사용하여 레코드를 읽는 방법을 보여줍니다. employee Table에서 사용 가능한 레코드 중 하나를 읽습니다.
통사론
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp =
queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
어디,
resultHandler − ResultSetHandler 객체는 결과 세트를 직원 객체에 매핑합니다.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE id=?", resultHandler, 103);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
ID: 103, Age: 28, First: Sumit, Last: Mittal
그만큼 org.apache.commons.dbutils.AsyncQueryRunner클래스는 비동기 지원으로 장기 실행 SQL 쿼리를 실행하는 데 도움이됩니다. 이 클래스는 스레드로부터 안전합니다. 이 클래스는 QueryRunner와 동일한 메서드를 지원하지만 나중에 결과를 검색하는 데 사용할 수있는 Callable 개체를 반환합니다.
클래스 선언
다음은 org.apache.commons.dbutils.AsyncQueryRunner 클래스에 대한 선언입니다-
public class AsyncQueryRunner
extends AbstractQueryRunner
용법
Step 1 − 연결 개체를 생성합니다.
Step 2 − AsyncQueryRunner 객체 메서드를 사용하여 데이터베이스 작업을 수행합니다.
예
다음 예제는 AsyncQueryRunner 클래스를 사용하여 레코드를 업데이트하는 방법을 보여줍니다. employee Table에서 사용 가능한 레코드 중 하나를 업데이트합니다.
통사론
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
어디,
updateQuery − 자리 표시자가있는 업데이트 쿼리.
asyncQueryRunner − 데이터베이스에서 직원 개체를 업데이트하는 asyncQueryRunner 개체.
future − 나중에 결과를 검색 할 미래 객체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 비동기 모드에서 업데이트 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.AsyncQueryRunner;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws
SQLException, InterruptedException,
ExecutionException, TimeoutException {
Connection conn = null;
AsyncQueryRunner asyncQueryRunner = new AsyncQueryRunner( Executors.newCachedThreadPool());
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
Future<Integer> future = null;
try {
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
Integer updatedRecords = future.get(10, TimeUnit.SECONDS);
System.out.println(updatedRecords + " record(s) updated.");
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
1 record(s) updated.
그만큼 org.apache.commons.dbutils.ResultSetHandler 인터페이스는 ResultSets를 객체로 변환하는 역할을합니다.
클래스 선언
다음은 org.apache.commons.dbutils.ResultSetHandler 클래스에 대한 선언입니다-
public interface ResultSetHandler<T>
용법
Step 1 − 연결 개체를 생성합니다.
Step 2 − ResultSetHandler의 구현을 생성합니다.
Step 3 − resultSetHandler를 QueryRunner 개체에 전달하고 데이터베이스 작업을 수행합니다.
예
다음 예제는 ResultSetHandler 클래스를 사용하여 레코드를 맵핑하는 방법을 보여줍니다. Employee Table에서 사용 가능한 레코드 중 하나를 읽습니다.
통사론
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
어디,
resultHandler − ResultSetHandler 객체는 결과 세트를 직원 객체에 매핑합니다.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Arrays;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Object[]> handler = new ResultSetHandler<Object[]>() {
public Object[] handle(ResultSet rs) throws SQLException {
if (!rs.next()) {
return null;
}
ResultSetMetaData meta = rs.getMetaData();
int cols = meta.getColumnCount();
Object[] result = new Object[cols];
for (int i = 0; i < cols; i++) {
result[i] = rs.getObject(i + 1);
}
return result;
}
};
try {
Object[] result = queryRunner.query(conn, "SELECT * FROM employees WHERE id=?",
handler, 103);
//Display values
System.out.print("Result: " + Arrays.toString(result));
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
Connecting to database...
Result: [103, 33, Sumit, Mittal]
그만큼 org.apache.commons.dbutils.BeanHandlerResultSetHandler 인터페이스의 구현이며 첫 번째 ResultSet 행을 JavaBean으로 변환합니다. 이 클래스는 스레드로부터 안전합니다.
클래스 선언
다음은 org.apache.commons.dbutils.BeanHandler 클래스에 대한 선언입니다-
public class BeanHandler<T>
extends Object implements ResultSetHandler<T>
용법
Step 1 − 연결 개체를 생성합니다.
Step 2 − ResultSetHandler의 구현을 BeanHandler 객체로 가져옵니다.
Step 3 − resultSetHandler를 QueryRunner 개체에 전달하고 데이터베이스 작업을 수행합니다.
예
다음 예제는 BeanHandler 클래스를 사용하여 레코드를 읽는 방법을 보여줍니다. Employees Table에서 사용 가능한 레코드 중 하나를 읽고 Employee 빈에 매핑합니다.
통사론
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
어디,
resultHandler − 결과 집합을 Employee 개체에 매핑하기위한 BeanHandler 개체.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle Employee Beans
ResultSetHandler<Employee> resultHandler
= new BeanHandler<Employee>(Employee.class);
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
ID: 103, Age: 28, First: Sumit, Last: Mittal
그만큼 org.apache.commons.dbutils.BeanListHandlerResultSetHandler 인터페이스의 구현이며 ResultSet 행을 Java Bean 목록으로 변환합니다. 이 클래스는 스레드로부터 안전합니다.
클래스 선언
다음은 org.apache.commons.dbutils.BeanListHandler 클래스에 대한 선언입니다-
public class BeanListHandler<T>
extends Object implements ResultSetHandler<List<T>>
용법
Step 1 − 연결 개체를 생성합니다.
Step 2 − ResultSetHandler의 구현을 BeanListHandler 객체로 가져옵니다.
Step 3 − resultSetHandler를 QueryRunner 개체에 전달하고 데이터베이스 작업을 수행합니다.
예
다음 예제는 BeanListHandler 클래스를 사용하여 레코드 목록을 읽는 방법을 보여줍니다. Employees 테이블에서 사용 가능한 레코드를 읽고이를 Employee Bean 목록에 매핑합니다.
통사론
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
어디,
resultHandler − Employee 객체 목록에 결과 세트를 매핑하는 BeanListHandler 객체.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
//Step 3: Create a ResultSet Handler to handle List of Employee Beans
ResultSetHandler<List<Employee>> resultHandler = new BeanListHandler<Employee>(Employee.class);
try {
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
for(Employee emp: empList ) {
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
그만큼 org.apache.commons.dbutils.ArrayListHandlerResultSetHandler 인터페이스의 구현이며 ResultSet 행을 object []로 변환합니다. 이 클래스는 스레드로부터 안전합니다.
클래스 선언
다음은 org.apache.commons.dbutils.ArrayListHandler 클래스에 대한 선언입니다-
public class ArrayListHandler
extends AbstractListHandler<Object[]>
용법
Step 1 − 연결 개체를 생성합니다.
Step 2 − ResultSetHandler의 구현을 ArrayListHandler 객체로 가져옵니다.
Step 3 − resultSetHandler를 QueryRunner 개체에 전달하고 데이터베이스 작업을 수행합니다.
예
다음 예제는 ArrayListHandler 클래스를 사용하여 레코드 목록을 읽는 방법을 보여줍니다. Employees 테이블의 사용 가능한 레코드를 object []로 읽습니다.
통사론
List<Object> result = queryRunner.query(conn, "SELECT * FROM employees", new ArrayListHandler());
어디,
resultHandler − 결과 세트를 객체 [] 목록에 매핑하는 ArrayListHandler 객체.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
List<Object[]> result = queryRunner.query(conn, "SELECT * FROM employees"
, new ArrayListHandler());
for(Object[] objects : result) {
System.out.println(Arrays.toString(objects));
}
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
[100, 18, Zara, Ali]
[101, 25, Mahnaz, Fatma]
[102, 30, Zaid, Khan]
[103, 28, Sumit, Mittal]
그만큼 org.apache.commons.dbutils.MapListHandlerResultSetHandler 인터페이스의 구현이며 ResultSet 행을 맵 목록으로 변환합니다. 이 클래스는 스레드로부터 안전합니다.
클래스 선언
다음은 org.apache.commons.dbutils.MapListHandler 클래스에 대한 선언입니다-
public class MapListHandler
extends AbstractListHandler<Map<String,Object>>
용법
Step 1 − 연결 개체를 생성합니다.
Step 2 − ResultSetHandler의 구현을 MapListHandler 객체로 가져옵니다.
Step 3 − resultSetHandler를 QueryRunner 개체에 전달하고 데이터베이스 작업을 수행합니다.
예
다음 예제는 MapListHandler 클래스를 사용하여 레코드 목록을 읽는 방법을 보여줍니다. Employees Table의 사용 가능한 레코드를 맵 목록으로 읽습니다.
통사론
List<Map<String, Object>> result = queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());
어디,
resultHandler − 결과 세트를 맵 목록에 매핑하는 MapListHandler 객체.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
//Step 1: Register JDBC driver
DbUtils.loadDriver(JDBC_DRIVER);
//Step 2: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
try {
List<Map<String, Object>> result = queryRunner.query(
conn, "SELECT * FROM employees", new MapListHandler());
System.out.println(result);
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
Connecting to database...
[{id=100, age=18, first=Zara, last=Ali},
{id=101, age=25, first=Mahnaz, last=Fatma},
{id=102, age=30, first=Zaid, last=Khan},
{id=103, age=33, first=Sumit, last=Mittal}]
ResultSetHandler 인터페이스를 구현하거나 기존의 ResultSetHandler 구현을 확장하여 자체 사용자 정의 처리기를 만들 수 있습니다. 아래의 예제에서는 BeanHandler 클래스를 확장하여 Custom Handler 인 EmployeeHandler를 생성했습니다.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
다음은의 내용입니다 EmployeeHandler.java 파일.
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class EmployeeHandler extends BeanHandler<Employee> {
public EmployeeHandler() {
super(Employee.class);
}
@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", employeeHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
ID: 103, Age: 28, Name: Sumit, Mittal
데이터베이스 테이블의 열 이름과 동등한 javabean 객체 이름이 유사하지 않은 경우 사용자 정의 된 BasicRowProcessor 객체를 사용하여 매핑 할 수 있습니다. 아래 예를 참조하십시오.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
다음은의 내용입니다 EmployeeHandler.java 파일.
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.BeanProcessor;
import org.apache.commons.dbutils.BasicRowProcessor;
public class EmployeeHandler extends BeanHandler<Employee> {
public EmployeeHandler() {
super(Employee.class, new BasicRowProcessor(new BeanProcessor(mapColumnsToFields())));
}
@Override
public Employee handle(ResultSet rs) throws SQLException {
Employee employee = super.handle(rs);
employee.setName(employee.getFirst() +", " + employee.getLast());
return employee;
}
public static Map<String, String> mapColumnsToFields() {
Map<String, String> columnsToFieldsMap = new HashMap<>();
columnsToFieldsMap.put("ID", "id");
columnsToFieldsMap.put("AGE", "age");
return columnsToFieldsMap;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public class MainApp {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
public static void main(String[] args) throws SQLException {
Connection conn = null;
QueryRunner queryRunner = new QueryRunner();
DbUtils.loadDriver(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
EmployeeHandler employeeHandler = new EmployeeHandler();
try {
Employee emp = queryRunner.query(conn,
"SELECT * FROM employees WHERE first=?", employeeHandler, "Sumit");
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", Name: " + emp.getName());
} finally {
DbUtils.close(conn);
}
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
ID: 103, Age: 28, Name: Sumit, Mittal
지금까지 QueryRunner를 사용하는 동안 연결 개체를 사용했습니다. 데이터 소스를 겉으로보기에도 사용할 수 있습니다. 다음 예제는 QueryRunner 및 데이터 소스의 도움으로 읽기 쿼리를 사용하여 레코드를 읽는 방법을 보여줍니다. Employees Table에서 레코드를 읽습니다.
통사론
QueryRunner queryRunner = new QueryRunner( dataSource );
Employee emp = queryRunner.query("SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
어디,
dataSource − DataSource 개체가 구성되었습니다.
resultHandler − ResultSetHandler 객체는 결과 세트를 직원 객체에 매핑합니다.
queryRunner − 데이터베이스에서 직원 개체를 읽는 QueryRunner 개체.
위에서 언급 한 DBUtils 관련 개념을 이해하기 위해 읽기 쿼리를 실행하는 예제를 작성하겠습니다. 예제를 작성하기 위해 샘플 애플리케이션을 만들어 보겠습니다.
단계 | 기술 |
---|---|
1 | DBUtils-First Application 장에서 생성 된 MainApp.java 파일을 업데이트합니다 . |
2 | 아래 설명 된대로 응용 프로그램을 컴파일하고 실행합니다. |
다음은의 내용입니다 Employee.java.
public class Employee {
private int id;
private int age;
private String first;
private String last;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public String getLast() {
return last;
}
public void setLast(String last) {
this.last = last;
}
}
다음은의 내용입니다 CustomDatasource.java.
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
public class CustomDataSource {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/emp";
// Database credentials
static final String USER = "root";
static final String PASS = "admin";
private static DataSource datasource;
private static final BasicDataSource basicDataSource;
static {
basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName(JDBC_DRIVER);
basicDataSource.setUsername(USER);
basicDataSource.setPassword(PASS);
basicDataSource.setUrl(DB_URL);
}
public static DataSource getInstance() {
return basicDataSource;
}
}
다음은의 내용입니다 MainApp.java 파일.
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
public class MainApp {
public static void main(String[] args) throws SQLException {
DbUtils.loadDriver(JDBC_DRIVER);
QueryRunner run = new QueryRunner(CustomDataSource.getInstance());
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query("SELECT * FROM employees WHERE id=?",
resultHandler, 103);
//Display values
System.out.print("ID: " + emp.getId());
System.out.print(", Age: " + emp.getAge());
System.out.print(", First: " + emp.getFirst());
System.out.println(", Last: " + emp.getLast());
}
}
소스 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.
ID: 103, Age: 33, First: Sumit, Last: Mittal