Apache Commons DBUtils - Szybki przewodnik
Biblioteka Apache Commons DbUtils to dość mały zestaw klas, które mają na celu ułatwienie przetwarzania wywołań JDBC bez wycieku zasobów i uzyskanie czystszego kodu. Ponieważ czyszczenie zasobów JDBC jest dość żmudne i podatne na błędy, klasy DBUtils pomagają wyodrębnić kod stały, dzięki czemu programiści mogą skupić się tylko na operacjach związanych z bazą danych.
Zalety DBUtils
Zalety korzystania z Apache Commons DBUtils są wyjaśnione poniżej -
No Resource Leakage - Klasy DBUtils zapewniają, że nie nastąpi wyciek zasobów.
Clean & Clear code - Klasy DBUtils zapewniają czysty i przejrzysty kod do wykonywania operacji na bazie danych bez konieczności pisania kodu czyszczenia lub zapobiegania wyciekom zasobów.
Bean Mapping - Klasa DBUtils obsługuje automatyczne wypełnianie javabean z zestawu wyników.
Zasady projektowania DBUtils
Zasady projektowania Apache Commons DBUtils są następujące -
Small - Biblioteka DBUtils ma bardzo mały rozmiar z mniejszą liczbą klas, dzięki czemu jest łatwa do zrozumienia i użycia.
Transparent- Biblioteka DBUtils nie wykonuje zbyt wiele pracy za kulisami. Po prostu pobiera zapytanie i wykonuje.
Fast - Klasy biblioteki DBUtils nie tworzą wielu obiektów w tle i są dość szybkie w wykonywaniu operacji na bazie danych.
Aby rozpocząć programowanie z DBUtils, powinieneś skonfigurować swoje środowisko DBUtils, wykonując poniższe kroki. Zakładamy, że pracujesz na platformie Windows.
Zainstaluj Javę
Zainstaluj pakiet J2SE Development Kit 5.0 (JDK 5.0) z oficjalnej witryny Java .
Upewnij się, że następujące zmienne środowiskowe są ustawione zgodnie z opisem poniżej -
JAVA_HOME - Ta zmienna środowiskowa powinna wskazywać katalog, w którym zainstalowano pakiet JDK, np. C: \ Program Files \ Java \ jdk1.5.0.
CLASSPATH - Ta zmienna środowiskowa powinna mieć ustawione odpowiednie ścieżki, np. C: \ Program Files \ Java \ jdk1.5.0_20 \ jre \ lib.
PATH - Ta zmienna środowiskowa powinna wskazywać na odpowiedni bin JRE, np. C: \ Program Files \ Java \ jre1.5.0_20 \ bin.
Możliwe, że masz już ustawione te zmienne, ale tylko po to, aby upewnić się, jak to sprawdzić.
Przejdź do panelu sterowania i kliknij dwukrotnie System. Jeśli jesteś użytkownikiem systemu Windows XP, możliwe, że będziesz musiał otworzyć Wydajność i konserwację, zanim zobaczysz ikonę System.
Przejdź do zakładki Zaawansowane i kliknij Zmienne środowiskowe.
Teraz sprawdź, czy wszystkie wyżej wymienione zmienne są ustawione poprawnie.
Zainstaluj bazę danych
Najważniejszą rzeczą, której będziesz potrzebować, jest oczywiście faktycznie działająca baza danych z tabelą, którą możesz przeszukiwać i modyfikować.
Zainstaluj najbardziej odpowiednią dla siebie bazę danych. Możesz mieć wiele możliwości wyboru, a najczęściej są to -
MySQL DB:MySQL to baza danych typu open source. Możesz go pobrać z oficjalnej strony MySQL . Zalecamy pobranie pełnej instalacji systemu Windows.
Ponadto pobierz i zainstaluj MySQL Administrator oraz MySQL Query Browser . Są to narzędzia oparte na graficznym interfejsie użytkownika, które znacznie ułatwią programowanie.
Na koniec pobierz i rozpakuj MySQL Connector / J (sterownik MySQL JDBC) w wygodnym katalogu. Na potrzeby tego samouczka założymy, że zainstalowałeś sterownik w C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8.
W związku z tym ustaw zmienną CLASSPATH na C: \ Program Files \ MySQL \ mysql-connector-java-5.1.8 \ mysql-connector-java-5.1.8-bin.jar. Twoja wersja sterownika może się różnić w zależności od instalacji.
PostgreSQL DB:PostgreSQL to baza danych typu open source. Możesz go pobrać z oficjalnej strony PostgreSQL .
Instalacja Postgres zawiera oparte na GUI narzędzie administracyjne o nazwie pgAdmin III. W ramach instalacji uwzględnione są również sterowniki JDBC.
Oracle DB- Oracle DB to komercyjna baza danych sprzedawana przez Oracle. Zakładamy, że masz niezbędne nośniki dystrybucyjne, aby go zainstalować.
Instalacja Oracle obejmuje oparte na graficznym interfejsie narzędzie administracyjne o nazwie Enterprise Manager. Częścią instalacji są także sterowniki JDBC.
Zainstaluj sterowniki bazy danych
Najnowszy pakiet JDK zawiera sterownik mostu JDBC-ODBC, który udostępnia większość sterowników Open Database Connectivity (ODBC) programistom korzystającym z interfejsu JDBC API.
Obecnie większość dostawców baz danych dostarcza odpowiednie sterowniki JDBC wraz z instalacją bazy danych. Więc nie powinieneś się martwić o tę część.
Ustaw poświadczenia bazy danych
W tym samouczku będziemy używać bazy danych MySQL. Podczas instalowania dowolnej z powyższych baz danych jej identyfikator administratora jest ustawiony naroot i daje możliwość ustawienia wybranego hasła.
Korzystając z identyfikatora użytkownika i hasła użytkownika root, można utworzyć inny identyfikator użytkownika i hasło lub użyć identyfikatora użytkownika root i hasła do aplikacji JDBC.
Istnieją różne operacje na bazie danych, takie jak tworzenie i usuwanie bazy danych, które wymagają identyfikatora administratora i hasła.
W pozostałej części samouczka JDBC będziemy używać bazy danych MySQL z username jako ID i password jako hasło.
Jeśli nie masz wystarczających uprawnień do tworzenia nowych użytkowników, możesz poprosić administratora bazy danych (DBA) o utworzenie identyfikatora użytkownika i hasła.
Utwórz bazę danych
Aby utworzyć emp bazy danych, wykonaj następujące kroki -
Krok 1
Otwórz Command Prompt i przejdź do katalogu instalacyjnego w następujący sposób -
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
Note: Droga do mysqld.exemoże się różnić w zależności od lokalizacji instalacji MySQL w systemie. Możesz również zapoznać się z dokumentacją dotyczącą uruchamiania i zatrzymywania serwera bazy danych.
Krok 2
Uruchom serwer bazy danych, wykonując następującą komendę, jeśli jeszcze nie jest uruchomiony.
C:\Program Files\MySQL\bin>mysqld
C:\Program Files\MySQL\bin>
Krok 3
Utwórz plik emp baza danych, wykonując następujące polecenie -
C:\Program Files\MySQL\bin> mysqladmin create emp -u root -p
Enter password: ********
C:\Program Files\MySQL\bin>
Utwórz tabelę
Aby utworzyć Employees tabeli w bazie danych emp, wykonaj następujące czynności -
Krok 1
Otwórz Command Prompt i przejdź do katalogu instalacyjnego w następujący sposób -
C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>
Krok 2
Zaloguj się do bazy danych w następujący sposób -
C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>
Krok 3
Utwórz tabelę Employee w następujący sposób -
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>
Utwórz rekordy danych
Na koniec tworzysz kilka rekordów w tabeli Employee w następujący sposób -
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>
Aby uzyskać pełne zrozumienie bazy danych MySQL, zapoznaj się z samouczkiem MySQL .
Pobierz Commons DBUtils Archive
Pobierz najnowszą wersję pliku jar Apache Common DBUtils z commons-dbutils-1.7-bin.zip , łącznik MySql mysql-connector-java-5.1.28-bin.jar , Apache Commons DBCP commons-dbcp2-2.1.1-bin. zip , Apache Commons Pool commons-pool2-2.4.3-bin.zip oraz Apache Commons Logging commons-logging-1.2-bin.zip . W chwili pisania tego samouczka pobraliśmy 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 i skopiowałem go do folderu C: \> Apache.
OS | Nazwa archiwum |
---|---|
Windows | commons-dbutils-1.7-bin.zip |
Linux | commons-dbutils-1.7-bin.tar.gz |
Prochowiec | commons-dbutils-1.7-bin.tar.gz |
Ustaw środowisko Apache Common DBUtils
Ustaw APACHE_HOMEzmienną środowiskową, aby wskazywała lokalizację katalogu podstawowego, w którym na komputerze jest przechowywany plik Apache jar. Zakładając, że wyodrębniliśmy plik commons-dbutils-1.7-bin.zip do folderu Apache w różnych systemach operacyjnych w następujący sposób.
OS | Wynik |
---|---|
Windows | Ustaw zmienną środowiskową APACHE_HOME na C: \ Apache |
Linux | eksportuj APACHE_HOME = / usr / local / Apache |
Prochowiec | eksportuj APACHE_HOME = / Library / Apache |
Ustaw zmienną CLASSPATH
Ustaw CLASSPATHzmienna środowiskowa, aby wskazywała lokalizację pliku jar Common IO. Zakładając, że przechowujesz commons-dbutils-1.7-bin.zip w folderze Apache w różnych systemach operacyjnych w następujący sposób.
OS | Wynik |
---|---|
Windows | Ustaw zmienną środowiskową CLASSPATH na% 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; |
Linux | eksportuj CLASSPATH =$CLASSPATH:$KATALOG_GŁÓWNY_APACHE / 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. |
Prochowiec | eksportuj CLASSPATH =$CLASSPATH:$KATALOG_GŁÓWNY_APACHU / 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. |
Teraz możesz zacząć eksperymentować z DBUtils. Następny rozdział zawiera przykładowy przykład programowania w DBUtils.
W tym rozdziale przedstawiono przykład tworzenia prostej aplikacji JDBC przy użyciu biblioteki DBUtils. To pokaże ci, jak otworzyć połączenie z bazą danych, wykonać zapytanie SQL i wyświetlić wyniki.
Wszystkie kroki wymienione w tym przykładzie szablonu zostaną wyjaśnione w kolejnych rozdziałach tego samouczka.
Tworzenie aplikacji JDBC
Tworzenie aplikacji JDBC obejmuje sześć kroków -
Import the packages- Wymaga dołączenia pakietów zawierających klasy JDBC, które są potrzebne do programowania bazy danych. Najczęściej przy użyciuimport java.sql.* wystarczy.
Register the JDBC driver - Wymaga zainicjowania sterownika, aby można było otworzyć kanał komunikacyjny z bazą danych.
Open a connection - Wymaga korzystania z DriverManager.getConnection() metody, aby utworzyć obiekt Connection, który reprezentuje fizyczne połączenie z bazą danych.
Execute a query - Wymaga użycia obiektu typu Statement do zbudowania i przesłania instrukcji SQL do bazy danych.
Extract data from result set - Wymaga użycia odpowiedniego ResultSet.getXXX() metoda pobierania danych z zestawu wyników.
Clean up the environment - Wymaga jawnego zamknięcia wszystkich zasobów bazy danych zamiast polegania na usuwaniu elementów bezużytecznych maszyny JVM.
Przykładowy kod
Ten przykładowy przykład może służyć jako szablon, gdy będziesz musiał w przyszłości utworzyć własną aplikację JDBC.
Ten przykładowy kod został napisany na podstawie ustawień środowiska i bazy danych opisanych w poprzednim rozdziale.
Skopiuj i wklej następujący przykład do pliku MainApp.java, skompiluj i uruchom w następujący sposób -
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
Program jest podany poniżej -
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;
}
}
Teraz skompilujmy powyższy przykład w następujący sposób -
C:\>javac MainApp.java Employee.java
C:\>
Kiedy biegasz MainApp, daje następujący wynik -
C:\>java MainApp
Connecting to database...
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>
Poniższy przykład pokaże, jak utworzyć rekord za pomocą zapytania Wstawianie za pomocą DBUtils. Wstawimy rekord w tabeli pracowników.
Składnia
Składnia służąca do tworzenia zapytania jest podana poniżej -
String insertQuery ="INSERT INTO employees(id,age,first,last) VALUES (?,?,?,?)";
int insertedRecords = queryRunner.update(conn, insertQuery,104,30, "Sohan","Kumar");
Gdzie,
insertQuery - Wstaw zapytanie zawierające symbole zastępcze.
queryRunner - Obiekt QueryRunner do wstawiania obiektu pracownika do bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie wstawiające. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat -
1 record(s) inserted.
Poniższy przykład pokaże, jak odczytać rekord za pomocą zapytania Read z pomocą DBUtils. Odczytamy rekord z Tabeli Pracowników.
Składnia
Składnia zapytania do odczytu jest wymieniona poniżej -
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Gdzie,
resultHandler - obiekt ResultSetHandler, aby zamapować zestaw wyników na obiekt Employee.
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć wspomniane wyżej pojęcia związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wyświetli następujący komunikat:
ID: 104, Age: 30, First: Sohan, Last: Kumar
Poniższy przykład pokaże, jak zaktualizować rekord za pomocą zapytania Update z pomocą DBUtils. Zaktualizujemy rekord w tabeli pracowników.
Składnia
Składnia zapytania aktualizacyjnego jest następująca -
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
int updatedRecords = queryRunner.update(conn, updateQuery, 33,104);
Gdzie,
updateQuery - Zaktualizuj zapytanie zawierające symbole zastępcze.
queryRunner - Obiekt QueryRunner do aktualizacji obiektu pracownika w bazie danych.
Aby zrozumieć wspomniane powyżej koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie aktualizacyjne. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat -
1 record(s) updated.
Poniższy przykład pokaże, jak usunąć rekord za pomocą zapytania Delete przy pomocy DBUtils. Usuniemy rekord w Tabeli pracowników.
Składnia
Składnia zapytania o usunięcie jest wymieniona poniżej -
String deleteQuery = "DELETE FROM employees WHERE id=?";
int deletedRecords = queryRunner.delete(conn, deleteQuery, 33,104);
Gdzie,
deleteQuery - USUŃ zapytanie zawierające symbole zastępcze.
queryRunner - Obiekt QueryRunner do usuwania obiektu pracownika w bazie danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie usuwające. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat -
1 record(s) deleted.
Plik org.apache.commons.dbutils.QueryRunnerclass jest klasą centralną w bibliotece DBUtils. Wykonuje zapytania SQL z dołączanymi strategiami obsługi zestawów wyników. Ta klasa jest bezpieczna wątkowo.
Deklaracja klasy
Poniżej znajduje się deklaracja klasy org.apache.commons.dbutils.QueryRunner -
public class QueryRunner
extends AbstractQueryRunner
Stosowanie
Step 1 - Utwórz obiekt połączenia.
Step 2 - Użyj metod obiektów QueryRunner, aby wykonać operacje na bazie danych.
Przykład
Poniższy przykład pokaże, jak odczytać rekord przy użyciu klasy QueryRunner. Przeczytamy jeden z dostępnych rekordów w Tabeli pracowników.
Składnia
ResultSetHandler<Employee> resultHandler = new BeanHandler<Employee>(Employee.class);
Employee emp =
queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Gdzie,
resultHandler - Obiekt ResultSetHandler do odwzorowania zestawu wyników na obiekt pracownika.
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
ID: 103, Age: 28, First: Sumit, Last: Mittal
Plik org.apache.commons.dbutils.AsyncQueryRunnerclass pomaga wykonywać długo działające zapytania SQL z obsługą async. Ta klasa jest bezpieczna wątkowo. Ta klasa obsługuje te same metody, co QueryRunner, ale zwraca obiekty Callable, których można później użyć do pobrania wyniku.
Deklaracja klasy
Poniżej znajduje się deklaracja klasy org.apache.commons.dbutils.AsyncQueryRunner -
public class AsyncQueryRunner
extends AbstractQueryRunner
Stosowanie
Step 1 - Utwórz obiekt połączenia.
Step 2 - Użyj metod obiektu AsyncQueryRunner, aby wykonać operacje na bazie danych.
Przykład
Poniższy przykład pokaże, jak zaktualizować rekord przy użyciu klasy AsyncQueryRunner. Zaktualizujemy jeden z dostępnych rekordów w tabeli pracowników.
Składnia
String updateQuery = "UPDATE employees SET age=? WHERE id=?";
future = asyncQueryRunner.update(conn,
"UPDATE employees SET age=? WHERE id=?", 33,103);
Gdzie,
updateQuery - Zaktualizuj zapytanie zawierające symbole zastępcze.
asyncQueryRunner - obiekt asyncQueryRunner do aktualizacji obiektu pracownika w bazie danych.
future - Przyszły obiekt do późniejszego pobrania wyniku.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie aktualizujące w trybie asynchronicznym. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
1 record(s) updated.
Plik org.apache.commons.dbutils.ResultSetHandler interfejs jest odpowiedzialny za konwersję zestawów wyników do obiektów.
Deklaracja klasy
Poniżej znajduje się deklaracja klasy org.apache.commons.dbutils.ResultSetHandler -
public interface ResultSetHandler<T>
Stosowanie
Step 1 - Utwórz obiekt połączenia.
Step 2 - Utwórz implementację ResultSetHandler.
Step 3 - Przekaż resultSetHandler do obiektu QueryRunner i wykonaj operacje na bazie danych.
Przykład
Poniższy przykład pokaże, jak mapować rekord przy użyciu klasy ResultSetHandler. Przeczytamy jeden z dostępnych rekordów w Tabeli pracowników.
Składnia
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Gdzie,
resultHandler - Obiekt ResultSetHandler do odwzorowania zestawu wyników na obiekt pracownika.
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
Connecting to database...
Result: [103, 33, Sumit, Mittal]
Plik org.apache.commons.dbutils.BeanHandlerjest implementacją interfejsu ResultSetHandler i odpowiada za konwersję pierwszego wiersza ResultSet do JavaBean. Ta klasa jest bezpieczna wątkowo.
Deklaracja klasy
Poniżej znajduje się deklaracja klasy org.apache.commons.dbutils.BeanHandler -
public class BeanHandler<T>
extends Object implements ResultSetHandler<T>
Stosowanie
Step 1 - Utwórz obiekt połączenia.
Step 2 - Uzyskaj implementację ResultSetHandler jako obiektu BeanHandler.
Step 3 - Przekaż resultSetHandler do obiektu QueryRunner i wykonaj operacje na bazie danych.
Przykład
Poniższy przykład pokaże, jak odczytać rekord przy użyciu klasy BeanHandler. Odczytujemy jeden z dostępnych rekordów w tabeli pracowników i zamapujemy go na ziarno pracownika.
Składnia
Employee emp = queryRunner.query(conn, "SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Gdzie,
resultHandler - Obiekt BeanHandler w celu odwzorowania zestawu wyników na obiekt pracownika.
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
ID: 103, Age: 28, First: Sumit, Last: Mittal
Plik org.apache.commons.dbutils.BeanListHandlerjest implementacją interfejsu ResultSetHandler i jest odpowiedzialna za konwersję wierszy ResultSet do listy Java Bean. Ta klasa jest bezpieczna wątkowo.
Deklaracja klasy
Poniżej znajduje się deklaracja klasy org.apache.commons.dbutils.BeanListHandler -
public class BeanListHandler<T>
extends Object implements ResultSetHandler<List<T>>
Stosowanie
Step 1 - Utwórz obiekt połączenia.
Step 2 - Uzyskaj implementację ResultSetHandler jako obiektu BeanListHandler.
Step 3 - Przekaż resultSetHandler do obiektu QueryRunner i wykonaj operacje na bazie danych.
Przykład
Poniższy przykład pokaże, jak czytać listę rekordów przy użyciu klasy BeanListHandler. Odczytujemy dostępne rekordy w tabeli Employees i zmapujemy je na listę fasoli Employee.
Składnia
List<Employee> empList = queryRunner.query(conn, "SELECT * FROM employees", resultHandler);
Gdzie,
resultHandler - Obiekt BeanListHandler do mapowania zestawów wyników na listę obiektów pracownika.
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
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
Plik org.apache.commons.dbutils.ArrayListHandlerjest implementacją interfejsu ResultSetHandler i odpowiada za konwersję wierszy ResultSet na obiekt []. Ta klasa jest bezpieczna wątkowo.
Deklaracja klasy
Poniżej znajduje się deklaracja klasy org.apache.commons.dbutils.ArrayListHandler -
public class ArrayListHandler
extends AbstractListHandler<Object[]>
Stosowanie
Step 1 - Utwórz obiekt połączenia.
Step 2 - Pobierz implementację ResultSetHandler jako obiektu ArrayListHandler.
Step 3 - Przekaż resultSetHandler do obiektu QueryRunner i wykonaj operacje na bazie danych.
Przykład
Poniższy przykład pokaże, jak odczytać listę rekordów przy użyciu klasy ArrayListHandler. Odczytujemy dostępne rekordy w tabeli pracowników jako obiekt [].
Składnia
List<Object> result = queryRunner.query(conn, "SELECT * FROM employees", new ArrayListHandler());
Gdzie,
resultHandler - Obiekt ArrayListHandler w celu odwzorowania zestawów wyników na listę obiektu [].
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
[100, 18, Zara, Ali]
[101, 25, Mahnaz, Fatma]
[102, 30, Zaid, Khan]
[103, 28, Sumit, Mittal]
Plik org.apache.commons.dbutils.MapListHandlerjest implementacją interfejsu ResultSetHandler i jest odpowiedzialna za konwersję wierszy ResultSet do listy map. Ta klasa jest bezpieczna wątkowo.
Deklaracja klasy
Poniżej znajduje się deklaracja klasy org.apache.commons.dbutils.MapListHandler -
public class MapListHandler
extends AbstractListHandler<Map<String,Object>>
Stosowanie
Step 1 - Utwórz obiekt połączenia.
Step 2 - Uzyskaj implementację ResultSetHandler jako obiektu MapListHandler.
Step 3 - Przekaż resultSetHandler do obiektu QueryRunner i wykonaj operacje na bazie danych.
Przykład
Poniższy przykład pokaże, jak odczytać listę rekordów przy użyciu klasy MapListHandler. Odczytujemy dostępne rekordy w Tabeli Pracowników jako listę map.
Składnia
List<Map<String, Object>> result = queryRunner.query(conn, "SELECT * FROM employees", new MapListHandler());
Gdzie,
resultHandler - Obiekt MapListHandler do mapowania zestawów wyników na listę map.
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
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}]
Możemy stworzyć własną niestandardową procedurę obsługi, implementując interfejs ResultSetHandler lub rozszerzając którąkolwiek z istniejących implementacji ResultSetHandler. W poniższym przykładzie utworzyliśmy Custom Handler, EmployeeHandler, rozszerzając klasę BeanHandler.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość EmployeeHandler.java plik.
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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
ID: 103, Age: 28, Name: Sumit, Mittal
W przypadku, gdy nazwy kolumn w tabeli bazy danych i odpowiadające im nazwy obiektów javabean nie są podobne, możemy je odwzorować za pomocą dostosowanego obiektu BasicRowProcessor. Zobacz poniższy przykład.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość EmployeeHandler.java plik.
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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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);
}
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
ID: 103, Age: 28, Name: Sumit, Mittal
Do tej pory używaliśmy obiektu connection podczas korzystania z QueryRunner. Możemy również pozornie używać źródła danych. Poniższy przykład pokaże, jak odczytać rekord za pomocą zapytania Read z pomocą QueryRunner i źródła danych. Odczytamy rekord z Tabeli Pracowników.
Składnia
QueryRunner queryRunner = new QueryRunner( dataSource );
Employee emp = queryRunner.query("SELECT * FROM employees WHERE first=?", resultHandler, "Sumit");
Gdzie,
dataSource - Skonfigurowano obiekt DataSource.
resultHandler - Obiekt ResultSetHandler do odwzorowania zestawu wyników na obiekt pracownika.
queryRunner - Obiekt QueryRunner do odczytu obiektu pracownika z bazy danych.
Aby zrozumieć powyższe koncepcje związane z DBUtils, napiszmy przykład, który uruchomi zapytanie odczytu. Aby napisać nasz przykład, stwórzmy przykładową aplikację.
Krok | Opis |
---|---|
1 | Zaktualizuj plik MainApp.java utworzony w rozdziale DBUtils - Pierwsza aplikacja . |
2 | Skompiluj i uruchom aplikację, jak wyjaśniono poniżej. |
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość 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;
}
}
Poniżej znajduje się zawartość MainApp.java plik.
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());
}
}
Po utworzeniu plików źródłowych uruchom aplikację. Jeśli wszystko jest w porządku z Twoją aplikacją, wydrukuje następujący komunikat.
ID: 103, Age: 33, First: Sumit, Last: Mittal