QueryRunner使用
在相繼學(xué)習(xí)了JDBC和數(shù)據(jù)庫(kù)操作之后,我們明顯感到編寫(xiě)JDBC代碼并非一件輕松的事兒。為了幫助我們更高效的學(xué)習(xí)工作,從JDBC的繁重代碼中解脫出來(lái),老佟給我們?cè)敱M介紹了一個(gè)簡(jiǎn)化JDBC操作的組件——DBUtils。我們今天主要學(xué)習(xí)了它所提供的兩個(gè)類(lèi)和一個(gè)接口。
組件下載地址:http://commons.apache.org/dbutils/
DbUtils類(lèi)(org.apache.commons.dbutils.DbUtils)主要負(fù)責(zé)裝載驅(qū)動(dòng)、關(guān)閉連接的常規(guī)工作。
1.???????close: 檢查所提供的參數(shù)是不是NULL,如果不是的話,它們就關(guān)閉連接、聲明和結(jié)果集。
2.???????CloseQuietly:避免連接、聲明或結(jié)果集為NULL的情況被關(guān)閉。
3.???????CommitAndCloseQuietly(Connection conn):用來(lái)提交連接,然后關(guān)閉連接,并且在關(guān)閉連接時(shí)不向上拋出在關(guān)閉時(shí)發(fā)生的一些SQL異常。
4.???????LoadDriver(String driveClassName): 裝載并注冊(cè)JDBC驅(qū)動(dòng)程序,如果成功就返回TRUE。
QreryRunner類(lèi)(org.apache.commons.dbutils.QueryRunner) 顯著的簡(jiǎn)化了SQL查詢,并與ResultSetHandler協(xié)同工作將使編碼量大為減少。
1.???????query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):執(zhí)行選擇查詢,在查詢中,對(duì)象陣列的值被用來(lái)作為查詢的置換參數(shù)。
2.???????query(String sql, Object[] params, ResultSetHandler rsh):方法本身不提供數(shù)據(jù)庫(kù)連接,執(zhí)行選擇查詢,在查詢中,對(duì)象陣列的值被用來(lái)作為查詢的置換參數(shù)。
3.???????query(Connection conn, String sql, ResultSetHandler rsh):執(zhí)行無(wú)需參數(shù)的選擇查詢。
4.???????update(Connection conn, String sql, Object[] params):被用來(lái)執(zhí)行插入、更新或刪除(DML)操作。
ResultSetHandler接口(org.apache.commons.dbutils.ResultSethandler)執(zhí)行處理一個(gè)結(jié)果集對(duì)象,將數(shù)據(jù)轉(zhuǎn)變并處理為任何一種形式,供其他應(yīng)用使用。
1.???????Object handle (java.sql.ResultSet .rs) :結(jié)果集(ResultSet)作為參數(shù)傳入方法內(nèi),處理這個(gè)結(jié)果集,返回一個(gè)對(duì)象。
ArrayHandler
ArrayListHandler
BeanHandler
BeanListHandler
MapHandler
MapListHandler
ScalarHandler
我們學(xué)習(xí)了此組件的兩個(gè)類(lèi)和一個(gè)接口以后,寫(xiě)了下列代碼供參考。
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
public class TestQueryRunner {
?????????public static void main(String[] args) throws SQLException {
???????????????????// TODO Auto-generated method stub
???????????????????//queryOracle();
???????????????????update();
?????????}
????????
?????????private static void update() throws SQLException{
???????????????????QueryRunner runner = new QueryRunner();
???????????????????Connection conn = DBManager.getConnection();
???????????????????//刪除非 manager 中工資 低于 5000 的員工
???????????????????String sql = "UPDATE examstudent SET student_name = ? WHERE flow_id = ?";
???????????????????Object [] params = new Object[]{"Jerry", 5000};
??????????????????
???????????????????runner.update(conn, sql, params);
?????????}
????????
?????????private static void insert() throws SQLException{
???????????????????QueryRunner runner = new QueryRunner();
???????????????????Connection conn = DBManager.getConnection();
???????????????????//刪除非 manager 中工資 低于 5000 的員工
?????????????????String sql = "INSERT INTO examstudent(flow_id, type, id_card, exam_card, student_name, location, grade) VALUES(?, ?, ?, ?, ?, ?, ?)";
???????????????????Object [] params = new Object[]{5000, 6, "身份證", "準(zhǔn)考證", "Tom", "北京", 99};
??????????????????
???????????????????runner.update(conn, sql, params);
?????????}
????????
?????????private static void delete() throws SQLException{
???????????????????QueryRunner runner = new QueryRunner();
???????????????????Connection conn = DBManager.getConnection();
???????????????????//刪除非 manager 中工資 低于 5000 的員工
???????????????????String sql = "delete from employees " +
????????????????????????????????????????????????"where employee_id not in " +
????????????????????????????????????????????????"?????(select distinct d.manager_id from departments d where d.manager_id is not null) " +
????????????????????????????????????????????????"and salary < ?";
???????????????????System.out.println(sql);
???????????????????Object [] params = new Object[]{5000};
??????????????????
???????????????????runner.update(conn, sql, params);
?????????}
????????
?????????private static void queryOracle() throws SQLException{
???????????????????QueryRunner runner = new QueryRunner();
???????????????????Connection conn = DBManager.getConnection();
???????????????????//oracle 中的別名可以別解析
???????????????????String sql = "SELECT flow_id flowid, type, id_card idcard, exam_card examcard, student_name studentname, location, grade FROM examstudent";
???????????????????Object obj = runner.query(conn, sql, new BeanListHandler(ExamStudent.class));
???????????????????System.out.println(obj);
?????????}
?????????private static void query() throws SQLException {
???????????????????//1. 創(chuàng)建一個(gè) QueryRunner 的實(shí)例
???????????????????QueryRunner runner = new QueryRunner();
??????????????????
??????????????????
???????????????????Connection conn = DBManager.getConnection();
???????????????????String sql = "SELECT id, name, address, phone FROM customers WHERE name LIKE ?";
???????????????????Class type = Customer.class;
???????????????????Object [] params = new Object[]{"%%"};
??????????????????
???????????????????//2. 查詢操作
???????????????????//conn: 查詢需要的數(shù)據(jù)庫(kù)連接, sql: 查詢使用的 sql 語(yǔ)句, rsh: 如何轉(zhuǎn)換查詢得到的結(jié)果集, params: 填補(bǔ) sql 語(yǔ)句參數(shù)的數(shù)組
???????????????????Object obj = runner.query(conn, sql, new BeanListHandler(type), params);
???????????????????//System.out.println("^^" + obj);
??????????????????
???????????????????sql = "SELECT flow_id flowid, type, id_card idcard, exam_card examcard, student_name studentname, location, grade FROM examstudent";
???????????????????type = ExamStudent.class;
??????????????????
???????????????????obj = runner.query(conn, sql, new BeanListHandler(ExamStudent.class));
???????????????????System.out.println(obj);
???????????????????}
}
總結(jié)
以上是生活随笔為你收集整理的QueryRunner使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DOM解析器
- 下一篇: 关于级联删除和级联修改