JDBC1

来源:https://www.cnblogs.com/pengyupeng/archive/2019/07/25/11241696.html
-Advertisement-
Play Games

恢復內容開始 1.用JDBC設置aa的balance值為1500 2.用JDBC添加姓名cc,balance為3000 3.用JDBC刪除id為3的數據 4.用JDBC創建一個student表 5.用JDBC查詢account表中所有數據 6.用JDBC查詢account表中所有數據 7.JDBC工 ...


---恢復內容開始---

create table `account` (
    `id` int (11),
    `name` char (60),
    `balance` int (11)
); 
insert into `account` (`id`, `name`, `balance`) values('1','aa','2000');
insert into `account` (`id`, `name`, `balance`) values('2','bb','2000');
insert into `account` (`id`, `name`, `balance`) values('3','王五','2000');

1.用JDBC設置aa的balance值為1500

public class JdbcDemo1 {
    public static void main(String[] args) throws Exception {

        //1. 導入驅動jar包
        //2.註冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //3.獲取資料庫連接對象
        Connection conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
        //4.定義sql語句
       String sql = "update account set balance = 1500 where id = 1";
        //5.獲取執行sql的對象 Statement
        Statement stmt = conn.createStatement();
        //6.執行sql
        int count = stmt.executeUpdate(sql);
        //7.處理結果
        System.out.println(count);
        //8.釋放資源
        stmt.close();
        conn.close();

    }
}

2.用JDBC添加姓名cc,balance為3000

public class JDBCDemo2 {
    public static void main(String[] args) {
        Statement stmt = null;
        Connection conn = null;
        try {
            //1. 註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2. 定義sql
            String sql = "insert into account values(null,'cc',3000)";
            //3.獲取Connection對象
            conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
            //4.獲取執行sql的對象 Statement
            stmt = conn.createStatement();
            //5.執行sql
            int count = stmt.executeUpdate(sql);//影響的行數
            //6.處理結果
            System.out.println(count);
            if(count > 0){
                System.out.println("添加成功!");
            }else{
                System.out.println("添加失敗!");
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //stmt.close();
            //7. 釋放資源
            //避免空指針異常
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}

3.用JDBC刪除id為3的數據

public class JDBCDemo3 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //1. 註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2.獲取連接對象
            conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
           //conn = JDBCUtils.getConnection("jdbc:mysql:///db3", "root", "root");
            //3.定義sql
            String sql  = "delete from account where id = 3";
            //4.獲取執行sql對象
            stmt = conn.createStatement();
            //5.執行sql
            int count = stmt.executeUpdate(sql);
            //6.處理結果
            System.out.println(count);
            if(count > 0){
                System.out.println("刪除成功!");
            }else{
                System.out.println("刪除失敗");
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7.釋放資源

            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

4.用JDBC創建一個student表

/**
 * 執行DDL語句
 */
public class JDBCDemo5 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //1. 註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2.獲取連接對象
            conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
            //3.定義sql
            String sql  = "create table student1 (id int , name varchar(20))";
            //4.獲取執行sql對象
            stmt = conn.createStatement();
            //5.執行sql
            int count = stmt.executeUpdate(sql);
            //6.處理結果
            System.out.println(count);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7.釋放資源

            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

5.用JDBC查詢account表中所有數據

/**
 * 執行DDL語句
 */
public class JDBCDemo7 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1. 註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2.獲取連接對象
            conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
            //3.定義sql
            String sql  = "select * from account";
            //4.獲取執行sql對象
            stmt = conn.createStatement();
            //5.執行sql
            rs = stmt.executeQuery(sql);
            //6.處理結果
            //迴圈判斷游標是否是最後一行末尾。
            while(rs.next()){

                //獲取數據
                //6.2 獲取數據
                int id = rs.getInt(1);
                String name = rs.getString("name");
                double balance = rs.getDouble(3);

                System.out.println(id + "---" + name + "---" + balance);
            }


           /* //6.1 讓游標向下移動一行
            if(rs.next()){
                //判斷是否有數據
                //6.2 獲取數據
                int id = rs.getInt(1);
                String name = rs.getString("name");
                double balance = rs.getDouble(3);

                System.out.println(id + "---" + name + "---" + balance);
            }

            //6.1 讓游標向下移動一行
            if(rs.next()){
                //判斷是否有數據
                //6.2 獲取數據
                int id = rs.getInt(1);
                String name = rs.getString("name");
                double balance = rs.getDouble(3);

                System.out.println(id + "---" + name + "---" + balance);
            }

            //6.1 讓游標向下移動一行
            if(rs.next()){
                //判斷是否有數據
                //6.2 獲取數據
                int id = rs.getInt(1);
                String name = rs.getString("name");
                double balance = rs.getDouble(3);

                System.out.println(id + "---" + name + "---" + balance);
            }

            //6.1 讓游標向下移動一行
            if(rs.next()){
                //判斷是否有數據
                //6.2 獲取數據
                int id = rs.getInt(1);
                String name = rs.getString("name");
                double balance = rs.getDouble(3);

                System.out.println(id + "---" + name + "---" + balance);
            }*/

          /*  //6.1 讓游標向下移動一行
            rs.next();
            //6.2 獲取數據
            int id2 = rs.getInt(1);
            String name2 = rs.getString("name");
            double balance2 = rs.getDouble(3);

            System.out.println(id2 + "---" + name2 + "---" + balance2);

            //6.1 讓游標向下移動一行
            rs.next();
            //6.2 獲取數據
            int id3 = rs.getInt(1);
            String name3 = rs.getString("name");
            double balance3 = rs.getDouble(3);

            System.out.println(id3 + "---" + name3 + "---" + balance3);*/


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7.釋放資源

            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

6.用JDBC查詢account表中所有數據

public class Emp {
    private int id;
    private String ename;
    private int job_id;
    private int mgr;
    private Date joindate;
    private double salary;
    private double bonus;
    private int dept_id;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public int getJob_id() {
        return job_id;
    }

    public void setJob_id(int job_id) {
        this.job_id = job_id;
    }

    public int getMgr() {
        return mgr;
    }

    public void setMgr(int mgr) {
        this.mgr = mgr;
    }

    public Date getJoindate() {
        return joindate;
    }

    public void setJoindate(Date joindate) {
        this.joindate = joindate;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }


    public int getDept_id() {
        return dept_id;
    }

    public void setDept_id(int dept_id) {
        this.dept_id = dept_id;
    }


    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }


    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", ename='" + ename + '\'' +
                ", job_id=" + job_id +
                ", mgr=" + mgr +
                ", joindate=" + joindate +
                ", salary=" + salary +
                ", bonus=" + bonus +
                ", dept_id=" + dept_id +
                '}';
    }
}
public class JDBCDemo8 {

    public static void main(String[] args) {
        List<Emp> list = new JDBCDemo8().findAll();
        System.out.println(list);
        System.out.println(list.size());
    }
    /**
     * 查詢所有emp對象
     * @return
     */
    public List<Emp> findAll(){
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Emp> list = null;
        try {
            //1.註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2.獲取連接
            conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
            //3.定義sql
            String sql = "select * from emp";
            //4.獲取執行sql的對象
            stmt = conn.createStatement();
            //5.執行sql
            rs = stmt.executeQuery(sql);
            //6.遍歷結果集,封裝對象,裝載集合
            Emp emp = null;
            list = new ArrayList<Emp>();
            while(rs.next()){
                //獲取數據
                int id = rs.getInt("id");
                String ename = rs.getString("name");
                String ename = rs.getString("");
                Date joindate = rs.getDate("joindate");
                double salary = rs.getDouble("salary");

                int dept_id = rs.getInt("dept_id");
                // 創建emp對象,並賦值
                emp = new Emp();
                emp.setId(id);
                emp.setEname(ename);
                emp.setJob_id(job_id);
                emp.setMgr(mgr);
                emp.setJoindate(joindate);
                emp.setSalary(salary);
                emp.setBonus(bonus);
                emp.setDept_id(dept_id);

                //裝載集合
                list.add(emp);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return list;
    }


    /**
     * 演示JDBC工具類
     * @return
     */
    public List<Emp> findAll2(){
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Emp> list = null;
        try {
           /* //1.註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2.獲取連接
            conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");*/
            conn = JDBCUtils.getConnection();
            //3.定義sql
            String sql = "select * from emp";
            //4.獲取執行sql的對象
            stmt = conn.createStatement();
            //5.執行sql
            rs = stmt.executeQuery(sql);
            //6.遍歷結果集,封裝對象,裝載集合
            Emp emp = null;
            list = new ArrayList<Emp>();
            while(rs.next()){
                //獲取數據
                int id = rs.getInt("id");
                String ename = rs.getString("ename");
                int job_id = rs.getInt("job_id");
                int mgr = rs.getInt("mgr");
                Date joindate = rs.getDate("joindate");
                double salary = rs.getDouble("salary");
                double bonus = rs.getDouble("bonus");
                int dept_id = rs.getInt("dept_id");
                // 創建emp對象,並賦值
                emp = new Emp();
                emp.setId(id);
                emp.setEname(ename);
                emp.setJob_id(job_id);
                emp.setMgr(mgr);
                emp.setJoindate(joindate);
                emp.setSalary(salary);
                emp.setBonus(bonus);
                emp.setDept_id(dept_id);

                //裝載集合
                list.add(emp);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            /*if(rs != null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }*/

            JDBCUtils.close(rs,stmt,conn);
        }
        return list;
    }

}

7.JDBC工具類

/**
 * JDBC工具類
 */
public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    /**
     * 文件的讀取,只需要讀取一次即可拿到這些值。使用靜態代碼塊
     */
    static{
        //讀取資源文件,獲取值。

        try {
            //1. 創建Properties集合類。
            Properties pro = new Properties();

            //獲取src路徑下的文件的方式--->ClassLoader 類載入器
            ClassLoader classLoader = JDBCUtils.class.getClassLoader();
            URL res  = classLoader.getResource("jdbc.properties");
            String path = res.getPath();
           // System.out.println(path);///D:/IdeaProjects/itcast/out/production/day04_jdbc/jdbc.properties
            //2. 載入文件
           // pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04_jdbc\\src\\jdbc.properties"));
            pro.load(new FileReader(path));

            //3. 獲取數據,賦值
            url = pro.getProperty("url");
            user = pro.getProperty("user");
            password = pro.getProperty("password");
            driver = pro.getProperty("driver");
            //4. 註冊驅動
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    /**
     * 獲取連接
     * @return 連接對象
     */
    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url, user, password);
    }

    /**
     * 釋放資源
     * @param stmt
     * @param conn
     */
    public static void close(Statement stmt,Connection conn){
        if( stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }


    /**
     * 釋放資源
     * @param stmt
     * @param conn
     */
    public static void close(ResultSet rs,Statement stmt, Connection conn){
        if( rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( stmt != null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if( conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}
url=jdbc:mysql:mysql:///db3
user=root
password=root
driver=com.mysql.jdbc.Driver

8.通過鍵盤錄入用戶名和密碼,判斷用戶是否登錄成功

/**
 * 練習:
 *         * 需求:
 *             1. 通過鍵盤錄入用戶名和密碼
 *             2. 判斷用戶是否登錄成功
 */
public class JDBCDemo9 {

    public static void main(String[] args) {
        //1.鍵盤錄入,接受用戶名和密碼
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入用戶名:");
        String username = sc.nextLine();
        System.out.println("請輸入密碼:");
        String password = sc.nextLine();
        //2.調用方法
        boolean flag = new JDBCDemo9().login2(username, password);
        //3.判斷結果,輸出不同語句
        if(flag){
            //登錄成功
            System.out.println("登錄成功!");
        }else{
            System.out.println("用戶名或密碼錯誤!");
        }


    }



    /**
     * 登錄方法
     */
    public boolean login(String username ,String password){
        if(username == null || password == null){
            return false;
        }
        //連接資料庫判斷是否登錄成功
        Connection conn = null;
        Statement stmt =  null;
        ResultSet rs = null;
        //1.獲取連接
        try {
            conn =  JDBCUtils.getConnection();
            //2.定義sql
            String sql = "select * from user where username = '"+username+"' and password = '"+password+"' ";
            System.out.println(sql);
            //3.獲取執行sql的對象
            stmt = conn.createStatement();
            //4.執行查詢
            rs = stmt.executeQuery(sql);
            //5.判斷
           /* if(rs.next()){//如果有下一行,則返回true
                return true;
            }else{
                return false;
            }*/
           return rs.next();//如果有下一行,則返回true

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(rs,stmt,conn);
        }


        return false;
    }

    /**
     * 登錄方法,使用PreparedStatement實現
     */
    public boolean login2(String username ,String password){
        if(username == null || password == null){
            return false;
        }
        //連接資料庫判斷是否登錄成功
        Connection conn = null;
        PreparedStatement pstmt =  null;
        ResultSet rs = null;
        //1.獲取連接
        try {
            conn =  JDBCUtils.getConnection();
            //2.定義sql
            String sql = "select * from user where username = ? and password = ?";
            //3.獲取執行sql的對象
            pstmt = conn.prepareStatement(sql);
            //給?賦值
            pstmt.setString(1,username);
            pstmt.setString(2,password);
            //4.執行查詢,不需要傳遞sql
            rs = pstmt.executeQuery();
            //5.判斷
           /* if(rs.next()){//如果有下一行,則返回true
                return true;
            }else{
                return false;
            }*/
            return rs.next();//如果有下一行,則返回true

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(rs,pstmt,conn);
        }


        return false;
    }


}

9.JDBC事務操作

/**
 * 事務操作
 */
public class JDBCDemo10 {


    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;

        try {
            //1.獲取連接
            conn = JDBCUtils.getConnection();
            //開啟事務
            conn.setAutoCommit(false);

            //2.定義sql
            //2.1 張三 - 500
            String sql1 = "update account set balance = balance - ? where id = ?";
            //2.2 李四 + 500
            String sql2 = "update account set balance = balance + ? where id = ?";
            //3.獲取執行sql對象
            pstmt1 = conn.prepareStatement(sql1);
            pstmt2 = conn.prepareStatement(sql2);
            //4. 設置參數
            pstmt1.setDouble(1,500);
            pstmt1.setInt(2,1);

            pstmt2.setDouble(1,500);
            pstmt2.setInt(2,2);
            //5.執行sql
            pstmt1.executeUpdate();
            // 手動製造異常
            int i = 3/0;

            pstmt2.executeUpdate();
            //提交事務
            conn.commit();
        } catch (Exception e) {
            //事務回滾
            try {
                if(conn != null) {
                    conn.rollback();
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            JDBCUtils.close(pstmt1,conn);
            JDBCUtils.close(pstmt2,null);
        }


    }

}

 

---恢復內容結束---


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] 開機啟動流程 linux啟動流程 centos6 1.內核引導 2.運行init 首先讀取/etc/inittab配置文件 在init中,涉及7個運行級別(runlevel) 查看當前運行的級別 臨時切換運行級別 永久切換運行級別 查看開機自啟服務 CentOS6忘記root密碼或者調整 ...
  • 本文主要進行詳細講解CentOS7.5系統的安裝過程,以及CentOS系統初始化技術。我並不想將這篇文章變成一個教程,儘管我將詳細的進行每一步的講解,enjoy! ...
  • nano是一個字元終端的文本編輯器,有點像DOS下的editor程式。它比vi/vim要簡單得多,比較適合Linux初學者使用。某些Linux發行版的預設編輯器就是nano。 nano命令可以打開指定文件進行編輯,預設情況下它會自動斷行,即在一行中輸入過長的內容時自動拆分成幾行,但用這種方式來處理某 ...
  • 1.網路設置 裝好CentOS7後,我們一開始是上不了網的 這時候,可以輸入命令dhclient,可以自動獲取一個IP地址,再用命令ip addr查看IP 不過這時候獲取的IP是動態的,下次重啟系統後,IP地址也會變化,還是建議設置成靜態IP 2.配置YUM本地源 參考 https://www.cn ...
  • 公司的Linux伺服器都是通過一臺JumpServer跳轉的。個人使用Jumpserver(開源跳板機系統)時,有時候由於需要上傳、下載文件很不方便。而由於配置關係,一般情況無法使用SecureCRT直接通過ssh連接到伺服器。所以個人設置了/etc/ssh/sshd_config。允許我的電腦(電... ...
  • 1. sysctl -w net.ipv4.tcp_syncookies=1 #啟用使用syncookiessysctl -w net.ipv4.tcp_synack_retries=1 #降低syn重試次數sysctl -w net.ipv4.tcp_syn_retries=1 #降低syn重試次 ...
  • linux啟動順序流程圖: 啟動第一步--載入 BIOS 當你打開電腦電源,電腦會首先載入 BIOS 信息,BIOS 信息是如此的重要,以至於電腦必須在最開始就找到它。這是因為 BIOS 中包含了 CPU 的相關信息、設備啟動順序信息、硬碟信息、記憶體信息、時鐘信息、PnP 特性等等。在此之後, ...
  • 安裝依賴 解壓 安裝nginx 配置Tomcat伺服器 upstream tomcats{ server localhost:8080 weight=3; # weigh表示權重,越大訪問的機率越多 server localhost:8880 weight=6; } location / { # 這 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...