JAVA的JDBC實現案例

一、實驗目的

        通過編寫Java的應用系統綜合實例——圖形化界面的成績管理,總結、回顧和實踐面向對象的編程思想以及編程方法,並通過編寫程序來掌握Java語言編程技巧,將學習到的知識融會貫通,同時提高調試程序的能力,養成良好的編程習慣,並增強對程序設計整體思路的把握。

 

二、設備與環境

PC兼容機、Windows操作系統、JDK開發包、集成開發環境 

 

三、實驗內容

     實現一個圖形界面的學生成績管理系統,能夠對存儲到學生成績數據庫中的學生成績實現錄入、查看、排序和按姓名查詢等功能,主要分爲兩個開發任務。

        第一個開發任務是實現所需要的圖形界面。

        第二個開發任務是爲圖形界面中的組件添加處理程序,完成所需要的功能。在錄入功能中輸入姓名、年齡和成績,單擊“添加”按鈕,即可將學生信息存入數據庫。

        實現學生成績查看功能,添加“顯示”按鈕處理程序,單擊界面中間的“顯示”按鈕,找出數據庫中保存的所有學生信息,將這些信息顯示在右側顯示區中。

        單擊界面中的“排序”按鈕,實現學生成績的排序功能,找到數據庫中保存的所有學生信息,按照成績從低到高排序後顯示在右側顯示區中。

        在查詢功能中輸入姓名,單擊“提交”按鈕,即可根據姓名查詢相應學生的信息並顯示在右下側顯示區中。

 

四、實驗結果及分析

(一)設計思路

首先,需要完成第一部分,就是創建圖形化的界面,這需要引入java.awt包,調用java.awt包中的JFrame、JPanel、JLabel和JTextField這些屬性。其中,JFrame用來定義學生成績管理系統的主窗口,JPanel用來定義各項學生信息的輸入區面板,JLabel用來定義各種提示標籤,JTextField則用來定義各種信息的輸入框。

然後,爲類StudentManager增加了按鈕處理程序,單擊按鈕就可以完成相應的功能,Java圖形界面開發中採用事件處理機制來響應用戶的操作。拼湊sql語句,通過insert方法來向數據庫中插入一條學生信息,getStudentClass方法來獲取數據庫中所有學生信息,getByName方法來獲取數據庫中指定學生的信息。插入和獲取的內容對應形參的name屬性、age屬性和grade屬性。

最後,通過構造一個DbOperation類的getConnection()來連接數據庫,構造getAll方法根據傳入的參數sql中保存的SQL語句字符串的要求查詢數據庫,並將查詢的結果返回給調用這個方法的程序,並以List<Student>表單的類型返回,既方便了傳輸,也方便了之後進行排序等操作。

 

(二)效果展示

學生成績管理系統的主界面:

 

錄入學生姓名、年齡和成績:

 

 

查看所有學生信息:

 

按成績排序之後的所有學生信息:

 

查詢指定學生信息:

 

(三)部分關鍵代碼說明

(1)private JFrame mainFrame; 

用JFrame定義圖書管理系統的主窗口。

(2)private JPanel top; 

用JPanel定義輸入學生信息的輸入區面板。

         (3)private JLabel labelTop; 

private JLabel labelName; 

用JLabel定義提示標籤。

(4)private JTextField textName; 

用JTextField定義輸入框。

(5)private JButton btnAdd; 

用JButton定義按鈕。

(6)mainFrame.setBounds(100,100,500,250);

mainFrame.setVisible(true);

設置窗口的大小以及窗口是否可見。

      (7)mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

          用於設置單擊“關閉”按鈕的功能爲退出程序。

      (8)private void setAction(){

                       btnAdd.addActionListener(this);

                       btnShowAll.addActionListener(this);

                       btnSortAll.addActionListener(this);

                       btnQuery.addActionListener(this);

              }

該方法爲動作設置方法,爲之前定義的四個按鈕添加點擊時的響應。

      (9)sql = "insert into student(name,age,grade)values('";

                            sql = sql+s.getName();

                            sql = sql+"',";

                            sql = sql+s.getAge();

                            sql = sql+",";

                            sql = sql+s.getGrade();

                            sql = sql+")";

             在java程序中用這種方法來拼湊sql語句,通過形參(Student類的s)的置取方法來向數據庫中插入一條學生信息,插入的內容對應形參的name屬性、age屬性和grade屬性。

      (10)String sql = "select name,age,grade from student";

                                   sql = sql+"where name='"+name+"'";

             在java程序中通過這句話來起到拼湊出查詢指定學生信息的sql語句,查詢所得到的內容爲所指定學生的姓名、年齡和成績。

      (11)public void sort(){

                            Student temp;

                            for(int i=0;i<size;i++){

                                   for(int j=1;j<size-i;j++){

                                          if(stuList.get(j-1).getGrade()>stuList.get(j).getGrade()){

                                                 temp = stuList.get(j-1);

                                                 stuList.set(j-1,stuList.get(j));

                                                 stuList.set(j,temp);  }   }     }     }

          這個方法是通過冒泡排序的方式對取出來的學生信息按成績來進行排序。

      (12)Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

          在連接數據庫時,通過這段程序來加載驅動器類。

(13)Connection conn = DriverManager.getConnection

("jdbc:sqlserver://127.0.0.1:1433","sa","123");

在連接數據庫時,通過這段程序來得到連接對象。

      (14)public List<Student> getAll(Connection conn,String sql){

                            List<Student> result = new ArrayList<Student>();

                            Student temp;

                            String name;

                            int age;

                            double grade;

                            PreparedStatement ps = conn.prepareStatement(sql);

                            ResultSet rs = ps.executeQuery();

while(rs.next()){

                                   name = rs.getString("name");

                                   age = rs.getInt("age");

                                   grade = rs.getDouble("grade");

                                   temp = new Student(name,age,grade);

                                   result.add(temp);

                            }

                            return result;

                  }

          該方法根據參數sql中保存的SQL語句字符串的要求查詢數據庫,並將查詢的結果返回給調用這個方法的程序,並以List<Student>表單的類型返回,既方便了傳輸,也方便了之後進行排序等操作。

 

    (15)public class DisplayUtils{

                   public static String display(List<Map<String,String>> conList){

                            StringBuilder strResult = new StringBuilder();

                            for(Map<String,String> map : conList){

                                   for(Map.Entry entry : map.entrySet()){

                                          strResult.append(entry.getKey()+":"+entry.getValue()+"\t");

                                   }

                                   strResult.append("\r\n");

                            }

                            return strResult.toString();

                   }

}

定義工具類DisplayUtils,裏面有一個靜態方法display()。其中包含一個參數List<Map> conList,保存需要輸出的信息,該參數的格式與方法formatStudent()、方法formatStudent()生成的要輸出的數據格式相同。將這個格式的數據拼接成一個字符串。


  

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章