Java应用开发技术实例教程-全套课件_第1页
Java应用开发技术实例教程-全套课件_第2页
Java应用开发技术实例教程-全套课件_第3页
Java应用开发技术实例教程-全套课件_第4页
Java应用开发技术实例教程-全套课件_第5页
已阅读5页,还剩219页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java应用系统开发计算机工程学院软件技术专业了解课程配置与熟悉开发环境01_课程简介与开发环境.ppt02_常用组件_事件处理.ppt03_布局与容器.ppt04_菜单和工具栏的设计.ppt05_GUI综合训练一.ppt06_Java对象的容纳.ppt07_JDBC数据库技术.ppt08_综合训练二.ppt09_表格数据处理.ppt10_综合训练三.ppt11_Java多线程.ppt12_网络编程.ppt内容提要4课程介绍123Gui技术概述Swt开发基础课程介绍-1是一门以项目开发实践为主的课程;是一门Java技术核心课程,在课程体系中承上启下;课程内容包含下面Java高级技术JavaGUI技术与可视化化开发工具;Java对象的容纳(Java集合框架)与泛型;JDBC数据库技术;Java多线程技术;Java网络编程技术;课程介绍-2课程考试方式(形成性考核)平时60%考勤、课堂表现10%单元项目开发20%阶段测试30%综合项目开发40%1、学生成绩管理系统3.0版本;2、聊天系统课程介绍-3教材:Java数据库与网络编程第1章、第2章:GUI开发,弱化但不能去掉第3章:Java集合框架+泛型,重要第4章、第5章:数据库编程、高级数据库控件,重点第6章:多线程,重点第7章:网络编程,重点为什么是Swt/JFace—what?1、AWT技术:未真正流行过,也早已成为历史1995“最大公约数”设计原则2、Swing技术:JavaGUI技术的里程碑1998不依赖平台、可更换LookandFeel、mvc设计模式3、SWT

/JFace:开发基于Java的高效的专业化的界面的技术旁系“最小公倍数”设计原则吸取AWT、Swing优点JavaGUI环境安装Eclipse平台+WindowBuilder插件程序编辑、调试、打包编写程序;运行程序、调试程序程序打包Eclipse编辑器的高效使用-1代码自动生成快捷键的使用内容辅助【Alt+/】大纲显示【Ctrl+O】类自动导入【Ctrl+Shift+O】自动注释【Ctrl+/】【Ctrl+Shift+/】Eclipse编辑器的高效使用-代码重构 Eclipse为Java项目提供了强大的自动重构工具,支持Java项目、类以及类成员的多种类型的自动重构。从整体上看,Eclipse中的重构分为三大类型。改变代码物理结构的重构,如对项目元素进行Rename或Move操作。在类层次上改变代码结构的重构,如将类成员进行PushDown或Pullup操作,即将类成员从父类中直接移到它的子类或者将其从子类中上移到其父类中。改变类内部代码的重构,如对方法进行的ExtractMethod操作,即将方法中的某段代码提取为单独的方法。实战演练1.安装配置基于EclipseWindowBuilder的Java可视化开发环境;2.熟悉WindowBuilder开发环境3.自学并熟悉Eclipse编辑器的高级使用(包括代码自动生成、常用快捷键的使用、代码重构等)

深圳职业技术学院

常用组件的使用、事件交互计算机工程学院软件技术专业Java应用系统开发内容提要4Swt程序基本结构123Swt基本组件的设计登录程序的设计与实现交互功能设计——事件处理单元项目1:第1个Swt程序初始界面点击按钮后界面Swt程序结构分析1、Shell对象:Shell对象:一个Shell对象就是一个窗口。可以在上面放置各种部件创建丰富的图形界面。2、createContents()方法负责窗体以及窗体中的其它组件的创建;3、open()方法则负责打开窗体,并通过一个while循环实现JavaGUI程序与操作系统间事件的交互,在事件轮询中Display对象起着关键作用。第1个Swt程序的要点(3)Display:与操作系统沟通的桥梁它负责swt和操作系统之间的通信。它将swt/JFace的各种调用转化为系统的底层调用,控制操作系统为swt分配的资源。同时我们也可以通过Display对象得到操作系统的一些信息。Display是一个“幕后工作者”,它为swt/JFace提供支持,但是你并不能够从某个用户界面中看到它的影子。readAndDispatch()得到事件并且调用对应的监听器进行处理单元项目:Login登录界面设计单元项目2_2:信息显示界面的设计实战演练:简单计算器的界面设计单元项目:登录程序的功能实现登录程序的功能实现要点1、如果在SWT窗口中实现参数传递?2、如何在信息窗口中实现信息的显示?3、如何创建信息登录窗口的Shell对象?4、如何在打开目标窗口的同时关闭现有窗口?事件处理模型Java2(即JDK1.1)及之后的版本使用委托事件模型对组件上发生的事件进行监听和处理。事件监听器方案事件监听器类的三种编写方法1、内部匿名类EclipseWindowBuilder自动事件处理代码框架采用的方法;特点:只能用于单个组件,代码紧凑,安全性高。事件监听器类的三种编写方法2、实名内部类方式特点:可用于同一个界面中的多个组件;可适当减少代码冗余,又具有较高安全性实战:以内部类的方式编写【登录】与【重置】按钮的事件监听器及事件处理代码。事件监听器类的三种编写方法独立监听器类特点:用于多个不同的界面都使用了同样的监听器类的情况,这样可以大幅度减少代码冗余。实战:采用一个独立监听器类设计项目中按钮【登录】、【重置】以及【重新登录】的事件处理事件监听器的两种实现方式1、实现监听器接口2、

从事件适配器派生SWT类库对具有两个或两个以上方法的事件监听器接口都设计了一个对应的事件适配器类,对各个方法做了空实现。SWT应用程序的事件监听器就可以从相应的事件适配器类派生,在事件监听器类中只实现需要的方法。3、实战:采用实现接听器接口的方式实现登录项目的事件监听器4.3常用事件监听器文本框输入验证的实现两个问题:什么事件?如何实现文本的验证?关于事件文本框(Text)组件有一个事件ModifyEvent,当组件的文本内容被改变时发生。该事件的监听器ModifyListener有一个方法ModifyText,在文本内容发生改变时执行。因此,可以设计ModifyEvent事件的监听器,在ModifyText方法中监测用户输入内容,防止输入非法用户名。正则表达式正则表达式:用于描述文本规则的工具例子:\bhi\b:精确查找单词hi,\b代表单词的分界0\d\d\d-\d\d\d\d\d\d\d\d:电话号码格式0\d{3}-\d{8}:与上同,避免重复输入多次鼠标事件(1)1MouseListener接口三个方法:publicvoidmouseDoubleClick(MouseEvente);publicvoidmouseDown(MouseEvente);publicvoidmouseUp(MouseEvente);鼠标事件(2)2MouseMoveListener接口通过实现MouseMoveListener接口类的实例响应鼠标移动时发生的MouseEvent事件。MouseMoveListener接口提供publicvoidmouseMove(MouseEvente)方法,用来响应鼠标移动事件。鼠标事件(3)3MouseTrackListener接口三个方法:publicvoidmouseEnter(MouseEvente);publicvoidmouseExit(MouseEvente);publicvoidmouseHover(MouseEvente);例4.3workspace\EventTest\src\ExMouseEvent.java键盘事件1KeyListener接口两个方法:publicvoidkeyPressed(KeyEvente);publicvoidkeyReleased(KeyEvente);2TraverseListener接口按Tab、Enter、Arrow等键可以产生TraverseEvent事件。该对象的doit变量指要不要对这个事件做出响应,即用户按这些键时是否移动焦点。例4.4workspace\EventTest\src\ExKeyEvent.java焦点事件1FocusListener接口两个方法:publicvoidfocusGained(FocusEvente);publicvoidfocusLost(FocusEvente);为例4.4项目的text1文本框添加焦点事件workspace\EventTest\src\ExKeyEvent.java组件控制事件当移动或改变组件大小时触发ControlEvent类型的事件。SWT通过ControlListener监听器监听组件控制事件。该接口有两个方法:publicvoidcontrolMoved(ControlEvente);publicvoidcontrolResized(ControlEvente);例4.6workspace\EventTest\src\ExControlEvent.java选择事件通过实现SelectionListener接口响应组件选择事件。SelectionListener接口有两个方法:publicvoidwidgetSelected(SelectionEvente);publicvoidwidgetDefaultSelected(SelectionEvente);例4.7workspace\EventTest\src\ExSeleEvent.java事件及其监听器小结事件监听器监听器方法组件ArmEventArmListenerwidgetArmed()MenuItemControlEventControlListenercontroMoved(),controlResized()Control,TableColumn,TrackerDisposeEventDisposeListenerwidgetDisposed()WidgetFocusEventFocusListenerfocusGained(),focusLost()ControlHelpEventHelpListenerhelpRequested()Control,Menu,MenuItemKeyEventKeyListenerkeyPressed(),keyReleased()ControlMenuEventMenuListenermenuHidden(),menuShown()MenuModifyEventModifyListenermodifyText()CCombo,Combo,Text,StyledTextMouseEventMouseListenermouseDoubleClick(),mouseDown(),mouseUp()ControlMouseMoveListenermouseMove()ControlMouseTrackListenermouseEnter(),mouseExit(),mouseHover()ControlPaintEventPaintListenerpaintControl()ControlSelectionEventSelectionListenerwidgetDefaultSelected(),widgetSelected()Button,CCombo,Combo,CoolItem,CTabFolder,List,MenuItem,Sash,Scale,ScrollBar,Slider,StyledText,TabFolder,Table,TableCursor,

TableColumn,TableTree,Text,ToolItem,TreeShellEventShellListenershellActivated(),shellClosed(),shellDeactivated(),shellDeiconified(),shellIconified()ShellTraverseEventTraverseListenerkeyTraversed()ControlTreeEventTreeListenertreeCollapsed(),treeExpanded()Tree,TableTreeVerifyEventVerifyListenerverifyText()Text,StyledText实战演练1:简单计算器的功能实现实战演练2:输入内容验证的实现

深圳职业技术学院

使用布局与容器计算机工程学院软件技术专业Java应用系统开发内容提要4布局管理122几种Swt的常用布局423使用布局与容器进行界面设计单元项目:计算器界面的设计问题引入(why?)手工布局的本质及问题?绝对位置与大小;自适应性差、可移植性差;布局管理的实质布局管理器机制实际上是一种委托管理机制,即由布局管理类控制容器中的组件的大小和位置。控制的内容包括:容器与组件的关系,容器中各组件的关系两个方面。布局相关术语Composite:Compoiste和Shell一样,是可以容纳其它组件的组件,称为容器。在讨论布局时,必然会涉及到容器,布局管理就是指对容器中的组件进行布局管理。clientArea与trim:Composite由clientArean(客户区)和trim(区标)共同构成,实际上是容器的里边缘与外边缘间的间距。margin:称为边距,指组件与它的容器之间的间距。space:容器中组件间的间距。使用布局管理类(How?)1、如何设置容器的布局类型?2、如何使用布局管理进行布局设计?使用容器的layout属性使用组件的layoutData属性Swt常用布局类(what?)FillLayout:填充式布局,在单行或者单列中放置相同大小的组件。RowLayout:行列式布局,按行放置组件,一行放置不下,会自动使用多行。GridLayout:网格式布局,在网格中放置组件,组件可以占用指定的一个或几个网格。FormLayout:表格式布局,是一种非常灵活、精确的布局,但也是最复杂的一种布局方式。FillLayout示例在窗体中创建3个按钮,窗体使用填充式布局。要求组件按行排列,上下、左右边距为8像素,按钮之间间距为5像素。FillLayout特征在单行或者单列中放置组件,强制这些组件为同一大小。组件初始状态下都和最高的容器组件一样高,和最宽的组件一样宽。组件不会换行,且不能定制单个组件的边距(margin)和间距(spacing)。FillLayout布局中,组件不允许有特性,因此,该布局中的各组件没有layoutData属性。RowLayout示例按图示在窗体中创建组件对象,窗体使用RowLayout布局。要求组件上下边距为10像素、左右边距为5像素,组件间距为5像素。按钮B2大小为(30,40)。RowLayout特征

行列式布局RowLayout按行或列排列包含在容器中的组件。不强制所有的组件采用同一大小,超出一行(列)空间时会自动换行(列)。可通过组件的layoutData对容器中的每个组件进行个性化设置。GridLayout布局示例GridLayout布局是一种实用且功能强大的布局,使用最为普遍,也是EclipseVE的默认布局。GridLayout布局将容器分为网格,组件被分别放置在不同的网格中。相比FillLayout布局和RowLayout布局来说,网格布局中的组件有较多的可配置的属性,可以通过组件的layoutData属性对组件的特性进行较为精确的个性化的设置。计算器界面设计计算器功能的实现实现要点事件监听器类型?功能实现基本思路?数字键和小数点键的处理运算符键的处理等于符号键的处理退格键、清除键、关闭键的处理实战演练1:学生成绩管理系统V1.0界面设计

深圳职业技术学院

Swt菜单设计与工具栏设计Java应用系统开发计算机工程学院软件技术专业内容提要4Swt工具栏设计122Swt主菜单、弹出式菜单设计423对话框的使用424文本编辑器的实现单元项目:文本编辑器菜单、工具栏设计(一)工具栏设计GUI程序中的工具栏(ToolBar)是显示位图式按钮的控制条,每个位图式按钮称为一个工具项(ToolItem),用来执行程序中的一个命令。一般出现工具栏上的按钮所执行的是一些比较常用的命令,方便了用户的使用。Swt工具栏组件动态工具栏(CoolBar类、CoolItem类)许多应用程序具有多个工具栏,且工具栏可以被拖到不同的位置(如从窗口上部拖到底部),甚至可以拖离原位置而成为单独的一个窗口,可以重新安排工具栏中的工具项,可拖曳分隔条,工具按钮可以换行等。SWT提供的动态工具栏(CoolBar)具有类似特性,用户可以重新安排动态工具栏中的工具条或工具项(CoolItem),可以拖曳工具条或工具项之间的分隔条、对于动态工具栏中的工具条或工具项如何换行以及工具项显示的顺序等进行控制。Swt动态工具栏CoolBarCoolItemToolBarToolItemToolItemCoolItemToolBarToolItemToolItemsetControl方法文本编辑器动态工具条的设计(二)菜单菜单是一系列命令的列表,它们为应用程序提供了快速执行特定方法和程序逻辑的用户接口。菜单主菜单:窗口顶端的菜单栏弹出式菜单(或称上下文菜单)菜单项:顶层菜单项子菜单菜单项文本编辑器主菜单的设计文本编辑器弹出式菜单的设计(三)在文本编辑器中使用对话框文本编辑器版本信息通过文件对话框打开文件SWT/JFace对话框从对话框的用途上,对话框分为:1、消息对话框(MessageDialog)主要用于显示用户提示。2、输入对话框与向导对话框(InputDialog和WizardDialog)用于程序要求用户输入交互数据的场合。输入对话框一次只允许输入一个字符串数据,用于输入数据很少的场合。向导对话框可以根据需要,设计数据输入向导页,完成复杂的数据输入交互。3、特定应用类对话框目录对话框(DirectoryDialog)文件对话框(FileDialog)颜色对话框(ColorDialog)字体对话框(FontDialog)消息对话框(MessageDialog)(1)五种类型ERROR:错误类型,值为1;INFORMATION:一般信息提示,值为2;NONE:一般消息,没有表示图标,值为0;QUESTION;提问消息,值为3;WARING;警告消息,值为4消息对话框(MessageDialog)(2)打开标准消息对话框的静态方法打开一个标准的错误消息对话框staticbooleanopenError(Shellparent,Stringtitle,Stringmessage)打开一个标准的消息提示对话框staticbooleanopenInformation(Shellparent,Stringtitle,Stringmessage)打开一个标准的确认对话框staticbooleanoperConfirm(Shellparent,Stringtitle,Stringmessage)打开一个标准的提问对话框staticbooleanopenQuestion(Shellparent,Stringtitle,Stringmessage)打开一个标准的警告对话框staticbooleanoperWarning(Shellparent,Stringtitle,Stringmessage)定制消息对话框可以通过MessageDialog的构造器方法定制满足要求的对话框publicMessageDialog(ShellparentShell,//对话框父窗口 StringdialogTitle,//对话框标题 ImagedialogTitleImage,//标题栏图标 StringdialogMessage,//消息正文 intdialogImageType,//类型标示图标 String[]dialogButtonLabels,//按钮上字串数组 intdefaultIndex)//默认按钮索引文本编辑器版本信息提示的实现为【系统】子菜单下的【关于】菜单项添加事件处理,事件处理框架代码中编写代码如下所示。

pushAbout.addSelectionListener(neworg.eclipse.swt.events.SelectionListener(){ publicvoidwidgetSelected(org.eclipse.swt.events.SelectionEvente){

MessageDialog.openInformation(sShell,"系统信息","文本编辑器1.0版"); } publicvoidwidgetDefaultSelected(org.eclipse.swt.events.SelectionEvente){ } });文本编辑器的实现(1)主菜单、工具栏、弹出式菜单事件openFile()createFile()saveFile()调用调用调用基本思路:菜单、工具栏中都需要实现文件打开、创建和保存的操作,为实现代码复用,分别定义文件打开、创建和保存的方法。文本编辑器的实现(2)文本编辑器的实现(3)文本编辑器的实现(4)文本编辑器的实现(5)为【打开】、【新建】、【保存】菜单项很工具栏添加事件处理实现【剪切】、【粘贴】、【复制】和【全选】功能使用TextArea提供了操作系统剪切板的相关方法textArea.cut()textArea.paste()textArea.copy()textArea.selectAll()实战演练:学生成绩管理系统V1.0相关界面设计

深圳职业技术学院

综合训练一Java应用系统开发计算机工程学院软件技术专业学生成绩管理系统V1.0——界面设计管理员子系统界面年级信息管理与班级管理界面学生注册与教师注册界面学生成绩管理系统V1.0——系统集成实现管理员的登录实现管理员子系统功能的集成(1)实现管理员子系统菜单事件处理包括年级设置、班级设置、学生注册、教师注册、关于和退出等菜单项。(2)实现管理员子系统工具栏事件处理包括学生注册和教师注册工具项事件处理。项目要求1、统一文件名2、统一代码涉及到的组件对象名;3、完成时间:教材第4章内容开始前。

深圳职业技术学院

Java对象的容纳Java应用系统开发计算机工程学院软件技术专业内容提要4Java集合框架、集合类的层次结构122List接口及实现类的使用423Set接口及实现类的使用424Map接口及实现类的使用45对象的持久化概念与方法单元项目1——电话薄程序单元项目1——电话薄程序主要功能包括:联系人信息以文件形式保存;List控件中显示所有联系人的信息;具有添加、删除联系人的基本功能;具有按姓名快速搜索联系人的功能,在搜索文本框中输入搜索关键字,在list中显示姓名中包含搜索关键字的所有联系人信息单元项目1——电话薄程序核心问题:1、数据的组织;2、数据的存储;3、快速搜索;Java集合框架Java2之前没有完整集合框架;Java集合框架由Java集合类以及相关操作构成的体系结构包含3块内容:接口、接口的实现、集合运算的算法;Java集合框架Collection接口的常用方法Iterator使用Lists实现电话薄程序(1)程序中联系人数据的表示?一个联系人?一组联系人?使用Lists实现电话薄程序(2)联系人信息的显示?什么时候显示?如何显示?使用Lists实现电话薄程序(3)【添加联系人】功能的实现【删除联系人】功能的实现联系人快速搜索功能的实现使用对象持久化保存电话薄联系人对象1、Java对象持久化技术将Java对象状态进行保存的技术2、三种技术使用Java的序列化技术,即I\O流;使用XML技术;使用对象数据库技术3、电话薄程序中使用I/O流进行对象保存只有实现了java.io.Serialization的类的对象才能被序列化;使用ObjectOutputStrem/ObjectInputStream进行对象的读取。试一试?实现“phonelist.list”文件中联系人信息的显示。使用Set实现电话薄程序(1)知识要点:Set中每个对象必须唯一,不能重复,如何保证对象的唯一性?最为常用的两个Set:HashSet与TreeSet。HashSet是为优化查询速度而设计的无序Set,使用hashCode()获得对象的存放位置。hashCode是根据对象特性,采用一定的算法,获得的具有唯一性的数值;哈希表查找的基本思想是:根据当前待查找数据的特征,以记录关键字为自变量,设计一个哈希函数,依该函数按关键码计算元素的存储位置,并按此存放;查找时,由同一个函数对给定值key计算地址,将key与地址单元中元素关键码进行比较,确定查找是否成功。哈希方法中使用的转换函数称为哈希函数(杂凑函数),按这个思想构造的表称为哈希表(杂凑表)。哈希方法的关键:构造好的哈希函数;指定解决冲突的方案使用Set实现电话薄程序(2)例:几个常用的哈希码的算法。1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串所在的堆空间相同,返回的哈希码也相同。3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integeri1=newInteger(100),i1.hashCode的值就是100。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。使用Set实现电话薄程序(3)1、在Person类中实现equals()方法;2、在Person类中定义hashCode()方法;3、使用HashSet重新实现电话薄程序Java集合框架中的MapsMap接口不继承于Collection;Map用于容纳“键_值对”,即“key_value”;Key和Value都只能是对象;Key值必须唯一,不能重复,(通过equals()方法保证);常用的Map实现类:HashMap和TreeMapHashMap是一个无序MapTreeMap是一个有序MapMap接口的常用方法随机数生成性能测试程序对java.util.Random类产生随机整数的性能进行测试使用HashMap实现随机数性能测试程序1、Key对象与Value对象Key对象:RandomIntValue对象:Integer2、程序功能的实现

深圳职业技术学院

Java应用系统开发计算机工程学院软件技术专业数据库开发环境配置与JDBC连接基础内容提要4JDBC技术体系架构123数据库开发环境配置JDBC数据库连接方法与步骤

JDBC数据库基本操作45JDBC数据库应用程序开发13JDBC技术体系(1)JDBC(JavaDatabaseConnectivity)体系结构SQLServer2012安装(2)SQLServer2012版本及区别Enterprise、Development、Workgroup、Standard以及Express企业版只能安装在windowsserver或其它server版本上WindowsXP操作系统,一般安装SQLServerDevelopment版本或者Express版本Development版本的功能与Enterprise版本一样,授权不同SQLServerExpress适用于小型应用程序或者单机应用程序,功能上有一定的限制,如只能使用一个处理器,支持最大数据库大小为4GB等SQLServer2012Express安装SQLServer2005ManagementStudioExpress安装SQLServer2012配置(3)SQLServer2012TCP/IP协议配置点击“开始”,选择“程序->MicrosoftSQLServer2005->配置工具->SQLServer配置管理器”,打开配置管理器窗口。选择“SQLEXPRESS的协议”,在右边窗口中右键点击“TCP/IP”启用该协议SQLServer2012端口配置右键单击“TCP/IP”,选择【属性】项,打开TCP/IP属性配置窗口,选择【IP地址】属性页,将IPALL栏中的TCP端口改为:1433,选择【应用】,完成TCP/IP端口配置JDBC驱动包下载与安装(5)SQLServer2012的JDBC版本及区别MicrosoftSQLServerJDBCDriver2.0MicrosoftSQLServerJDBCDriver3.0MicrosoftSQLServerJDBCDriver4.0注意:MicrosoftSQLServerJDBCDriver4.0不支持windowsXP操作系统,如果使用windowsXP操作系统,需要采用MicrosoftSQLServerJDBCDriver2.0或MicrosoftSQLServerJDBCDriver3.0版本MicrosoftSQLServerJDBCDriver3.0下载、安装在微软官方网站下载MicrosoftSQLServerJDBCDriver3.0驱动程序,驱动程序名称为:sqljdbc_3.0.1301.101_chs.exe运行sqljdbc_3.0.1301.101_chs.exe,将zip文件解压到%安装目录%下“MicrosoftSQLServerJDBCDriver3.0”中在Eclipse工具中配置JDBC(1)选择【Windows】|【Proferences】|【Java】|【InstalledJREs】,选择jre6,点击右边的【Edit…】按钮,进入JRE编辑窗口。在Eclipse工具中配置JDBC(2)在EditJRE窗口中,选择右边按钮面板中的【AddExternalJREs…】按钮,将MicrosoftSQLServerJDBCDriver3.0安装目录下的sqljdbc4.jar文件添加到JREsystemlibraries中在Eclipse工具中配置JDBC(3)注意:MicrosoftSQLServerJDBCDriver3.0安装包中包括2个JAR类库:sqljdbc.jar和sqljdbc4.jar。其中sqljdbc.jar类库提供对JDBC3.0的支持,要求使用5.0版的Java运行时环境(JRE)。而sqljdbc4.jar类库提供对JDBC4.0的支持。它不仅包括sqljdbc.jar的所有功能,还包括新增的JDBC4.0方法。sqljdbc4.jar类库要求使用6.0或更高版本的Java运行时环境(JRE)JDBCAPIJDBC相关API放置在java.sql包与javax.sql包中,java.sql包含了数据库处理的所有基本功能,javax.sql提供数据库操作扩展功能,如数据库连接池、分布式事务等特性JDBC编程常用类Class类//用于加载数据库驱动DriverManager类//用于创建数据库连接Connection类

//数据库连接对象Statement类

//用于执行SQL语句并返回执行结果的对象ResultSet类

//查询结果集对象JDBC连接连接基本过程(1)加载数据库驱动方法Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");创建数据库连接对象方法从con=DriverManager.getConnection(url,username,password);其中url中指明jdbc子协议(格式与数据库相关)、数据库系统所在IP地址及使用的端口号、数据库实例名,username,password分别表示用户名和密码创建执行SQL语句的Statement对象方法 stmt=con.createStatement()JDBC连接连接基本过程(2)执行数据库查询、插入、删除以及修改等操作的方法 Statement对象.executeQuery(),方法的返回值为一个ResultSet结果集对象,ResultSet对象用于存放满足查询条件的查询结果集,通过该对象的相关方法可以遍历结果集中的记录向数据库表执行Insert、Update、Delete以及CreateTable、DropTable等操作的方法 Statement对象.executeUpdate(),方法返回结果为一个整数值,表示数据更新的行数遍历ResultSet结果集的方法 ResultSet.next(),该方法操作结果集的游标,初始状态指向第一条记录前的表头,每调用一次,指向下一条记录,直到结尾,到达结尾时返回false获取ResultSet结果集游标所指记录中的某个字段的方法 ResultSet.getXXX(),该方法用于获取当前游标所指记录中的某个字段。其中“XXX”为字段类型,方法的参数为字段名示例项目:读出并显示Books表中的数据JDBC数据库连接步骤(1)导入JDBCAPI包importjava.sql.*;publicclassDBDataDisplay{

publicstaticvoidmain(String[]args){

······

}}JDBC数据库连接步骤(2)定义JDBC连接常见对象publicstaticvoidmain(String[]args){

Connectioncon=null;//数据库连接对象

Statementstmt=null;//用于执行SQL语句并返回执行结果的对象

ResultSetrs=null;//查询结果集对象}JDBC数据库连接步骤(3)加载JDBC驱动程序publicstaticvoidmain(String[]args){

····· //加载数据库驱动

try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); }catch(ClassNotFoundExceptione){ System.out.println("加载驱动出错"); e.printStackTrace(); }}JDBC数据库连接步骤(4)创建数据库连接对象publicstaticvoidmain(String[]args){ ······ //创建数据库连接 Stringurl="jdbc:sqlserver://localhost:1433;DatabaseName=test"; Stringusername="sa"; Stringpassword="123456"; try{ con=DriverManager.getConnection(url,username,password); }catch(SQLExceptione){ System.out.println("创建数据库连接对象出错"); e.printStackTrace(); }}JDBC数据库连接步骤(5)创建用于执行SQL语句的Statement对象publicstaticvoidmain(String[]args){ ······ //建立用于执行SQL语句的Statement对象

try{ stmt=con.createStatement(); }catch(SQLExceptione){ System.out.println("创建Statement对象出错"); e.printStackTrace(); }}JDBC数据库连接步骤(6)执行SQL语句,并获得执行结果publicstaticvoidmain(String[]args){ ······ //通过Statement对象,执行相应的SQL语句

try{ rs=stmt.executeQuery("select*frombooks"); }catch(SQLExceptione){ System.out.println("执行查询时出错"); e.printStackTrace(); }}executeQuery()用于从数据库表或者视图中查询满足条件的记录,返回值为一个ResultSet结果集对象executeUpdate()用于向数据库表中执行Insert、Update、Delete以及CreateTable、DropTable等操作。返回结果为一个整数值,表示数据更新的行数JDBC数据库连接步骤(7)处理查询结果publicstaticvoidmain(String[]args){ ······ //处理结果集

try{ while(rs.next()){ System.out.print(rs.getString("BookNo")+"\t"); System.out.print(rs.getString("BookName")+"\t"); System.out.print(rs.getString("Author")+"\t"); System.out.print(rs.getString("Publisher")+"\t"); System.out.print(rs.getFloat("Price")+"\t");

} }catch(SQLExceptione){ System.out.println("处理查询结果集时出错"); e.printStackTrace(); }}JDBC数据库连接步骤(8)ResultSet对象用于存放满足查询条件的查询结果集,通过next()方法可以遍历结果集中的记录next()操作结果集的一个游标,初始状态指向第一条记录前的表头,每调用一次,指向下一条记录,直到结尾,到达结尾时返回falsegetXXX()用于获取当前游标所指记录中的某个字段。其中“XXX”为字段类型,方法的参数为字段名关闭对象publicstaticvoidmain(String[]args){ //关闭相关对象

try{ rs.close(); stmt.close(); con.close(); }catch(SQLExceptione){ e.printStackTrace(); }}数据库的其它操作给Books表增加一条记录;从Books表中删除一条记录;修改Books表中的一条记录。试一试:使用jdbc-odbc桥连接数据库1、Odbc数据源的创建2、数据库驱动?(sun.jdbc.odbc.JdbcOdbcDriver)3、数据库连接协议?(jdbc:odbc:数据源)实战演练1.安装MySQL数据库并进行开发协议和端口配置2.在Eclipse中安装连接MySQL数据库驱动程序包

深圳职业技术学院

Java应用系统开发计算机工程学院软件技术专业综合训练二学生成绩管理系统V2.0主要实现的功能包括:以系统数据库中的用户表User数据为依据,实现管理员子系统的登录实现年级与班级数据管理,包括年级信息的显示、年级数据的增加和删除;班级信息的显示,班级数据的增加和删除实现学生与教师信息的注册单元项目开发、运行1.导入学生成绩管理系统v1.02.系统数据库与相关数据表设计UsersTeacherGradeClassStudent3.通用数据库操作类设计4.系统功能实现管理员子系统登录功能年级管理功能班级管理功能学生注册功能5.系统运行与调试1.导入学生成绩管理系统v1.02.系统数据库与相关数据表设计在SQLServer中建立studentscoreDB数据库,并创建相应的数据表3.通用数据库操作类设计CommonADOImportjava.sql.*;publicclassCommonADO{privateStringDBDriver=null;privateStringurl=null;

privateStringuser=null;

privateStringpassword=null;

privateConnectionconn=null;

privateStatementstmt=null;

privateResultSetrs=null;

privatestaticfinalCommonADOcommonADO=newCommonADO();

privateCommonADO(){DBDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";url="jdbc:sqlserver://:1433;DatabaseName=studentscoreDB";user="sa";password="123456";try{//1.加载驱动Class.forName(DBDriver);//2.创建数据库的连接conn=DriverManager.getConnection(url,user,password);//3.创建执行SQL语句的表达式stmt=conn.createStatement();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();

}}

publicstaticCommonADOgetCommonADO(){ returncommoonADO;}

publicResultSetexecuteSelect(Stringsql){if(sql.toLowerCase().indexOf("select")!=-1){ try{ rs=stmt.executeQuery(sql); }catch(SQLExceptione){ e.printStackTrace(); }}

returnrs;} publicintexecuteUpdate(Stringsql){intresult=0; if(sql.toLowerCase().indexOf("update")!=-1|sql.toLowerCase().indexOf("insert")!=-1|sql.toLowerCase().indexOf("delete")!=-1){try{ result=stmt.executeUpdate(sql);}catch(SQLExceptione){ e.printStackTrace();}} returnresult;}publicConnectiongetConn(){ returnconn;}publicStatementgetStmt(){ returnstmt;}publicvoidcloseDB(){ try{ rs.close(); stmt.close(); conn.close(); }catch(SQLExceptione){ e.printStackTrace(); }}}4.系统功能实现(演示)管理员子系统登录功能年级管理功能班级管理功能学生注册功能5.系统运行与调试实战演练实现学生成绩管理系统V2.0教师注册功能,具体要求:实现教师照片上传功能,教师照片文件存放在项目的picTch目录下,文件以教师编号命名实现教师注册功能,包括向数据库表teacher中插入新的教师数据,向用户表users中插入该教师的用户信息,教师用户初始密码设为“123”实现【下一个】教师注册功能

深圳职业技术学院

Java应用系统开发计算机工程学院软件技术专业表格数据处理内容提要4创建Table对象、TableViewer对象、表格列123TableViewer控件数据显示机制数据实体类与数据工厂类44表格数据的显示5表格数据的编辑6表格数据的排序单元项目:基于表格的books表数据显示功能要求:基于books创建Table、TableViewer组件创建books表格数据显示的实体类、数据生成类基于表格显示books中的数据实现表格单元格数据编辑实现表格数据排序,单击价格列,按价格对图书数据进行排列表格创建与设置(1)创建表格步骤:创建与设置Table表格为表格创建表格列通过TableViewer实现对表格数据的显示、编辑、筛选排序等表格操作表格创建(1)TableViewer组件:Jface中的组件,在SWTTable组件基础上采用MVC模式扩展而来,TableViewer把Table作为一个实例变量,并实现了对Table功能的扩展。在工程DBConnect中新建窗口类,类名为BookTableDemo在窗口中添加Jface面板中的TableViewer组件,并设置相关属性。单元项目开发、运行Table控件主要属性说明:fullSelection:该属性被设置为FULL_SELECTION时,选择一行时所有列均被选择headerVisible:用于表头设置,设置为true则显示表头行,设置为false则不显示表头行linesvisible:用于设置表格行列分隔线,设置为true则出现分隔线,否则不出现分隔线selectionStyle:用于设置行选择特性,设置为SINGLE,只可以在表格中选择单行,设置为MULTI则可以选择多个表行style:设置为CHECK,则每个表行前出现复选框。表格列创建(2)为表格添加表格列组件并设置相关属性,主要属性如下:alignment:设置表头的列标题的对齐方式image:设置列标题的图标,为null则不显示图标resizable:设置列宽改变特性,设置为true表示用户可以拖动当前列和下列间的分隔线改变列宽,设置为false,列宽为固定值,不可改变text:设置列标题width:设置列的宽度表格数据显示模式(4)

TableViewer控件数据显示模式TableViewer控件采用“数据库表—>实体类—>实体对象集—>表格显示”的数据显示模式TableViewer控件的数据显示模式的优点:将表格记录以实体类形式进行封装,使用面向对象的封装特性维护数据,有利于数据的维护与处理,程序代码也更为紧凑将数据封装在一个实体类中,在数据传递时方便许多,可以将实体类作为一个参数在方法与方法之间来回传递将显示与底层数据进行分离,大大的提高了系统的可移植性。底层数据库系统的变化不会影响到程序逻辑与程序交互界面数据表的实体类(5)publicclassBookEntity{ privateStringbookNum=null; privateStringbookName=null; privateStringauthor=null; privateStringpublisher=null; privatefloatprice=0; privateinttotal=0; publicStringgetBookNum(){ returnbookNum; } publicvoidsetBookNum(StringbookNum){ this.bookNum=bookNum; } publicStringgetBookName(){ returnbookName; } publicvoidsetBookName(StringbookName){ this.bookName=bookName; } publicStringgetAuthor(){ returnauthor; }

在DBConnect工程中添加实体类BookEntitypublicvoidsetAuthor(Stringauthor){ this.author=author;}publicStringgetPublisher(){ returnpublisher;}publicvoidsetPublisher(Stringpublisher){ this.publisher=publisher;}publicfloatgetPrice(){ returnprice;}publicvoidsetPrice(floatprice){ this.price=price;}publicintgetTotal(){ returntotal;}publicvoidsetTotal(inttotal){ this.total=total;}}数据生成类(6)importjava.util.ArrayList;importjava.util.List;importjava.sql.*;publicclassBookFactory{ privateListbooksList=newArrayList();//用于存放book对象集 publicBookFactory(){ try{ CommonADOcon=CommonADO.getCommonADO(); ResultSetrs=con.executeSelect("select*frombooks"); while(rs.next()){ BookEntitybook=newBookEntity(); book.setBookNum(rs.getString("BookNo")); book.setBookName(rs.getString("BookName")); book.setAuthor(rs.getString("Author")); book.setPublisher(rs.getString("Publisher")); book.setPrice(rs.getFloat("Price")); book.setTotal(rs.getInt("Total")); booksList.add(book);//将创建的对象添加到List中 } }catch(Exceptione){ e.printStackTrace(); }}

publicListgetBooksList(){returnbooksList;}}BookFactory类中定义了一个用于存放Book对象的List对象,构造器方法实现了数据的读取和对象的构建,getBooksList()方法则提供了获取List对象的方法程序中的List不是SWT组件List,而是Java的集合类java.util.List。根据实际开发情况也可以用数组或Set、Map等代替List。List是接口,而ArrayList是实际用的类在DBConnect工程中添加数据生成类BookFactoryTableViewer数据显示机制(1)TableViewer控件显示数据机制表格数据显示实现步骤1、设置tableViewer的标签属性,双击后会自动生成标签提供器内部类框架代码;作用:将数组中的实体对象的字段取出来显示在TableViewer控件对应的列中。2、设置tableviewer的内容属性,双击后会自动生成内容提供器内部类框架代码;作用:实现数据集到表格记录的映射。3、手工添加数据源设置代码:tableViewer.input();表格单元编辑(1)编辑方式所有的单元编辑器都是抽象类CellEditor的子类TextCellEditor类的对象表示文本框类型的编辑器ComboBoxCellEditor类的对象表示下拉别表框类型的编辑器CheckboxCellEditor类的对象表示复选框类型的编辑器,表单元编辑器的值是一个布尔值DialogCellEditor类是一个抽象类表示一个带有对话框的表单元编辑器,在表格单元格的左边显示一个标签,右边显示一个按钮,单击它可以打开一个对话框表格单元编辑的实现方法TableViewerColumn通过属性视图中的editingSupport属性提供表格编辑功能,代码框架如下:tableViewerColumn_4.setEditingSupport(newEditingSupport(tableViewer){ protectedbooleancanEdit(Objectelement){

//当前类是否可编辑 returnfalse; }protectedCellEditorgetCellEditor(Objectelement){//使用什么编辑器? returnnull;}protectedObjectgetValue(Objectelement){//编辑时的初始值 returnnull;}protectedvoidsetValue(Objectelement,Objectvalue){//编辑成什么? }});数据库记录更新在数据生成类BookFactory中添加方法modifyDBpublicstaticvoidmodifyDB(StringbookNo,floatprice){ CommonADOcon=CommonADO.getCommonADO(); StringmodifySql="updatebookssetPrice='"+price+"'whereBookNo='"+bookNo+"'"; con.executeUpdate(modifySql);}在匿名单元修改器类的modify方法最后添加黑体代码publicvoidmodify(Objectarg0,Stringarg1,Objectarg2){

tableViewer.update(book,null); BookFactory.modifyDB(book.getBookNum(),price);}表格排序类(1)JFace类库中提供了两个支持表格排序的类,分别是org.eclipse.jface.viewers包中的ViewerComparator类和ViewerSorter类。其中ViewerSorter类是ViewerComparator类的子类。ViewerSorter类提供的默认排序方式是按表格第1列数据以降序方式进行排序,单击TableViewer属性视图中的sorter属性值列,在对话框中选择ViewerSorter后,源代码中自动生成语句:“tableViewer.setSorter(newViewerSorter());”。表格排序的实现1、使用tableViewer的sort属性,双击该属性,会自动产生相应的代码框架。2、实现排序器中的compare()方法3、为表格列添加事件监听器排序器示例classMySorterextendsViewerSorter{ privatebooleansortType=true; publicMySorter(booleansortType){ super(); this.sortType=sortType; }

publicintcompare(Viewerviewer,Objecte1,Objecte2){ BookEntitybook1=(BookEntity)e1; BookEntitybook2=(BookEntity)e2; floatprice1=book1.getPrice(); floatprice2=book2.getPrice(); if(sortType){ returnprice1>price2?1:(price1==price2?0:-1); } else{ returnprice2>price1?1:(price1==price2?0:-1); }}}表格列事件监听器表格列添加事件监听器tableColumn4.addSelectionListener(neworg.eclipse.swt.events.SelectionListener(){publicvoidwidgetSelected(org.eclipse.swt.events.SelectionEvente){ tableViewer.setSorter(newMySorter(sortType)); //sortType为定义的成员变量,变量定义语句为:booleansortType=true; if(sortType){ sortType=false; }else{ sortType=true; }}publicvoidwidgetDefaultSe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论