日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

29、jdbc操作数据库(6)

發布時間:2023/12/3 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 29、jdbc操作数据库(6) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通常真正實際開發時,dao層雖然會涉及很多實體,但是可以借助泛型、反射、一些簡單工具類來封裝一些通用的查詢、更新等操作的方法,下面介紹兩種方法

第一種:借助元數據類ResultSetMetaData來實現方法的封裝,使用Map或者List集合來實現數據的封裝(自己感覺使用Map封裝數據比實體好),代碼如下:

public class BaseDao {private Connection connection;public BaseDao() {connection = getConnection();}/*** 獲取數據連接*/public Connection getConnection() {Connection connection = null;try {//獲取數據源對象ComboPooledDataSource dataSource = new ComboPooledDataSource("c3p0-config.xml");//通過數據源獲取連接connection = dataSource.getConnection();System.out.println(connection);} catch (SQLException e) {e.printStackTrace();System.out.println("獲取數據庫連接失敗!");}return connection;}/*** 添、改、刪操作* @param sql sql語句* @param objects 占位符需傳遞的參數* @return*/public int update(String sql, Object ...objects) {int flag = 0;PreparedStatement pst = null;try {pst = connection.prepareStatement(sql);for (int i = 0 ; i <objects.length ; i++){pst.setObject(i+1, objects[i]);}flag = pst.executeUpdate();} catch (SQLException e) {e.printStackTrace();System.out.println("更新操作失敗!");}finally{if (pst != null) {try {pst.close();} catch (SQLException e) {e.printStackTrace();}}}return flag;}/*** 將查詢結果集信息封裝成一個Map* @param sql* @param objects* @return*/public List<Map> getResultMapList(String sql , Object ...objects) {PreparedStatement pst = null;ResultSet result = null;List<Map> list = new ArrayList<>();try {pst = connection.prepareStatement(sql);for (int i = 0 ; i <objects.length ; i++){pst.setObject(i+1, objects[i]);}result = pst.executeQuery();while(result.next()){Map<String, Object> map = new HashMap<>();ResultSetMetaData metaData = result.getMetaData();int count = metaData.getColumnCount();for (int i = 0; i < count; i++) {String label = metaData.getColumnLabel(i+1);map.put(label, result.getObject(i+1));}list.add(map);}} catch (SQLException e) {e.printStackTrace();System.out.println("查詢操作失敗!");}finally{try {if (pst != null) {pst.close();}if (result != null) {result.close();}}catch (SQLException e) {e.printStackTrace();}}return list;}/*** 將查詢結果集信息封裝成一個Map* @param sql* @param objects* @return*/public Map getResultMap(String sql , Object ...objects) {List<Map> list = getResultMapList(sql, objects);return list != null ? list.get(0) : null;}public static void main(String[] args) {BaseDao dao = new BaseDao();String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";dao.update(sql, "zhangsan" , 6);String sql2 = "DELETE FROM USER WHERE ID > ?";dao.update(sql2 , 4);String sql3 = "INSERT INTO USER (UNAME , PASSWORD) VALUES (? ,?)";dao.update(sql3 , "樊少皇" , "123456");String sql4 = "SELECT ID , UNAME , PASSWORD , STATUS FROM USER WHERE ID = ?";Map map = dao.getResultMap( sql4, 20007);String sql5 = "SELECT ID , UNAME , PASSWORD , STATUS FROM USER LIMIT ?";List<Map> resultMapList = dao.getResultMapList(sql5, 10);System.out.println(resultMapList);} }

第二種:直接借助工具類dbutils實現封裝,代碼如下:

public class BaseDao {private Connection connection;private QueryRunner queryRunner;public BaseDao() {connection = getConnection();queryRunner = new QueryRunner();}/*** 獲取數據連接*/public Connection getConnection() {Connection connection = null;try {//獲取數據源對象ComboPooledDataSource dataSource = new ComboPooledDataSource("c3p0-config.xml");//通過數據源獲取連接connection = dataSource.getConnection();System.out.println(connection);} catch (SQLException e) {e.printStackTrace();System.out.println("獲取數據庫連接失敗!");}return connection;}/*** 添、改、刪操作* @param sql sql語句* @param objects 占位符需傳遞的參數* @return*/public int update(String sql, Object ...objects) {int flag = 0;try {flag = queryRunner.execute(connection, sql, objects);} catch (SQLException e1) {e1.printStackTrace();}return flag;}/*** 將查詢結果集信息封裝成一個Map* @param sql* @param objects* @return*/public List<Map<String, Object>> getResultMapList(String sql , Object ...objects) {List<Map<String, Object>> list = null;try {list = queryRunner.query(connection, sql, new MapListHandler(), objects);} catch (SQLException e1) {e1.printStackTrace();}return list;}/*** 將查詢結果集信息封裝成一個Map* @param sql* @param objects* @return*/public Map<String, Object> getResultMap(String sql , Object ...objects) {Map<String, Object> map = null;try {map = queryRunner.query(connection, sql, new MapHandler(), objects);} catch (SQLException e) {e.printStackTrace();}return map;}public static void main(String[] args) {BaseDao dao = new BaseDao();String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";dao.update(sql, "zhangsan" , 1);String sql2 = "DELETE FROM USER WHERE ID > ?";dao.update(sql2 , 4);String sql3 = "INSERT INTO USER (UNAME , PASSWORD) VALUES (? ,?)";dao.update(sql3 , "劉德華" , "123456");String sql4 = "SELECT count(1) count FROM USER ";Map map = dao.getResultMap( sql4);System.out.println(map);String sql5 = "SELECT ID , UNAME , PASSWORD , STATUS FROM USER LIMIT ?";List<Map<String, Object>> resultMapList = dao.getResultMapList(sql5, 10);System.out.println(resultMapList);} }

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的29、jdbc操作数据库(6)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。