1. 程式人生 > 實用技巧 >Asp.Net Core安全防護-客戶端IP白名單限制

Asp.Net Core安全防護-客戶端IP白名單限制

DBUtils:

    就是JDBC的簡化開發工具包。需要專案匯入commons-dbutils-1.6.jar才能夠正常使用DBUtils工具。

    DBUtils核心功能介紹:

      QueryRunner中提供對sql語句操作的API。

      ResultSetHandler介面,用於定義select操作後,怎樣封裝結果集。

      DbUtils類,它就是一個工具類,定義了關閉資源與事務處理的方法。

    QueryRunner:

         update(Connection conn, String sql, Object... params) ,用來完成表資料的增加、刪除、更新操作

         query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用來完成表資料的查詢操作.

    ResultSetHandler:

ArrayHandler

將結果集中的第一條記錄封裝到一個Object[]陣列中,陣列中的每一個元素就是這條記錄中的每一個欄位的值

ArrayListHandler

將結果集中的每一條記錄都封裝到一個Object[]陣列中,將這些陣列在封裝到List集合中。

BeanHandler

將結果集中第一條記錄封裝到一個指定的javaBean中。

BeanListHandler

將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中

ColumnListHandler

將結果集中指定的列的欄位值,封裝到一個List集合中

ScalarHandler

它是用於單資料。例如select count(*) from 表操作。

MapHandler

將結果集第一行封裝到Map<String,Object>集合中,Key 列名, Value 該列資料

MapListHandler

將結果集每一行封裝到List<Map<String,Object>>集合中,Key 列名, Value 該列資料,Map集合儲存到List集合

      JavaBean就是一個類,在開發中常用封裝資料。

      ArrayHandler:將結果集中的第一條記錄封裝到一個Object[]陣列中,陣列中的每一個元素就是這條記錄中的每一個欄位的值

      ArrayListHandler:將結果集中的每一條記錄都封裝到一個Object[]陣列中,將這些陣列在封裝到List集合中。

      BeanHandler :將結果集中第一條記錄封裝到一個指定的javaBean中。

      BeanListHandler :將結果集中每一條記錄封裝到指定的javaBean中,將這些javaBean在封裝到List集合中

      ColumnListHandler:將結果集中指定的列的欄位值,封裝到一個List集合

      ScalarHandler:它是用於單資料。例如select count(*) from 表操作。

      

package com.oracle.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.apache.taglibs.standard.lang.jstl.test.Bean1;

import com.oracle.domain.Sort;
import com.oracle.tools.JDBCUtils;
import com.oracle.tools.MyDBUtils;

public class SortDao {
//新增分類
    public void add() throws SQLException{
        //獲取連結物件
        Connection conn=JDBCUtils.getConn();
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner();
        String sql="insert into sort(sname,sdesc) values(?,?)";
        int row=qr.update(conn,sql,"手機","iphone12");
        System.out.println(row);
    }
//刪除分類
    public void delete() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner();
        String sql="delete from sort where sid=?";
        int row=qr.update(conn,sql,21);    
            System.out.println(row);    
    }
    //ArrayHandker
    public void get1() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner();
        String sql="select * from sort";
        Object obj[]=qr.query(conn,sql,new ArrayHandler());
        //遍歷
        for(Object ob:obj){
            System.out.println(ob);
        }
    }
    //ArrayListHandler
    public void get2() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner();
        String sql="select * from sort";
        List<Object[]> list=qr.query(conn,sql,new ArrayListHandler());
        //遍歷
        for(Object obj:list){
            System.out.print(obj+"");
        }
        System.out.println();
    }
    //BeanHandler
    public void get3() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner();
        String sql="select * from sort";
        Sort sort=qr.query(conn,sql,new BeanHandler<Sort>(Sort.class));
        System.out.println(sort);
    }
    //BeanListHandler
    public void get4() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner();
        String sql="select * from sort";
        List<Sort> list=qr.query(conn,sql,new BeanListHandler<Sort>(Sort.class));
        System.out.println(list);        
    }
    //ColumnListHandler
    public void get5() throws SQLException{
        Connection conn=JDBCUtils.getConn();
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner();
        String sql="select sname from sort";
        List<String> list=qr.query(conn,sql,new ColumnListHandler<String>());
        System.out.println(list);        
    }
    //ScalarHandler
    public void get6() throws SQLException{
        //建立QueryRunner物件
        QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());
        String sql="select count(*) from sort where sid=?";
        Long count=qr.query(sql,new ScalarHandler<Long>(),3);
        int c=count.intValue();
        System.out.println(c);        
    }
}

連線池技術:

    Java為資料庫連線池提供了公共的介面:javax.sql.DataSource,各個廠商需要讓自己的連線池實現這個介面。這樣應用程式可以方便的切換不同廠商的連線池!

    常見的連線池:DBCP、C3P0。

    需要先匯入2個jar包。

    

package com.oracle.tools;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;

public class MyDBUtils {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/demo0803?characterEncoding=utf8";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "123456";
    /*
     * 建立連線池BasicDataSource
     */
    public static BasicDataSource dataSource = new BasicDataSource();
    //靜態程式碼塊
    static {
        //對連線池物件 進行基本的配置
        dataSource.setDriverClassName(DRIVER); // 這是要連線的資料庫的驅動
        dataSource.setUrl(URL); //指定要連線的資料庫地址
        dataSource.setUsername(USERNAME); //指定要連線資料的使用者名稱
        dataSource.setPassword(PASSWORD); //指定要連線資料的密碼
    }
    /*
     * 返回連線池物件
     */
    public static DataSource getDataSource(){
        return dataSource;
    }
    //獲取連線物件
    public static Connection getConn(){
        Connection conn=null;
        try {
            conn=dataSource.getConnection();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
}

    

     作用:自身維護了多個Connection連線物件維護

     BasicDataSource類 是 DataSource介面的實現類

    DataSource介面,它是java與每種資料庫連線池 連線的規範標準

     DBCP連線池常見的配置:

        

必須項

driverClassName

資料庫驅動名稱

url

資料庫的地址

username

使用者名稱

password

密碼

基本項

maxActive

最大連線數量

initialSize

連線池中初始化多少個Connection連線物件

擴充套件項

maxWait

超時等待時間以毫秒為單位 1000等於1秒