DBUtils講義和基本使用
第1章 properties配置檔案
1.1 使用properties配置檔案
開發中獲得連線的4個引數(驅動、URL、使用者名稱、密碼)通常都存在配置檔案中,方便後期維護,程式如果需要更換資料庫,只需要修改配置檔案即可。
通常情況下,我們習慣使用properties檔案,此檔案我們將做如下要求:
- 檔案位置:任意,建議src下
- 檔名稱:任意,副檔名為properties
- 檔案內容:一行一組資料,格式是“key=value”.
a) key命名自定義,如果是多個單詞,習慣使用點分隔。例如:jdbc.driver
b) value值不支援中文,如果需要使用非英文字元,將進行unicode轉換。
1.2 建立配置檔案
在專案跟目錄下,建立檔案,輸入“db.properties”檔名。
檔案中的內容
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
user=root
password=root
1.3 載入配置檔案:Properties物件
對應properties檔案處理,開發中也使用Properties物件進行。我們將採用載入properties檔案獲得流,然後使用Properties物件進行處理。
JDBCUtils.java中編寫程式碼
public class JDBCUtils { private static String driver; private static String url; private static String user; private static String password; // 靜態程式碼塊 static { try { // 1 使用Properties處理流 // 使用load()方法載入指定的流 Properties props = new Properties(); Reader is = new FileReader("db.properties"); props.load(is); // 2 使用getProperty(key),通過key獲得需要的值, driver = props.getProperty("driver"); url = props.getProperty("url"); user = props.getProperty("user"); password = props.getProperty("password"); } catch (Exception e) { throw new RuntimeException(e); } } /** * 獲得連線 */ public static Connection getConnection() { try { // 1 註冊驅動 Class.forName(driver); // 2 獲得連線 Connection conn = DriverManager.getConnection(url, user, password); return conn; } catch (Exception e) { throw new RuntimeException(e); } } }
1.4 使用JDBCUtils工具類
測試類
public class Demo { @Test public void insert(){ try{ //1,獲取連線物件 Connection conn = JDBCUtils.getConnection(); //2,指定要執行的SQL語句 String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)"; //4,獲取SQL語句的執行物件 PreparedStatement PreparedStatement ppstat = conn.prepareStatement(sql); //5,執行SQL語句 ppstat.setString(1, "股票收入"); ppstat.setDouble(2, 5000); ppstat.setString(3, "收入"); int line = ppstat.executeUpdate(); //6,處理結果集 System.out.println("line=" + line); //7,關閉連線 ppstat.close(); conn.close(); } catch(SQLException e){ throw new RuntimeException(e); } } }
第2章 DBUtils
如果只使用JDBC進行開發,我們會發現冗餘程式碼過多,為了簡化JDBC開發,本案例我們講採用apache commons元件一個成員:DBUtils。
DBUtils就是JDBC的簡化開發工具包。需要專案匯入commons-dbutils-1.6.jar才能夠正常使用DBUtils工具。
2.1 概述
DBUtils是java程式設計中的資料庫操作實用工具,小巧簡單實用。
DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少寫程式碼。
Dbutils三個核心功能介紹
QueryRunner中提供對sql語句操作的API.
ResultSetHandler介面,用於定義select操作後,怎樣封裝結果集.
DbUtils類,它就是一個工具類,定義了關閉資源與事務處理的方法
2.2 QueryRunner核心類
update(Connection conn, String sql, Object… params) ,用來完成表資料的增加、刪除、更新操作
query(Connection conn, String sql, ResultSetHandler rsh, Object… params) ,用來完成表資料的查詢操作
2.3 QueryRunner實現新增、更新、刪除操作
update(Connection conn, String sql, Object… params) ,用來完成表資料的增加、刪除、更新操作
2.3.1 新增
public void insert(){
try {
//獲取一個用來執行SQL語句的物件 QueryRunner
QueryRunner qr = new QueryRunner();
String sql = "INSERT INTO zhangwu(name,money,parent) VALUES(?,?,?)";
Object[] params = {"股票收入", 5500, "收入"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn,sql,params);// 用來完成表資料的增加、刪除、更新操作
//結果集處理
System.out.println("line = " + line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
2.3.2 更新
public void update(){
try {
//建立一個QueryRunner物件,用來完成SQL語句的執行
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "UPDATE zhangwu SET money = money+1000 WHERE name=?";
Object[] params = {"股票收入"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);
//結果集的處理
System.out.println("line="+line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
2.3.3 刪除
public void delete(){
try {
//建立一個QueryRunner物件,用來完成SQL語句的執行
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "DELETE FROM zhangwu WHERE name = ?";
Object[] params = {"股票收入"};
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);
//結果集的處理
System.out.println("line="+line);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
2.4 QueryRunner實現查詢操作
query(Connection conn, String sql, ResultSetHandler rsh, Object… params) ,用來完成表資料的查詢操作
2.4.1 ResultSetHandler結果集處理類
ArrayHandler 將結果集中的第一條記錄封裝到一個Object[]陣列中,陣列中的每一個元素就是這條記錄中的每一個欄位的值
ArrayListHandler 將結果集中的每一條記錄都封裝到一個Object[]陣列中,將這些陣列在封裝到List集合中。
BeanHandler 將結果集中第一條記錄封裝到一個指定的javaBean中。
BeanListHandler 將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中
ColumnListHandler 將結果集中指定的列的欄位值,封裝到一個List集合中
ScalarHandler 它是用於單資料。例如select count(*) from 表操作。
MapHandler 將結果集第一行封裝到Map集合中,Key 列名, Value 該列資料
MapListHandler 將結果集第一行封裝到Map集合中,Key 列名, Value 該列資料,Map集合儲存到List集合
2.4.2 JavaBean
JavaBean就是一個類,在開發中常用封裝資料。具有如下特性
- 需要實現介面:java.io.Serializable ,通常實現介面這步驟省略了,不會影響程式。
- 提供私有欄位:private 型別 欄位名;
- 提供getter/setter方法:
- 提供無參構造
/*
* 賬務類
*/
public class ZhangWu {
private int id;
private String name;
private double money;
private String parent;
public ZhangWu() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
@Override
public String toString() { //該方法可以省略
return "ZhangWu [id=" + id + ", name=" + name + ", money=" + money + ", parent=" + parent + "]";
}
}
2.4.3 ArrayHandler與ArrayListHandler查詢
ArrayHandler:將結果集中的第一條記錄封裝到一個Object[]陣列中,陣列中的每一個元素就是這條記錄中的每一個欄位的值
public class ArrayHandlerDemo {
@Test
public void method(){
try {
//獲取QueryRunner物件
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "SELECT * FROM zhangwu";
Object[] params = {};
Connection conn = JDBCUtils.getConnection();
Object[] objArray = qr.query(conn, sql, new ArrayHandler(), params);
//結果集的處理
System.out.println( Arrays.toString(objArray) );
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ArrayListHandler:將結果集中的每一條記錄都封裝到一個Object[]陣列中,將這些陣列在封裝到List集合中。
public class ArrayListHandlerDemo {
@Test
public void method(){
try {
//獲取QueryRunner物件
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "SELECT * FROM zhangwu WHERE money>?";
Object[] params = {2000};
Connection conn = JDBCUtils.getConnection();
List<Object[]> list = qr.query(conn, sql, new ArrayListHandler(), params);
//結果集的處理
for (Object[] objArray : list) {
System.out.println( Arrays.toString(objArray) );
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.4.4 BeanHandler與BeanListHandler查詢
BeanHandler :將結果集中第一條記錄封裝到一個指定的javaBean中。
public class BeanHandlerDemo {
@Test
public void method(){
try{
//獲取QueryRunner
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "SELECT * FROM zhangwu WHERE id=?";
Object[] params = {1};
Connection conn = JDBCUtils.getConnection();
ZhangWu zw = qr.query(conn, sql, new BeanHandler<ZhangWu>(ZhangWu.class), params);
//結果集處理
System.out.println(zw);
conn.close();
} catch(SQLException e){
throw new RuntimeException(e);
}
}
}
BeanListHandler :將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中
public class BeanListHandlerDemo {
@Test
public void method(){
try{
//獲取QueryRunner
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "SELECT * FROM zhangwu WHERE money>?";
Object[] params = {2000};
Connection conn = JDBCUtils.getConnection();
List<ZhangWu> list = qr.query(conn, sql, new BeanListHandler<ZhangWu>(ZhangWu.class), params);
//結果集處理
for (ZhangWu zw : list) {
System.out.println(zw);
}
conn.close();
} catch(SQLException e){
throw new RuntimeException(e);
}
}
}
2.4.5 ColumnListHandler與ScalarHandler查詢
ColumnListHandler:將結果集中指定的列的欄位值,封裝到一個List集合中
public class ColumnListHandlerDemo {
@Test
public void method(){
try {
//獲取QueryRunner物件
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "SELECT name FROM zhangwu WHERE money>?";
Object[] params = {2000};
Connection conn = JDBCUtils.getConnection();
List<String> list = qr.query(conn, sql, new ColumnListHandler<String>(), params);
//結果集的處理
for (String str : list) {
System.out.println(str);
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
ScalarHandler:它是用於單資料。例如select count(*) from 表操作。
public class ScalarHandlerDemo {
@Test
public void method(){
try {
//獲取QueryRunner物件
QueryRunner qr = new QueryRunner();
//執行SQL語句
String sql = "SELECT MAX(money) FROM zhangwu";
Object[] params = {};
Connection conn = JDBCUtils.getConnection();
Double max = qr.query(conn, sql, new ScalarHandler<Double>(), params);
//結果集的處理
System.out.println("max=" + max);
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
第3章 總結
DBUtils工具
作用:簡化JDBC的操作
常用類與方法
QueryRunner 用來執行SQL語句物件
update(Connection conn, String sql, Object… params) 插入表記錄、更新表記錄、刪除表記錄
query(Connection conn, String sql, ResultSetHandler handler, Object… params) 查詢表記錄
ResultSetHandler 處理結果集的物件
ArrayHandler 將結果集中的第一條記錄封裝到一個Object[]陣列中,陣列中的每一個元素就是這條記錄中的每一個欄位的值
ArrayListHandler 將結果集中的每一條記錄都封裝到一個Object[]陣列中,將這些陣列在封裝到List集合中。
BeanHandler 將結果集中第一條記錄封裝到一個指定的javaBean中。
BeanListHandler 將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中
ColumnListHandler 將結果集中指定的列的欄位值,封裝到一個List集合中
ScalarHandler 它是用於單資料。例如select count(*) from 表操作。
MapHandler 將結果集第一行封裝到Map集合中,Key 列名, Value 該列資料
MapListHandler 將結果集第一行封裝到Map集合中,Key 列名, Value 該列資料,Map集合儲存到List集合