版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 . . 38/41 . . 客房信息管理系統(tǒng)概述 日期:數(shù)據(jù)庫課程實訓(xùn)報告題目: 客房信息管理系統(tǒng) 目 錄 TOC o 1-5 h z u HYPERLINK l _Toc485980294目錄 PAGEREF _Toc485980294 h 2HYPERLINK l _Toc4859802951 課題容和要求 PAGEREF _Toc485980295 h 1HYPERLINK l _Toc4859802961.1課題描述 PAGEREF _Toc485980296 h 1HYPERLINK l _Toc4859802971.2 課題要求 PAGEREF _Toc485980297 h 1
2、HYPERLINK l _Toc4859802982 需求分析 PAGEREF _Toc485980298 h 1HYPERLINK l _Toc4859802992.1 功能需求分析 PAGEREF _Toc485980299 h 1HYPERLINK l _Toc4859803002.2 數(shù)據(jù)需求分析 PAGEREF _Toc485980300 h 1HYPERLINK l _Toc4859803013 系統(tǒng)設(shè)計 PAGEREF _Toc485980301 h 3HYPERLINK l _Toc4859803023.1 功能模塊設(shè)計 PAGEREF _Toc485980302 h 3HYP
3、ERLINK l _Toc4859803033.2 數(shù)據(jù)庫概念設(shè)計 PAGEREF _Toc485980303 h 3HYPERLINK l _Toc4859803043.3 數(shù)據(jù)庫邏輯設(shè)計 PAGEREF _Toc485980304 h 5HYPERLINK l _Toc4859803053.4 數(shù)據(jù)庫物理設(shè)計 PAGEREF _Toc485980305 h 5HYPERLINK l _Toc4859803063.5 數(shù)據(jù)庫表間聯(lián)系 PAGEREF _Toc485980306 h 7HYPERLINK l _Toc4859803074系統(tǒng)實現(xiàn)根據(jù)各自課題實際情況寫,寫清界面設(shè)計,包括哪些控件
4、,各自哪些屬性,哪些事件,數(shù)據(jù)庫如何相連與操作 PAGEREF _Toc485980307 h 7HYPERLINK l _Toc4859803084.1 登陸模塊實現(xiàn) PAGEREF _Toc485980308 h 7HYPERLINK l _Toc4859803094.2 登記模塊實現(xiàn) PAGEREF _Toc485980309 h 7HYPERLINK l _Toc4859803104.3 查詢模塊實現(xiàn) PAGEREF _Toc485980310 h 8HYPERLINK l _Toc4859803115 代碼調(diào)試與功能測試 PAGEREF _Toc485980311 h 8HYPERL
5、INK l _Toc4859803125.1 測試方案 PAGEREF _Toc485980312 h 8HYPERLINK l _Toc4859803135.2 測試結(jié)果 PAGEREF _Toc485980313 h 8HYPERLINK l _Toc4859803146 收獲與體會 PAGEREF _Toc485980314 h 8HYPERLINK l _Toc485980315參考文獻 PAGEREF _Toc485980315 h 9HYPERLINK l _Toc485980316附錄 PAGEREF _Toc485980316 h 10HYPERLINK l _Toc48598
6、0317附錄1源程序部分清單 PAGEREF _Toc485980317 h 10HYPERLINK l _Toc485980318附錄1.1登陸代碼 PAGEREF _Toc485980318 h 10HYPERLINK l _Toc485980319附錄1.2 查詢代碼 PAGEREF _Toc485980319 h 12HYPERLINK l _Toc485980320附錄1.3 計費代碼 PAGEREF _Toc485980320 h 13客房信息管理系統(tǒng)設(shè)計1 課題容和要求1.1課題描述 隨著市場經(jīng)濟的發(fā)展,各行各業(yè)為加強信息管理,提高經(jīng)濟效益,都迫切地將現(xiàn)代化信息處理技術(shù)應(yīng)用到經(jīng)濟
7、管理中??头抗芾硐到y(tǒng)是酒店、賓館管理中必不可少的一部分,它不僅對管理者在運營過程中起到至關(guān)重要的作用,而且也能為用戶提供充分的信息和快捷的查詢手段。但是傳統(tǒng)的人工操作管理存在著許多缺點,如:效率低、性差,而且保存時間一長,在查找、更新、維護文件和數(shù)據(jù)時都比較困難。這時就引入了客房信息管理系統(tǒng),優(yōu)點如下:檢索迅速、查找方便、性高、成本低等。酒店在正常運營中需要對顧客信息、客房資源、結(jié)算情況進行管理,利用客房信息管理系統(tǒng)能更好地了解信息的變更,提高了管理效率。1.2 課題要求可以對客房基本信息進行增加、刪除、修改客房分為三種類型:三人房、雙人房、單人房,每種類型房間價位不同可以實現(xiàn)客戶訂房、退房、
8、續(xù)房功能可以登記、查詢客戶基本信息可以查詢房間狀態(tài)信息可以實現(xiàn)住宿計費2 需求分析2.1 功能需求分析(1)作為酒店客房信息管理系統(tǒng),應(yīng)該具有增加、刪除、修改這幾個基本功能。所需錄入的表有客戶基本信息表、房間資源信息表、密碼表。(2)設(shè)計登陸后系統(tǒng)的主窗口,要求能夠顯示酒店管理信息。數(shù)據(jù)的增加、刪除、修改、查詢能直接放在桌面上供用戶選擇,而且要布局合理、美觀。應(yīng)當(dāng)減少用戶的鍵盤輸入,減少用戶的工作量,提高效率。2.2 數(shù)據(jù)需求分析圖2-1表2-1 數(shù)據(jù)項說明表數(shù)據(jù)項名稱含義說明類型長度客人編號惟一標(biāo)識一位客人bigint10房間號惟一標(biāo)識一間客房int 10入住時間標(biāo)識入住時間datetime
9、10離開時間標(biāo)識離店時間datetime10單價標(biāo)識一間客房價格money10金額標(biāo)識總金額money10房間等級標(biāo)識房間類型smallint2 - 表2-2 數(shù)據(jù)流說明表數(shù)據(jù)流名稱含義說明來源去處組成登陸管理員進入系統(tǒng)界面系統(tǒng)設(shè)置界面管理員端編號+密碼查詢已住房查詢房間資料客人信息表統(tǒng)計界面客人信息表+客房編號表查詢空房間查詢空房間客房編號表統(tǒng)計界面客房編號表結(jié)算計算總金額系統(tǒng)設(shè)置界面管理員端系統(tǒng)設(shè)置界面登記、刪除錄入、刪除住房信息管理員端系統(tǒng)設(shè)置界面系統(tǒng)數(shù)據(jù)庫統(tǒng)計統(tǒng)計住房信息系統(tǒng)數(shù)據(jù)庫統(tǒng)計界面系統(tǒng)數(shù)據(jù)庫表2-3 數(shù)據(jù)存儲說明表數(shù)據(jù)存儲名稱含義說明組成結(jié)構(gòu)客戶信息表存放客人相關(guān)信息個人信息+
10、入住時間+金額房間信息表存放客房的信息與狀態(tài)客房信息+客房等級管理員信息表存放管理員驗證信息編號+密碼3 系統(tǒng)設(shè)計3.1 功能模塊設(shè)計登陸系統(tǒng)系統(tǒng)主界面用戶管理旅客信息管理客房情況查詢客房信息管理經(jīng)營管理圖3-13.2 數(shù)據(jù)庫概念設(shè)計備注房間價格房間類型房間位置客房信息管理房號圖3-2真實XX名籍貫XX號手機號碼旅客信息管理性別圖3-3客房號入住編號證件號XX入住時間經(jīng)營管理狀態(tài)入住天數(shù)押金圖3-4房間位置房間類型房號客房情況查詢房間價格使用情況圖3-4登錄名用戶真實XX主鍵排序碼用戶管理登錄次數(shù)電子郵箱圖3-5房間等級房間號單價證件號碼性別XX入住時間年齡證件名稱最大人數(shù)房間信息客戶信息離開
11、時間房間號金額NN管理管理 11 管理員信息密碼編號圖3-63.3 數(shù)據(jù)庫邏輯設(shè)計客戶信息(客房編號,性別,年齡,證件,證件名稱);房間信息(房間號,房間等級,單價,最大人數(shù),金額,離開時間,入住時間);管理員信息(編號,密碼);3.4 數(shù)據(jù)庫物理設(shè)計1客戶信息create table 客戶信息(房間號 varchar(5) not null primary key, varchar(8) not null, 性別 char(2) not null, 年齡 char(5) not null, 證件 varchar(20)not null, 證件名稱 varchar(10) not null);
12、 圖3-62.房間信息create table 房間信息(房間號 varchar(10) not null primary key, 房間等級 varchar(10) not null, 單價 char(10) not null, 最大人數(shù) char(10) not null, 金額 char(10) not null, 入住時間 char(10) not null, 離開時間 char(10) not null);圖3-73.管理員信息create table 管理員信息(編號 varchar(10) not null primary key,密碼 char(10)not null) ;圖3
13、-83.5 數(shù)據(jù)庫表間聯(lián)系圖3-9 數(shù)據(jù)庫表間聯(lián)系截圖4系統(tǒng)實現(xiàn) 4.1 登陸模塊實現(xiàn)Login類:登陸界面(用戶名+密碼),如果用戶名和密碼正確,則顯示成功登陸本窗體連接到數(shù)據(jù)庫中的管理員表通過定義ResultSet來調(diào)用表中的數(shù)據(jù),相關(guān)代碼:ResultSet rs;rs=stat.executeQuery(select * from 管理人員 where 編號=+tUser.getText()+and密碼=+String.valueOf(password.getPassword()+);判斷成功后實現(xiàn)主窗體中子菜單的setEnable()方法。4.2 登記模塊實現(xiàn)Add類:方便管理人員添
14、加新的客人信息,包括編號、性別、年齡、家庭地址、來自、客房名、工作單位、預(yù)入住時間、入住時間、離開時間、押金本窗體主要用到T-SQL語句中的insert into. VALUES語句,相關(guān)代碼:a1=+tName.getText().trim()+;a2=+tSex.getText().trim()+;a3=+tAge.getText().trim()+;a4=+tIdentication.getText().trim()+;a5=+tAddress.getText().trim()+;a6=+tWorkPlace.getText().trim()+;a7=+tFrom.getText().t
15、rim()+;a8=+tRoomNo.getText().trim()+;a9=+tWillIn.getText().trim()+;a10=+tIn.getText().trim()+;a11=+tLeave.getText().trim()+;int i = Integer.valueOf(tCash.getText().intValue();String b=insert into 客人信息 (客房編號,性別,年齡,家庭住址,工作單位,來自地的地名,預(yù)定入住時間,入住時間,離店時間,押金) VALUES (+a8+,+a1+,+a2+,+a3+,+a4+,+a5+,+a6+,+a7+,+
16、a9+,+a10+,+a11+,+i+);stat=conn.prepareStatement(b);r=stat.executeUpdate();4.3 查詢模塊實現(xiàn)SearchForName類:可以需要查詢客人的信息本窗體主要用到JTable和連接客人信息表,相關(guān)代碼:stat=conn.createStatement();rs=stat.executeQuery(select ,性別,工作單位,客房編號,入住時間 from 客人信息 where =+tName.getText()+);rs=stat.executeQuery(select ,性別,工作單位,客房編號,入住時間 from
17、客人信息 where 客房編號=+tName.getText()+);5 代碼調(diào)試與功能測試5.1 測試方案系統(tǒng)測試是一個系統(tǒng)必須經(jīng)歷的過程,一個系統(tǒng)想要能滿足用戶需求,就必須經(jīng)過一套科學(xué)的、完善的測試。對于本系統(tǒng),我做了以下幾方面的測試:(1)數(shù)據(jù)合法性測試。這是對輸入的數(shù)據(jù)是否合法的一個測試。(2)數(shù)據(jù)一致性測試。在這個測試的過程中,我對數(shù)據(jù)進行了添加、刪除、修改的操作,觀察界面上顯示的數(shù)據(jù)是否與操作的容相一致。(3)功能模塊測試。這個測試是對各個模塊是否能正常運行的一個測試。5.2 測試結(jié)果圖5-1圖5-2圖5-3圖5-4圖5-5圖5-6圖5-76 收獲與體會 時間過的好快,兩個星期的實
18、訓(xùn)終于告一段落。這學(xué)期做的是數(shù)據(jù)庫實驗,老師很負責(zé)任,第一節(jié)課就把大家要做的任務(wù)分配好,并且每一步應(yīng)該做什么都很詳細地講解。但是盡管這樣,當(dāng)我自己開始做報告的時候,看到密密麻麻的步驟,我還是有點慌,怕自己完成不好。問身邊的同學(xué),大家都有自己的任務(wù),不能給予幫助,所以還是得靠自己。于是慢慢靜下心來,按照老師給的目錄一步步做,不理解的,多讀幾遍要求,總能搞懂。在鍵盤上一個字一個字地打出來的感覺很踏實,因為是自己的成果。在做SQL的時候,問題倒不是很大,書上都有概念知識,不會的步驟看書上就能很快的解決。而且我發(fā)現(xiàn)平時都在學(xué)理論,但是到實踐的時候很多東西還是要自己摸索的,就像我上面要在SQL中建表,程
19、序中已經(jīng)標(biāo)注要顯示主鍵,但是執(zhí)行后表里一直都沒有出現(xiàn)那把小鑰匙,我操作了很久,最后才發(fā)現(xiàn),只要在表上直接設(shè)置就行,繞了好大一個彎,但是心里真的很開心。在JAVA部分就有點頭疼了,對我來說這就是一個龐大的程序,不知道從何處下手,所以我想到了合作,找到一個和我做同樣項目的同學(xué),一起探討、磨合,程序最后也成型了,喜悅可想而知!這次實驗后,我深刻地意識到實踐的重要性,平時老師說的再多,書看的再多,沒動手就什么都不是。在實踐過程中會遇到困難想放棄,但是每次都堅持下來了,現(xiàn)在看看之前的兩周其實都不算什么。只要認真踏實地一步步完成,不懂地自己摸索,有錯誤不要緊,只要不放棄,總會有解決的那天。還有讓我收獲的就
20、是合作。當(dāng)然這是建立在互惠互利的基礎(chǔ)上的。一個人蒙頭做,很容易走進死胡同,思維也變得狹隘,而且還會有挫敗感。可是合作了就不一樣了,大家都把自己的觀點說出來,很容易就會發(fā)現(xiàn)自己之前的不足在哪里了,然后加以改進。合作的好處還有就是思考問題會更全面,可以說這是一件效率很高的事情,我也樂在其中!參考文獻1錢雪忠,王燕玲,林挺.數(shù)據(jù)庫原理與技術(shù)M.:清華大學(xué),2011.2 錢雪忠,羅海馳,國俊.數(shù)據(jù)庫原理與技術(shù)課程設(shè)計M.:清華大學(xué),2014.附錄附錄1源程序部分清單附錄1 源程序部分清單附錄1.1 登錄代碼package .plat.frame;import java.awt.event.Action
21、Event;import java.awt.event.ActionListener;import java.sql.Date;import java.text.ParseException;import java.text.SimpleDateFormat;import javax.swing.utton;import javax.swing.JDialog;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JTextField;import .plat.db.UtilHepler;impo
22、rt .plat.db.today;import .plat.model.checkInfo;import .plat.model.customerInfo;import .plat.model.roomBase;import .plat.service.checkService;import .plat.service.customerService;import .plat.service.roomBaseService;import .plat.view.AppMainFrame;import .plat.view.swing.MainPanel;public class AddChec
23、kDialog extends JDialog private static AddCheckDialog editdialog;private JTextField j1, j2, j3, j4, j5, j6, j7, j8;private JLabel jr1, jr2;private utton ensure, cancel;private boolean isedit;public static AddCheckDialog instance(String text) if (editdialog != null)editdialog.dispose();editdialog = n
24、ew AddCheckDialog(text);return editdialog;public AddCheckDialog(String text) super(AppMainFrame.instance(), text + 旅客, true);setLayout(null);setSize(420, 400);setLocationRelativeTo(null);editdialog = this;j1 = new JTextField();j2 = new JTextField();j3 = new JTextField();j4 = new JTextField();j5 = ne
25、w JTextField();j6 = new JTextField();j7 = new JTextField();j8 = new JTextField();/ JLabel j11 = new JLabel(入住編號:);JLabel j21 = new JLabel(證件號:);JLabel j31 = new JLabel(客房號:);JLabel j41 = new JLabel(入住時間:);JLabel j51 = new JLabel(入住天數(shù):);JLabel j61 = new JLabel(押金);jr1 = new JLabel(續(xù)房天數(shù):);jr2 = new JL
26、abel(續(xù)房時間:);JLabel jlbto = new JLabel();ensure = new utton(確定);cancel = new utton(取消);/ j11.setBounds(60, 30, 85, 30);j21.setBounds(60, 60, 85, 30);j31.setBounds(60, 90, 85, 30);j41.setBounds(60, 120, 85, 30);j51.setBounds(60, 150, 85, 30);j61.setBounds(60, 180, 85, 30);jr1.setBounds(60, 210, 85, 30
27、);jr2.setBounds(60, 240, 85, 30);/ j1.setBounds(130, 30, 190, 30);j2.setBounds(130, 60, 190, 30);j3.setBounds(130, 90, 190, 30);j4.setBounds(130, 120, 190, 30);j5.setBounds(130, 150, 190, 30);j6.setBounds(130, 180, 190, 30);j7.setBounds(130, 210, 190, 30);j8.setBounds(130, 240, 190, 30);jlbto.setBou
28、nds(210, 86, 30, 40);ensure.setBounds(115, 260, 70, 40);cancel.setBounds(210, 260, 70, 40);/ add(j1);add(j2);add(j3);add(j4);add(j5);add(j6);add(j7);add(j8);add(jr1);add(jr2);add(j21);add(j31);add(j41);add(j51);add(j61);add(ensure);add(cancel);if (text = 入住登記) this.isedit = false; else this.isedit =
29、 true;cancel.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubAddCheckDialog.instance().dispose(););ensure.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) if (isedit = true) / 編輯String
30、 jString = j7.getText();if (!UtilHepler.isNumeric(jString) JOptionPane.showMessageDialog(null, 天數(shù)必須是一個數(shù)字!);return;if (jString.equals() JOptionPane.showMessageDialog(null, 天數(shù)不能為空!);return;/checkInfo entity = getInfo();/if (entity = null)/return;checkInfo entity=new checkInfo();entity.setCheckId(Integ
31、er.parseInt(j1.getText();entity.setContinuedDay(Integer.parseInt(jString);entity.setStatus(1);/SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss );java.util.Date date = UtilHepler.StrToDate(j8.getText();entity.setContinuedTime(date);checkService service = new checkService();service.upd
32、ateCont(entity);Callback(續(xù)房成功!); else checkInfo entity = getInfo();if (entity = null)return;checkService service = new checkService();customerService customerService = new customerService();/ 新增時驗證是否存在!customerInfo r = customerService.getEntityById(customerId, entity.getCustomerId() + );if (r = null
33、) JOptionPane.showMessageDialog(null, 該不存在,請先添加旅客個人基本信息!);return;roomBaseService roomBaseService = new roomBaseService();roomBase roomBase = roomBaseService.getEntityByValue(roomId, entity.getRoomId() + );if (roomBase = null) JOptionPane.showMessageDialog(null, 該房間號不存在!你想去此此房間?);return;if (roomBase.
34、getRoomStatus() = 1) JOptionPane.showMessageDialog(null, 該房間已有人住了!);return;service.insert(entity);Callback(訂房間成功 ,你的房間號為: + entity.getRoomId() + 位置在: + roomBase.getPoisition(););public void open(checkInfo entity) if (entity = null) this.isedit = false;j1.setVisible(false);jr1.setVisible(false);jr2.s
35、etVisible(false);j7.setVisible(false);j8.setVisible(false);j1.setText(0 + );/ j1.setEditable(false);j4.setText(today.getDate() + + today.getTime();j4.setEditable(false); else System.out.println(編輯checkid: + entity.getCheckId();j1.setText(entity.getCheckId() + );/ j1.setEditable(false);j2.setText(ent
36、ity.getCustomerId();j3.setText(entity.getRoomId() + );j4.setText(entity.getCheckInTime() + );j5.setText(entity.getCheckInDay() + );j6.setText(entity.getDepositmoney() + );j2.setEditable(false);j3.setEditable(false);j4.setEditable(false);j5.setEditable(false);j6.setEditable(false);j8.setText(today.ge
37、tDate() + + today.getTime();j8.setEditable(false);j7.setText(entity.getContinuedDay()+);ensure.setBounds(115, 300, 70, 40);cancel.setBounds(210, 300, 70, 40);this.isedit = true;setVisible(true);private checkInfo getInfo() if (j2.getText().equals() | j3.getText().equals() | j4.getText().equals() | j5
38、.getText().equals()| j6.getText().equals() JOptionPane.showMessageDialog(null, 你還有一些數(shù)據(jù)沒有填!);return null;if (!UtilHepler.isNumeric(j5.getText() JOptionPane.showMessageDialog(null, 入住天數(shù)必須是數(shù)字!);return null;if (!UtilHepler.isNumeric(j6.getText() JOptionPane.showMessageDialog(null, 押金必須是數(shù)字!);return null;
39、String customerId, roomId;int checkId = Integer.parseInt(j1.getText();customerId = j2.getText();roomId = j3.getText();System.out.println(j4.getText();SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss );java.util.Date date = UtilHepler.StrToDate(j4.getText();System.out.println(date.getT
40、ime();int checkInDay = Integer.parseInt(j5.getText();double depositmoney = Double.parseDouble(j6.getText();return new checkInfo(checkId, customerId, roomId, date, checkInDay, depositmoney);private void Callback(String text) AddCheckDialog.instance().dispose();MainPanel.instance().refresh();JOptionPa
41、ne.showMessageDialog(null, text);附錄1.2 查詢代碼 package .plat.db;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Type;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;impor
42、t java.sql.SQLException;import java.sql.Statement;import java.sql.Types;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import .plat.model.sysUser;/* * 注意利用查詢出數(shù)據(jù)庫的一條記錄映射到相應(yīng)的dao中,寫相應(yīng)的dao一定要注意字段,一定 * 要與數(shù)據(jù)庫的記錄字段相對應(yīng),大小寫可以忽略,但是字段不一致就返回錯誤的數(shù)據(jù) * * private stati
43、c Object getValueFromRs(ResultSet rs, String fieldName, Type t) throws SQLException * 此接口有個小的問題就是如果,獲取的字段值是空值或者為null,而你自己的需求就是想要獲取的字段為一個 * 默認的值,那就只需要客戶該寫這個方法,進行判斷就可以 * author Administrator * */public class DBUtil /* * 對操作的數(shù)據(jù)庫回滾 * param con 對數(shù)據(jù)庫操作所得到的 */public static void rollBack(Connection con)try
44、con.rollback(); catch (SQLException e) e.printStackTrace();/* * * param con 數(shù)據(jù)庫jdbc * param sql 執(zhí)行的sql語句 * return 返回查詢的記錄數(shù),記錄存儲在集合List里面, * 里面的元素是集合Map,key是數(shù)據(jù)庫中的字段類型,value是 * 字段類型對應(yīng)的值 * throws SQLException */public static ListMap executeQuery(Connection con, String sql) throws SQLExceptionPreparedSt
45、atement pst = null;ResultSet rs = null;try pst = con.prepareStatement(sql);rs = pst.executeQuery();return getListFromRs(rs);finallycloseRs(rs);closePst(pst);/* * 執(zhí)行sql語句,把結(jié)果集存放到List集合里,集合的元素是dao對象 * param con 數(shù)據(jù)庫得到的 * param sql 執(zhí)行查詢的sql語句 * param c 把一條條記錄要映射的dao類中的對象中去 * return * throws SQLException
46、 */public static List executeQuery(Connection con, String sql, Class c) throws SQLExceptionPreparedStatement pst = null;ResultSet rs = null;try pst = con.prepareStatement(sql);rs = pst.executeQuery();return getListFromRs(rs, c);finallycloseRs(rs);closePst(pst);/* * 得到結(jié)果集存儲到list中 * param rs 查詢的結(jié)果集 *
47、return * throws SQLException */public static ListMap getListFromRs(ResultSet rs) throws SQLExceptionResultSetMetaData md = rs.getMetaData();/得到結(jié)果集列的屬性int columns = md.getColumnCount();/得到記錄有多少列int i;ListMap list = new ArrayListMap();while(rs.next()Map map = new HashMap();for(i = 0; i columns; i+)map
48、.put(md.getColumnName(i + 1), getValueByType(rs, md.getColumnType(i + 1), md.getColumnName(i + 1);list.add(map);return list;/* * * param rs 查詢的結(jié)果集 * param c 集合元素存放的dao對象 * return * throws SQLException */public static List getListFromRs(ResultSet rs, Class c) throws SQLExceptionList list = new ArrayL
49、ist();try while(rs.next()Object o = initObjectFromRsIfExist(rs, c);list.add(o); catch (IllegalAccessException e) e.printStackTrace(); catch (InstantiationException e) e.printStackTrace();return list;/* * * param rs 查詢的結(jié)果集 * param c 結(jié)果集一條記錄,而一條記錄所對應(yīng)的dao類 * return * throws SQLException */public static
50、 Object getFirstObjectFromRs(ResultSet rs, Class c) throws SQLExceptionObject o = null;try o = initObjectFromRsIfExist(rs, c); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace();return o;/* * * param rs 查詢出來的結(jié)果集 * param type SQL type from java.
51、sql.Types * param name 數(shù)據(jù)庫記錄所對應(yīng)的字段名稱 * return 返回一條記錄的一個列值 * throws SQLException */private static Object getValueByType(ResultSet rs, int type, String name) throws SQLExceptionswitch(type)case Types.NUMERIC:return rs.getLong(name);case Types.VARCHAR:if(rs.getString(name)=null)return ;return rs.getStr
52、ing(name);case Types.DATE:if(rs.getDate(name)=null)return System.currentTimeMillis();return rs.getDate(name);case Types.TIMESTAMP:if(rs.getTimestamp(name)=null)return System.currentTimeMillis();return rs.getTimestamp(name).toString().substring(0,rs.getTimestamp(name).toString().length()-2);case Type
53、s.INTEGER:return rs.getInt(name);case Types.DOUBLE:return rs.getDouble(name);case Types.FLOAT:return rs.getFloat(name);case Types.BIGINT:return rs.getLong(name);default:return rs.getObject(name);/* * 查詢dao映射的字段是否在記錄在數(shù)據(jù)庫包含的字段 * param rs 查詢的記錄集 * param fieldName dao映射的字段 * return 如果包含在數(shù)據(jù)庫記錄集里面,返回true,
54、否則false * throws SQLException */private static boolean rsContainsFields(ResultSet rs, String fieldName) throws SQLExceptionResultSetMetaData md = rs.getMetaData();for(int i = 0; i md.getColumnCount(); i+)if(md.getColumnName(i + 1).equalsIgnoreCase(fieldName)return true;return false;/* * 這個函數(shù)與initObj
55、ectFromRsIfExist函數(shù)實現(xiàn)的功能是一樣,只是 * 沒有判斷dao中的字段是否與數(shù)據(jù)庫記錄所定義的字段是一樣的, * 沒有判斷時如果自己設(shè)置的dao字段與數(shù)據(jù)庫的字段不一致就會報異常 * param rs * param c * return * throws InstantiationException * throws SQLException * throws IllegalAccessException */private static Object initObjectFromRs(ResultSet rs, Class c) throws InstantiationEx
56、ception, SQLException, IllegalAccessExceptionObject o = c.newInstance();Method methods = o.getClass().getMethods();for(Method m: methods)if(m.getName().startsWith(set)try m.invoke(o, getParamValueFromRs(rs, m); catch (IllegalArgumentException e) throw new RuntimeException(IllegalArgumentException: +
57、 e + nMethods: + m.getName(); catch (InvocationTargetException e) throw new RuntimeException(InvocationTargetException: + e + nMethods: + m.getName();return o;/* * * 把數(shù)據(jù)庫的一條記錄映射到相應(yīng)的dao對象中, * 如果dao中的字段與數(shù)據(jù)庫字段不一致,返回的就是dao數(shù)據(jù)類型定義的默認值 * 如:dao的字段long vehicleID;而數(shù)據(jù)庫的字段是vehicle_id,那么返回的 * 就定義的默認值0. * param r
58、s 查詢的結(jié)果集 * param c 結(jié)果集一條記錄,而一條記錄所對應(yīng)的dao類 * return * throws SQLException * throws IllegalAccessException * throws InstantiationException */private static Object initObjectFromRsIfExist(ResultSet rs, Class c) throws SQLException, IllegalAccessException, InstantiationExceptionObject o = c.newInstance()
59、;/一條記錄的dao,新建對象Method methods = o.getClass().getMethods();/dao對象所有的方法String field;for(Method m: methods)/得到dao字段,如getRegdate,轉(zhuǎn)換成Regdatefield = m.getName().substring(3);/查詢dao映射的字段是否在記錄在數(shù)據(jù)庫包含的字段,dao方法對set開頭的方法進行處理/因為要將結(jié)果集映射到dao里面if(m.getName().startsWith(set) & rsContainsFields(rs, field)try m.invoke
60、(o, getParamValueFromRs(rs, m); catch (IllegalArgumentException e) throw new RuntimeException(IllegalArgumentException: + e + nMethods: + m.getName(); catch (InvocationTargetException e) throw new RuntimeException(InvocationTargetException: + e + nMethods: + m.getName();return o;/* * * param rs 查詢的結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地下排水建設(shè)項目材料買賣協(xié)議典范
- 2024技術(shù)顧問服務(wù)協(xié)議系列篇
- 2024企業(yè)債務(wù)融資協(xié)議模板
- 2024屆安徽鳳臺一中高三3月教學(xué)質(zhì)量檢測試題數(shù)學(xué)試題理試題
- 2024槽棎施工質(zhì)量保障協(xié)議范本
- 2024年房產(chǎn)開發(fā)融資居間協(xié)議模板
- 2024建筑外保溫服務(wù)協(xié)議樣式
- 2024年商業(yè)交易貨樣協(xié)議模板
- 2024年度美容院加盟協(xié)議示例
- 2024全職員工派遣協(xié)議范本
- 社會學(xué)概論第五章 社會互動課件
- 【教學(xué)課件】第3單元《土和火的藝術(shù)》示范課件
- 2022全國119消防安全日消防安全主題班會課件
- 煙草500品牌知識匯總(題庫版)
- 豐胸小知識課件
- 同意未成年人姓名變更的聲明
- 《統(tǒng)計學(xué)基礎(chǔ)(英文版·第7版)》教學(xué)課件les7e-05-01
- 善待他人關(guān)愛自己主題班會-課件
- 測試計劃-10篇模板
- 蘇科版2022-2023二年級上冊勞動與技術(shù)《07小鳥歸巢》教案
- 預(yù)警評分系統(tǒng)課件
評論
0/150
提交評論