28、jdbc操作数据库(5)
生活随笔
收集整理的這篇文章主要介紹了
28、jdbc操作数据库(5)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
介紹一個稍微封裝了jdbc的工具類org.apache.commons.dbutils,使用dbutils可以簡化對數據庫操作程序的開發。
API介紹
接下來通過實例的方式說一下dbutils的具體使用
添加jar包:commons-dbutils-1.7.jar
增、刪、改
進行增、刪、改操作,在這里(未使用數據源)只需傳入數據庫連接、sql、占位符值到update方法中即可完成操作。代碼如下:
public static void main(String[] args) {//可以直接傳入一個數據源,這里不適用連接池做實例QueryRunner queryRunner = new QueryRunner();Connection connection = null;//進行增、刪、改操作,在這里只需傳入數據庫連接、sql、占位符值到update方法中即可完成操作try {connection = DBUtil.getConnection();//添加String sql1 = "INSERT INTO USER (uname,password) VALUES (? , ?)";Object []obj1= {"xiaopeng","123456"};int update1 = queryRunner.update(connection,sql1, obj1);System.out.println("添加成功:"+update1);//修改String sql2 = "UPDATE USER SET UNAME = ? WHERE ID = ?";Object []obj2 = {"xiaopeng",20005};int update2 = queryRunner.update(connection, sql2, obj2);System.out.println("修改成功:"+update2);//刪除String sql3 = "DELETE FROM USER WHERE ID = ?";int update3 = queryRunner.update(connection,sql3,20004);System.out.println("刪除成功:"+update3);} catch (SQLException e) {e.printStackTrace();}finally {if (connection != null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}} }查詢
使用dbutils進行查詢時,需要了解如下幾個類,他們用于將查詢結果進行封裝:
BeanListHandler:用于將結果集轉成一個List集合,其泛型可用戶自定義
public static void main(String[] args) {//可以直接傳入一個數據源,這里不適用連接池做實例QueryRunner queryRunner = new QueryRunner();Connection connection = null;connection = DBUtil.getConnection();String sql = "SELECT UNAME ,PASSWORD FROM USER LIMIT 3";try {List<User> list = queryRunner.query(connection, sql, new BeanListHandler<>(User.class));System.out.println(list);} catch (SQLException e) {e.printStackTrace();}}BeanHandler:用于將結果封裝成一個實體,用于返回一個結果的場景
public static void main(String[] args) {//可以直接傳入一個數據源,這里不適用連接池做實例QueryRunner queryRunner = new QueryRunner();Connection connection = null;connection = DBUtil.getConnection();String sql = "SELECT UNAME ,PASSWORD FROM USER WHERE ID = 4";try {//注意:這個地方一定要用實現類,否則容易報錯User user = queryRunner.query(connection, sql, new BeanHandler<>(User.class));System.out.println(user);} catch (SQLException e) {e.printStackTrace();} }MapHandler:用于將返回的一個結果集封裝成一個Map集合,用于返回一條結果集的場景
public static void main(String[] args) {//可以直接傳入一個數據源,這里不適用連接池做實例QueryRunner queryRunner = new QueryRunner();Connection connection = null;connection = DBUtil.getConnection();String sql = "SELECT UNAME ,PASSWORD FROM USER WHERE ID = 4";try {Map<String, Object> map = queryRunner.query(connection, sql, new MapHandler());System.out.println(map);} catch (SQLException e) {e.printStackTrace();} }MapListHandler:用于將返回的結果集封裝成一個List集合,每一條記錄信息封裝到一個Map集合中
public static void main(String[] args) {//可以直接傳入一個數據源,這里不適用連接池做實例QueryRunner queryRunner = new QueryRunner();Connection connection = null;connection = DBUtil.getConnection();String sql = "SELECT UNAME ,PASSWORD FROM USER LIMIT 10";try {List<Map<String, Object>> list = queryRunner.query(connection, sql, new MapListHandler());System.out.println(list);} catch (SQLException e) {e.printStackTrace();} }基本實現原理:這幾個封裝類都實現了ResultSetHandler接口,然后根據不同的類型對應實現ResultSetHandler接口中的handle方法以實現結果集的封裝,封裝時最終都調用的是類BeanProcessor中的方法,具體封裝過程可看源碼
public interface ResultSetHandler<T> {T handle(ResultSet rs) throws SQLException;}總結
以上是生活随笔為你收集整理的28、jdbc操作数据库(5)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英伟达发布 AI 系统 Eureka 可
- 下一篇: 29、jdbc操作数据库(6)