1. 程式人生 > >201621123063《java程序設計》第14周實驗總結

201621123063《java程序設計》第14周實驗總結

dsta 模型 如何 tro 指定 date 移植 業務 dstat

1. 本周學習總結

1.1 以你喜歡的方式(思維導圖或其他)歸納總結與數據庫相關內容。

技術分享圖片

2. 使用數據庫技術改造你的系統

2.1 簡述如何使用數據庫技術改造你的系統。要建立什麽表?截圖你的表設計。

圖書借閱系統使用數據庫存儲館藏圖書信息,要建立圖書信息表

技術分享圖片

id作為主鍵

將圖書表從數據庫中讀出:
數據庫圖表:
技術分享圖片

成功讀取並放入JTable顯示:
技術分享圖片

2.2 系統中使用到了JDBC中什麽關鍵類?

Connection:獲得與數據庫的連接
DriverManger:驅動管理器,註冊驅動
PreparedStatement:Statement子類,預編譯SQL語句後讓數據庫執行
ResultSet

:獲取查詢結果集

2.3 截圖數據庫相關模塊的關鍵代碼。關鍵行需要加註釋。

技術分享圖片

3. 代碼量統計

3.1 統計本周完成的代碼量

需要將每周的代碼統計情況融合到一張表中。

周次 行數 新增行數 文件數 新增文件數
1 226 226 45 45
2 377 377 7 7
3 712 281 42 9
4 166 166 2 2
5 253 253 4 4
6 484 484 9 9
7 269 269 1 1
8 301 32 5 4
9 447 447 7 7
10 401 26 9 0
11 1262 1262 18 18
12 965 965 12 12
13 887 887 9 9
14 675 675 10 10

選做:4. 數據庫學習指導

1. MySQL數據庫基本操作

建立數據庫,將自己的姓名、學號作為一條記錄插入。(截圖,需出現自己的學號、姓名)
技術分享圖片

在自己建立的數據庫上執行常見SQL語句

2. 使用JDBC連接數據庫與Statement

2.1 使用Statement操作數據庫。完成實驗任務書-題目2。截圖其中的public static void displayAll()與public static int insert(Student stu)的關鍵代碼並出現自己的學號。

技術分享圖片

技術分享圖片

2.2 如果要完成根據指定姓名查詢學生數據,即完成函數public Student findStuByName(String name),其中的sql語句怎麽寫?

String sql = "select * from students WHERE name = "+name;

2.3 你認為使用JDBC操作數據庫的套路是什麽?

①加載數據庫驅動
②建立數據庫連接
③創建數據庫操作對象
④定義操作的SQL語句
⑤執行數據庫操作
⑥獲取並操作結果集
⑦close()關閉對象
參考:實驗任務書-題目2

3. PreparedStatement與參數化查詢

3.1 使用PreparedStatement,編寫public Student findStuByName(String name),實現根據name進行查找, 。(粘貼關鍵代碼及運行截圖,運行截圖中需出現學號,比較2.2,說明兩種實現的不同)

public static Student findStuByName(String name)
    {
        String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String userName = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        Student student = null;
        String sql = "select*from students where name = ?";
        
        try {
            conn = DriverManager.getConnection(URL, userName, password);
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1, name);
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next())
            {
                student = new Student(resultSet.getInt("id"),resultSet.getString("stuno"),resultSet.getString("name"),resultSet.getInt("age"),resultSet.getDate("birthdate"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
             if (resultSet != null) {
                    try {
                        resultSet.close();
                        resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (preparedStatement != null) {
                    try {
                        preparedStatement.close();
                        preparedStatement = null;
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }

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

運行截圖:
技術分享圖片
技術分享圖片

不同:PreparedStatement 的執行效率高於Statement,Statement每次執行sql語句,相關數據庫都要執行sql語句的編譯,Preparedstatement是預編譯的。

3.2 如果要實現模糊查找,怎麽修改?比如編寫public List

public static List<Student> findStusByName(String name)
    {
        String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String userName = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        String sql = "select*from students where name like ?";
        List<Student> students = new ArrayList<>();
        try {
            conn = DriverManager.getConnection(URL, userName, password);
            preparedStatement = conn.prepareStatement(sql);
            preparedStatement.setString(1, "%"+name+"%");
            resultSet = preparedStatement.executeQuery();
            while(resultSet.next())
            {
                Student student = new Student(resultSet.getInt("id"),resultSet.getString("stuno"),resultSet.getString("name"),resultSet.getInt("age"),resultSet.getDate("birthdate"));
                students.add(student);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
             if (resultSet != null) {
                    try {
                        resultSet.close();
                        resultSet.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (preparedStatement != null) {
                    try {
                        preparedStatement.close();
                        preparedStatement = null;
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }

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

測試數據:
技術分享圖片
運行截圖:
技術分享圖片

技術分享圖片

6. 事務處理

6.1 使用代碼與運行結果證明你確實實現了事務處理功能,並說明事務處理時在編碼時需要註意哪些?註意:要比較運行成功與運行失敗兩種情況下對數據庫的更改情況。(粘貼一段你認為比較有價值的代碼,出現學號)

技術分享圖片
測試數據:
技術分享圖片

更改前:
技術分享圖片
更改後:
技術分享圖片

運行失敗:數據庫中數據沒有變化
技術分享圖片
註意:數據庫操作要分步進行,不能同時進行多個操作

6.2 你覺得什麽時候需要使用事務處理?

對數據庫的數據進行連續操作時,為了保證數據的一致性和正確性,需要使用事務處理。當對數據庫的數據進行操作失敗時,事務處理可以讓所有的數據回滾到進行操作之前的數據。

選做:5.課外閱讀

5.2 代碼結構中Dao,Service,Controller,Util,Model是什麽意思,為什麽劃分

Dao: Data Access Object,負責數據存取
Service:服務,完成一些指定的工作
Controller:控制器,所有的指令都由控制器發出
Util:工具,常用來處理和業務邏輯沒有關系的數據
Model:模型,描述了一個類型數據的定義,通常是各數據的集合

劃分好處:
①劃分代碼結構可以讓代碼具有良好的可移植性
②可以讓多人協作並行開發更容易
③開發時能對程序的結構有更清晰的概念

5.3 mysq數據庫管理工具navicat基本使用方法

技術分享圖片
可以直接在可視化圖表中對數據進行一些常規操作,在查詢中可以用代碼語句對數據庫進行增刪改查和事務控制

201621123063《java程序設計》第14周實驗總結