1. 程式人生 > >java-jdbc封裝連接數據庫工具

java-jdbc封裝連接數據庫工具

tac etc 防止 ati getc except 接收 oid cte

在進行數據庫連接時,我們往往進行的是數據庫的連接,關閉操作,執行sql語句書寫在Dao層中操作

現對數據庫操作進行封裝,通過動態參數進行傳遞對象,

通過自建泛型實現返回類的接收,現程序如下:

/************************************************************   
Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.   
FileName:JDBCUtil.java 
  
Author:   Light     
Version :   version 1.0       
Date:       2018/7/12
Description:      jdbc鏈接數據庫的封裝// 模塊描述         
Version:         通過模塊化實現jdbc連接數據庫操作,減少開發代碼關於數據庫操作的編寫量// 版本信息 
  
Function List:     // 主要函數及其功能     
1.getConnection 進行數據庫的鏈接
2.close 進行數據庫的關閉
3.executeUpdate 執行數據的增刪改
4.executeQuery執行數據的查詢
 History: 
  // 歷史修改記錄 
      
    <author>  <time>   <version >   <desc>       
        David    96/10/12     1.0     build this moudle   

**********************************************************
*/ public class JDBCUtil { //鏈接地址,設置編碼可用且為utf-8 public static String URL="jdbc:mysql://192.168.80.131:3306/db1?useUnicode=true&characterEncoding=utf8"; //數據庫用戶名 public static String USER="root"; //數據庫密碼 public static String PWD="123456"; /* *進行數據庫的鏈接 */ public static
Connection getConnection(){ Connection con=null; try { //加載驅動 Class.forName("com.mysql.jdbc.Driver"); //創建鏈接 con=DriverManager.getConnection(URL, USER, PWD); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block
e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } //返回連接 return con; } /* *數據庫關閉 */ public static void Close(Connection con,PreparedStatement pstmt,ResultSet rs){ try { //判斷是否被操作 if(rs!=null) rs.close(); if(pstmt!=null) pstmt.close(); if(con!=null) con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /* *創建數據庫執行操作,返回受影響的行數 *@param String sql *@param Object params *@return int result */ public static int executeUpdate(String sql,Object... params){ //創建鏈接 Connection con=getConnection(); PreparedStatement pstmt=null; int result=0; try { //預編譯sql語句,防止sql註入 pstmt=con.prepareStatement(sql); //傳遞參數,如果參數存在 if(params!=null){ //進行循環傳參 for(int i=0;i<params.length;i++){ pstmt.setObject(i+1, params[i]); } } //執行sql語句,返回受影響行數 result=pstmt.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ Close(con,pstmt,null); } return result; } /* *進行數據的查詢,通過自建泛型RowMap,進行數據類型的定義 *@param String sql *@param RowMap T *@param Object params *@return list<T> */ public static <T> List<T> executeQuery(String sql,RowMap<T> rowMap,Object... params){ //創建泛型List List<T> list=new ArrayList<>(); //創建鏈接 Connection con=getConnection(); PreparedStatement pstmt=null; ResultSet rs=null; try { //綁定sql語句 pstmt=con.prepareStatement(sql); //循環穿參 if(params!=null){ for(int i=0;i<params.length;i++){ pstmt.setObject(i+1, params[i]); } } //執行語句,用結果集接收 rs=pstmt.executeQuery(); while(rs.next()){ //利用自建泛型實現數組的添加 T t=rowMap.rowMapping(rs); list.add(t); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ Close(con,pstmt,rs); } return list; } //使用示例函數 public static int update(){ return executeUpdate("insert into student(name,age,sex) values(?,?,?)","姓名",12,"");
  }
}

自定義自建泛型

import java.sql.ResultSet;
//自建泛型,實現rowMappping返回T類型
public interface RowMap<T> {
    public T rowMapping(ResultSet rs);
}

java-jdbc封裝連接數據庫工具