第10章-开发Java桌面程序_第1页
第10章-开发Java桌面程序_第2页
第10章-开发Java桌面程序_第3页
第10章-开发Java桌面程序_第4页
第10章-开发Java桌面程序_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

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

文档简介

Java桌面程序开发,目录,第1节认识Java桌面程序,教学要求理解:桌面应用程序、图形用户界面、Swing组件类,1.1看看Java桌面程序效果,1.1看看Java桌面程序效果,1.1看看Java桌面程序效果,1.2认识JavaGUI开发包Swing,控制台应用程序什么是图形用户界面(GUI)?使用图形的方式借助菜单、文本域、窗口、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出命令,启动操作,并将系统运行结果以同样的形式呈现。,1.2认识JavaGUI开发包Swing,Java语言为了方便图形用户界面的开发,设计了专门的类库来生成各种标准图形界面元素,Swing组件便是其中常用的一种,类库是javax.swing包。,第2节开发第一个Java桌面程序,教学要求1理解:GUI界面显示方式、GUI与用户交互的方法2掌握:Java桌面程序开发步骤,2.1看看效果,实现上述加法器的Add.java的两个重要方法:(1)构造方法Add():实现界面(2)actionPerformed(ActionEvente):实现功能,实例:有菜单的桌面程序,小结,观察JMenuDemo.java,其实现过程与加法器程序Add.java非常相似,概括起来主要就是三件事情:(1)创建程序界面;(2)用addActionListener()方法将与用户交互的组件和处理代码关联起来;(3)编写actionPerformed(ActionEvente)方法代码,使得用户与界面发生交互动作后会做出一定的响应。,2.2实现图形界面,设计一个Java桌面程序的第一步就是设计图形界面,图形界面设计的重要概念:容器和组件布局管理器,GUI的一般设计步骤:加法器为例,GUI的一般设计步骤:含菜单的窗口为例,2.3让界面动起来,要使界面能够与用户进行互动就必须使界面动起来,这就需要用到事件处理机制,了解几个和事件相关的概念:事件:用户交互行为所产生的一种效果叫做事件事件源:产生事件的组件称为事件源事件监听器:用来接收事件并做某种处理,通过Java提供的接口实现事件适配器:在添加事件监听者时需要实现监听接口,这时必须实现所有的监听器方法(包括可能并不必要的),Java引入了适配器类用以解决此类问题,程序员使用适配器时只实现其中必要的方法即可。,让界面“动”起来:加法器为例,(1)Add本类实现ActionListener接口,成为了可以监听按钮上点击事件ActionEvent的监听器类,并重写其中的actionPerformed(ActionEvente)定义了按钮点击后程序要执行的操作。(2)为“=”按钮注册了监听器,使得actionPerformed()方法与“=”关联起来,从而才能监听到“=”上的点击动作并调用方法处理。,让界面“动”起来:含菜单的窗口为例,(1)实现监听器接口,重写接口中的actionPerformed(ActionEvente)方法。(2)为菜单项m1、m2、m3注册事件监听器。,2.4小结一下:桌面程序基本开发步骤,1、引用需要的包和类。在Java桌面程序里,我们通常会引入程序里的包有java.awt.*、java.awt.event.*和javax.swing.*包。2、设计图形用户界面。设置一个顶层容器。主要使用JFrame来构建程序窗体。根据需要为容器设置布局管理器或使用默认布局管理器,流式布局FlowLayout,边界布局BorderLayout,网格包布局GridLayout,卡片布局CardLayout,网格包布局GridBagLayout等等都可以根据需要使用。设置组件,并将组件添加到容器内的适当位置。3、为需要与用户交互的组件编写事件处理代码。确定监听器类型,实现监听器接口,重写接口中的方法。给组件注册监听器,第3节事件处理机制,教学要求1理解:事件源、事件、事件监听器的概念,授权事件及处理机制,适配器类2掌握:为GUI添加事件处理的一般过程,编写事件监听器类的多种方式,为组件注册事件监听器对象,3.1让GUI动起来的关键:事件处理机制,点击按钮之后程序能不能动的关键是这段代码:/点击按钮程序有所反应的关键:为按钮注册事件监听器btn.addActionListener(newActionListener()/点击按钮后程序的响应代码在这里publicvoidactionPerformed(ActionEventarg0)msg.setText(点按钮是有作用的哟!););,授权事件模型进行事件处理三步骤,Java桌面程序事件处理的过程,在开发Java桌面程序时,需要关心的是对什么组件监听什么事件,编写事件监听器类,并将监听器类的对象注册给被监听的组件。Java的事件类和监听器接口大多在java.awt.event包中,一些Swing组件所特有的事件监听器接口则在javax.swing.event中声明。,事件类,事件类及其对应监听器接口,3.2案例:处理按钮点击事件,使用文本框收集用户输入的学生信息,点击“确定”按钮后将学生信息回显到界面右侧空白区域,点击“重置”按钮将同时清空文本框填入的信息和右侧的回显信息。,3.2.1定义事件监听器类,1、确定需要监听的事件源及事件,此处显然是“确定”和“重置”按钮上的按钮点击事件ActionEvent事件。2、编写事件监听器类,方式有多种,本节介绍常用的一种方式:界面与事件处理使用同一个类。3、将事件监听器类的对象注册给事件源,在这里就是给2个按钮注册事件监听器了。按钮点击事件ActionEvent对应的事件监听器接口为ActionListener,此接口中只包含一个方法:publicvoidactionPerformed(ActionEvente),3.2.2为按钮注册事件监听器,“确定”按钮注册监听器:b_ok.addActionListener(this);“重置”按钮注册监听器:b_reset.addActionListener(this);,3.2.3使用内部类实现事件监听器类,3.2.4使用适配器类,这些已经实现了监听器接口的适配器类,在编写自己的监听器类时就可以改用继承适配器类的方式了,这样一来,我们只需要重写必要的方法就可以了,而不需要把不必要的方法也都实现,要点提醒,Java事件处理机制是让图形用户界面能响应用户的交互动作的关键。以按钮为例,用户点击按钮之后程序要做出相应,应按照如下的步骤实现按钮的事件处理:1、编写监听按钮点击事件(即ActionEvent事件)的监听器类,监听器类实现该事件对应的监听器接口即可。监听器类可以采用本类实现方式,匿名内部类方式,普通内部类方式等多种编码方式。2、将监听器类的对象注册给按钮。这一步非常重要,如果没有进行注册则点击按钮将不会调用事件处理代码。其它事件类型及其处理过程都可以参考此步骤进行。,实训任务,实训3-1编写桌面程序,显示2个数中的较大者。要求界面上提供2个文本框用于接收输入,一个确定按钮、一个重置按钮,一个显示结果的标签。在文本框中输入数据并点击确定按钮之后,标签显示2数中较大的数;若输入过程中输入了非数字符号,标签要显示提示信息“请输入数字”;若点击了重置按钮,则将文本框和标签都清空。实训3-2编写桌面程序,实现一个能比例3-3收集更多学生信息的程序,需要收集的信息可自行指定。实训3-3将例3-5的四则运算程序进行改写,要求+、-、*、/按钮的事件处理代码改用匿名内部类实现,直接注册到各个按钮上。实训3-4编写程序,实现利用按钮控制窗体背景颜色的变换,并同时控制当鼠标移入和移出按钮区域的时候修改按钮上的文字。,第4节容器与布局,教学要求1掌握:Swing组件类的层次、用Swing创建图形用户界面的基本方法,JFrame、JPanel和布局管理器的基本使用方法及功能2理解:Swing容器与布局管理器的作用、计算器的实现,4.1Swing组件类的层次,Swing是围绕着一个称为JComponent的新组件构建的,而JComponent则由AWT的容器类扩展而来。Swing组件分为:顶层容器中间层容器基本组件,Swing组件的层次结构,组件从功能可以分为:特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame、LayeredPane,JRootPane。基本控件:实现人机交互的组件,如JButton,、JComboBox,、JList、JMenu,、JSlider,、JTextField。不可编辑信息的显示:向用户显示不可编辑信息的组件,例如JLabel、JProgressBar、ToolTip。可编辑信息的显示:向用户显示能被编辑的格式化信息的组件,如JColorChooser、JFileChoose,、JFileChooser,、JTable,JTextArea。,4.2创建窗体:JFrame,JFrame:Swing中用于创建桌面窗体的类对JFrame添加组件有两种方式:1、用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)2、建立一个JPanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:JPanelcontentPane=newJPanel();/把其它组件添加到Jpanel中;frame.setContentPane(contentPane);/把contentPane对象设置成为frame的内容面板;,JFrame窗口中的各面板,JFrame类的常用变量:staticintEXIT_ON_CLOSE:退出应用程序后的默认窗口关闭操作,用于setDefaultCloseOperation(int)方法中JFrame类的构造方法JFrame():构造一个初始时不可见的新窗体JFrame(Stringtitle):创建一个新的、初始不可见的、具有指定标题的窗体,JFrame的常用方法ContainergetContentPane():返回此窗体的容器对象JMenuBargetJMenuBar():返回此窗体上设置的菜单栏。voidremove(Componentcomp):从该容器中移除指定组件。voidsetContentPane(ContainercontentPane):设置contentPane属性。voidsetDefaultCloseOperation(intoperation):设置用户在此窗体上发起close时默认执行的操作。voidsetIconImage(Imageimage):设置此frame要显示在最小化图标中的图像。voidsetJMenuBar(JMenuBarmenubar):设置此窗体的菜单栏。voidupdate(Graphicsg):只是调用paint(g)。,示例,例4-2创建JFrame的实例(对象)来调用JFrame的方法,以此设计界面窗口。例4-3演示了JFrame的基本使用方式,点击关闭窗口按钮采用了事件处理,利用WindowAdapter实现了退出程序。,4.3帮助实现布局的容器:JPanel,JPanel是一个放置其他图形组件(包括其它JPanel)的中间层容器,不能独立存在,必须被添加到其他容器中(如JFrame)。JPanel是一个空白容器类,提供容纳组件的空间,通常用于集成其他的若干组件,使这些组件形成一个有机的整体,再增加到别的容器上。JPanel是Swing包中一个非常重要的控件,在程序的开发中,经常会使用到JPanel,这样可以大大的规范布局,JPanel的构造方法:JPanel():创建具有双缓冲和流布局的新JPanel。JPanel(booleanisDoubleBuffered):创建具有FlowLayout和指定缓冲策略的新JPanel。JPanel(LayoutManagerlayout):创建具有指定布局管理器的新缓冲JPanel。JPanel(LayoutManagerlayout,booleanisDoubleBuffered):创建具有指定布局管理器和缓冲策略的新JPanel。,JPanel的常用方法:add(Componetc):将组件c添加到JPanel上。,示例,JPanel类具有简单容器显示图形的画布的双重功能。例4-5的小应用程序创建了三个JPanel实例:一个包含“Name:”选项卡和文本域的控制面板、一个专门用作显示文本和图形的画布的窗格,以及包含上述控制面板和画面的第三个面板。,帮助布局的JScrollPane,常用的帮助布局的还有JScrollPane,Swing中的滚动面板。JScrollPane是具有可选的垂直/水平滚动条,可选的行/列标题的中间层面板。JScrollPane基本上由JScrollBar、一个JViewport以及它们之间的连线组成。JViewPort主要负责显示内容区域的大小,形状为一平面矩形JScrollBar主要产生窗口滚动条,让用户可以看到更多的内容除了滚动条和视口之外,JScrollPane的构造方法:JScrollPane():创建一个空的(无视口的视图)JScrollPane,需要时水平和垂直滚动条都可显示。JScrollPane(Componentview):创建一个显示指定组件内容的JScrollPane,只要组件的内容超过视图大小就会显示水平和垂直滚动条。JScrollPane(Componentview,intvsbPolicy,inthsbPolicy):创建一个JScrollPane,它将视图组件显示在一个视口中,视图位置可使用一对滚动条控制。JScrollPane(intvsbPolicy,inthsbPolicy):创建一个具有指定滚动条策略的空(无视口的视图)JScrollPane。,滚动条显示策略vsbPolicy和hsbPolicy的值可使用下面的静态常量来进行设置,它们是在接口ScrollPaneConstants中定义的:HORIZONTAL_SCROLLBAR_ALWAYS:总是显示水平滚动条HORIZONTAL_SCROLLBAR_NEVER:总不显示水平滚动条HORIZONTAL_SCROLLBAR_AS_NEEDED:必要时(显示的组件的水平区域大于JScrollPane组件的水平区域时)显示VERTICAL_SCROLLBAR_ALWAYS:总是显示垂直滚动条VERTICAL_SCROLLBAR_NEVER:总不显示垂直滚动条VERTICAL_SCROLLBAR_AS_NEEDED:必要时(显示的组件的垂直区域大于JScrollPane组件的垂直区域时)显示,示例,4.4常用的布局管理器,Java为了实现跨平台的特性并且获得动态的布局效果,Java将容器内的所有组件安排给一个布局管理器负责管理,如:排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理,不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。,4.4.1使用流式布局FlowLayout,FlowLayout是JPanel,JApplet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。,FlowLayout的构造方法:FlowLayout():构造一个新的FlowLayout,它是居中对齐的,默认的水平和垂直间隙是5个单位。FlowLayout(intalign):构造一个新的FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是5个单位。FlowLayout(intalign,inthgap,intvgap):创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。,FlowLayout类常用方法:voidsetAlignment(intalign):设置此布局的对齐方式。intgetAlignment():获得此布局的对齐方式。voidsetHgap(inthgap):设置组件之间以及组件与Container的边之间的水平间隙。intgetHgap():获得组件之间以及组件与Container的边之间的水平间隙voidsetVgap(intvgap):设置组件之间以及组件与Container的边之间的水平间隙。intgetVgap():获得组件之间以及组件与Container的边之间的水平间隙。voidaddLayoutComponent(Stringname,Componentcomp):将指定的组件添加到布局中。voidremoveLayoutComponent(Componentcomp):从布局中移除指定的组件。,FlowLayout的静态成员变量:staticintCENTER:此值指示每一行组件都应该是居中的。staticintLEFT:此值指示每一行组件都应该是左对齐的。staticintRIGHT:此值指示每一行组件都应该是右对齐的。,设置组件的布局方式有两种方法:一种直接在构造方法中设置,如:JPaneljp=newJPanle(newFlowLayout(FlowLayout.LEFT);/设置面板中组件靠左对齐一种是先实例化布局对象,再设置,如:FlowLayoutfl=newFlowLayout(FlowLayout.CENTER,20,40);jp1.setLayout(fl);jp2.setLayout(fl);,示例,4.4.2使用边框布局BorderLayout,BorderLayout是JWindow,JFrame和JDialog的缺省布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。,BorderLayout的构造方法:BorderLayout():构造一个组件之间没有间距的新边框布局。BorderLayout(inthgap,intvgap):构造一个具有指定组件间距的边框布局。,BorderLayout的静态成员变量:staticStringCENTER:中间区域的布局约束(容器的中央)。staticStringEAST:东区域的布局约束(容器的右边)。staticStringNORTH:北区域的布局约束(容器的顶部)。staticStringSOUTH:南区域的布局约束(容器的底部)。staticStringWEST:西区域的布局约束(容器的左边)。,BorderLayout的常用方法:voidsetHgap(inthgap):设置组件之间的水平间距。voidsetVgap(intvgap):设置组件之间的垂直间距。intgetHgap():返回组件之间的水平间距。voidremoveLayoutComponent(Componentcomp):从此边界布局中移除指定组件。,4.4.3使用网格布局GridLayout,GridLayout将容器划分成若干行列的网格。在容器上添加组件时,它们会按从左到右、从上到下的顺序在网格中排列。在GridLayout的构造方法里,我们需要指定希望将容器划分成的网格的行、列数。GridLayout布局管理器总是忽略组件的最佳大小,所有单元的宽度是相同的,是根据单元数对可用宽度进行平分而定的。同样地,所有单元的高度是相同的,是根据行数对可用高度进行平分而定的。,GridLayout的构造方法:GridLayout():创建具有默认值的网格布局,即每个组件占据一行一列。GridLayout(introws,intcols):创建具有指定行数和列数的网格布局。GridLayout(introws,intcols,inthgap,intvgap):创建具有指定行数和列数的网格布局。,GridLayout类常用的方法:voidsetRows(introws):将此布局中的行数设置为指定值。intgetRows():获取此布局中的行数。voidsetColumns(intcols):将此布局中的列数设置为指定值。intgetColumns():获取此布局中的列数。voidsetHgap(inthgap):将组件之间的水平间距设置为指定值。intgetHgap():获取组件之间的水平间距。voidsetVgap(intvgap):将组件之间的垂直间距设置为指定值。intgetVgap():获取组件之间的垂直间距。voidremoveLayoutComponent(Componentcomp):从布局移除指定组件。,GridLayout的属性intnumColumns:设置容器的列数,组件从左到右按列放置,当组件数大于列数时,下一个组件将自动添加新的一行。默认值为1列。booleanmakeColumnsEqualWidth:强制使列都具有相同的宽度,默认值为false。intmarginWidth:设置组件与容器边缘的水平距离,默认值为5。intmarginHeight:设置组件与容器边缘的垂直距离,默认值为5。inthorizontalSpacing:设置列与列之间的间隔,默认值为5。intverticalSpacing:设置行与行之间的间隔,默认值为5。,4.4.4使用箱式布局BoxLayout,BoxLayout是在Swing中新增加的一种布局管理器,它允许多个组件全部垂直摆放或全部水平摆放。嵌套组合多个使用BoxLayout布局管理器的Panel,可以帮助实现类似GridBagLayout的功能,但却要比直接使用GridBagLayout简单许多。BoxLayout布局管理器按照自上而下(y轴)或者从左到右(x轴)的顺序布局依次加入组件。建立一个BoxLayout对象,必须指明两个参数:被布局的容器和BoxLayout的主轴。缺省情况下,组件在纵轴方向上居中对齐。,BoxLayout管理器是用axis参数构造的,该参数指定了将进行的布局类型。有四个选择:X_AXIS:从左到右水平布置组件。Y_AXIS:从上到下垂直布置组件。LINE_AXIS:根据容器的ComponentOrientation属性,按照文字在一行中的排列方式布置组件。PAGE_AXIS:根据容器的ComponentOrientation属性,按照文本行在一页中的排列方式布置组件。,BoxLayout的构造方法:BoxLayout(Containertarget,intaxis):创建一个将沿给定轴放置组件的布局管理器。BoxLayout类常用方法:intgetAxis():返回用于布局组件的轴。floatgetLayoutAlignmentX(Containertarget):返回容器沿X轴的对齐方式。floatgetLayoutAlignmentY(Containertarget):返回容器沿Y轴的对齐方式。,4.4.5使用自由布局null,如果不希望使用某种布局策略,而想精确地指定各个组件的位置和大小,我们可以使用容器的setLayout()方法,将参数设为null,即可以取消容器的布局管理器设置。若采用了null布局,就需要我们为各个组件设置位置和大小,可以使用组件的setBounds()方法。,4.5实例:实现计算器,该计算器综合运用了常用的布局策略,并完成如下功能:1、点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算;2、如果输入有误时可以按(BackSpace)键返回上一步或者(C)撤销后重新输入新数据。,实训任务,实训4-1定义按钮若干让它们按照从左向右的顺序依次排列并显示,按钮上显示的名称分别为“按钮l”、“按钮2”、“按钮3”、“按钮4”和“按钮5”。实训4-2设计一个简单的通用名片录入界面,名片的信息包括姓名、称谓、工作单位、工作地址、电话1、电话2、手机、传真、邮编等基本内容。使用FlowLayout布局管理器对界面进行管理。实训4-3在一个BorderLayout布局的东,西,南,北区域分别添加4个使用BoxLayout的容器,要求每个容器中有若干个组件,东,西区域的容器使用列式BoxLayout,南,北区域的容器使用行式BoxLayout。,第7节连上DB的Java桌面程序,教学要求1掌握:获取数据库连接,使用Statement和PreparedStatement对数据库进行添、删、改、查操作。2理解:JDBC原理,结果集处理方式,7.1看看效果,示例之一,参见第6章例6-6,基于学生信息库的学生信息检索程序,示例之二,参见第6章例6-13,基于联系人库的联系人检索程序,小结,(1)Java程序要能连接上数据库,建立Java程序与数据库之间的通信管道。(2)有了通信管道之后,根据需求让数据库执行一定的操作。比如说查询所有学生信息就是让数据库执行了类似如下代码所示的SQL语句:select*fromstuinfo也就是说Java程序要将上述的SQL语句送至数据库令其执行。(3)数据库执行操作的结果返回到Java程序,如有需要可在用户界面中进行展示。如前面张图所示,都是在执行了数据库查询操作后将查询结果在图形用户界面中用表格组件进行了展现,由于数据库查询操作的结果也是二维结构的,用表格组件来表现是最合适不过的了。,7.2认识JDBC,JDBC(JavaDataBaseConnectivity)技术是让Java程序能连接上数据库并操作数据库的技术。它由一组用Java语言编写的类和接口组成,为编程人员提供了一套可以访问多种不同类型数据库的标准API(API:ApplicationProgrammingInterface,应用程序编程接口)。,JDBC由两部分构成:一是基于Java语言的通用JDBCAPI,这部分的类和接口位于java.sql包和javax.sql包;二是由数据库管理系统厂家或者第三方针对特定数据库提供的数据库专用JDBC驱动程序(Driver),通常由数据库厂家或第三方以jar包的形式提供。这些驱动程序提供专门的接口将通用的程序调用映射成为底层数据库能够理解的命令。,JDBC具备与数据库建立连接和与数据库进行通信的能力,它的基本功能主要包括:(1)连接数据库;(2)操作数据库;(3)处理结果集。,JDBCAPI常用类和接口,7.3Java程序连上DB,7.3.1连接DB的准备工作以MySQL数据库为例,首先进行准备工作:下载和安装MySQL数据库,下载Java连接MySQL的JDBC驱动程序。1、下载MySQL数据库2、安装和配置MySQL3、下载Java直连MySQL的JDBC驱动程序,7.3.2连接MySQL数据库,实例:例7-1以连接MySQL的test数据库为例,建立数据库连接编码时只包含两个基本步骤:(1)注册数据库驱动程序,或称作加载驱动程序。此步骤使用如下代码即可实现:Class.forName(驱动程序类名);(2)获取数据库连接对象:使用java.sql.DriverManager类的getConnection()方法可以返回数据库连接对象。,DriverManager的getConnection()方法有2个常用版本:publicstaticConnectiongetConnection(Stringurl)throwsSQLException:试图建立到给定数据库URL的连接。publicstaticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)throwsSQLException:试图建立到给定数据库URL的连接,使用指定数据库账户名和密码。,7.3.3连接其它常见数据库,根据JDBC的设计初衷,连接其它类型的数据库也是同样的两个步骤:(1)注册数据库驱动程序;(2)获取数据库连接对象。,7.4Java程序让DB做点事,7.4.1Java数据库编程的基本步骤让Java程序操作数据库主要涉及到三个接口及其方法:java.sql.Connection接口,数据库连接对象就是该类型的对象;java.sql.Statement接口,及其子接口preparedStatement,该类型的对象可以将SQL语句发送至数据库并令其执行;java.sql.ResultSet接口,数据库做SELECT查询操作的结果是该类型的对象。,Connection对象的常用方法,Statement对象的常用方法,ResultSet对象的常用方法,见表7-4使用上述三种对象,进行Java数据库编程总是遵循如下几个步骤:(1)获取数据库连接;(2)基于连接生成Statement语句对象;(3)发送SQL语句至数据库执行;(4)处理SQL语句的执行结果。,7.4.2查询数据,例7-27-3,连接联系人库并查询,7.4.3添加、修改、删除数据,例7-4添、删、改数据,7.4.4使用PreparedStatement,PreparedStatement允许建立一个带有参数的SQL语句,若多次操作执行的是相同结构而只是参数不同的语句,则每次为参数赋值就可以反复使用这条语句,这种特性可以提高性能,同时可以简化开发。,使用PreparedStatement的一般步骤:(1)准备SQL语句串,留出IN参数,用?占位;(2)创建PreparedStatement语句对象:PreparedStatementpstmt=conn.prepareStatement(SQL语句串);(3)为每个IN参数设值,要按照?出现的位置依序赋值:pstmt.setXxx(?的位置,值);(4)发送SQL语句到数据库执行:pstmt.executeQuery();/执行查询操作pstmt.executeUpdate();/执行更新操作:添、删、改,实例,例7-5使用PreparedStatement进行数据库操作,7.4.5可滚动结果集与结果集元数据,1、可滚动结果集。ResultSet结果集默认只能按顺序遍历结果集中的所有行,并且结果集中的数据更改不会影响到数据库中的记录。如果希望ResultSet的游标能够灵活的前后移动,并且能够通过结果集的变化更新数据库中的记录,则需要通过下面的方法得到Statement对象:Statementstat=conn.createStatement(type,concurrency);或通过下面的方法得到一个PreparedStateme对象:PreparedStatemeps=conn.preparedStatement(cmd,type,concurrency);其中type值和concurrency值决定了结果集是否可滚动、是否只读,ResultSet结果集的type值,ResultSet结果集的concurrency值,ResultSet对象的常用方法见表7-82、结果集元数据ResultSetMetaData。专门用于描述数据库或其组成部分的数据称为元数据,元数据是描述数据的数据,而不是那些存在数据库中的实际数据。结果集元数据ResultSetMetaData是用于描述结果集ResultSet对象相关信息的元数据,ResultSet对象是二维表结构的,ResultSetMetaData主要用来获取ResultSet对象中列的名称、类型以及数目等等信息。结果集元数据可以通过ResultSet对象的getMetaData()方法获取,实例,例7-6结果集元数据的一般使用,7.5实例:模拟DBMS的查询分析器,例7-7Java项目QueryAnalyzer,模拟DBMS查询分析器,实现要点,(1)创建程序主界面;(2)为“执行查询”按钮编写事件监听器,事件处理过程包括:连接contact数据库,发送用户填写的SELECT语句至数据库执行,返回的结果集用表格组件表现。,用如下几个类分别完成上述工作:MyConnection:获取数据库连接,该类代码与例7-2代码相同,这里不再赘述。ResultSetTableModel:该类实现将传入的ResultSet对象转存至表格模型,以便于结果集用JTable组件来表现。ShowResultSet:程序主类,负责创建程序主界面和对“执行查询”按钮进行事件处理。,实现查询功能时遵循Java数据库编程的基本步骤:(1)获取数据库连接,代码:conn=MyConnection.getConn();(2)基于连接生成Statement语句对象,代码:Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);,(3)发送SQL语句至数据库执行,代码:ResultSetrs=stmt.executeQuery(sql);(4)处理SQL语句的执行结果,这里是将结果用表格组件在界面中表现出来,代码:ResultSetTableModelrstm=newResultSetTableModel(rs);table=newJTable(rstm);sp2.setViewportView(table);这里使用表格模型来转存结果集,再由表格模型构造JTable对象,这样做的好处是不用考虑结果集的长度问题,更具灵活性。,要点提醒,JDBC进行数据库编程的基本步骤包括:(1)获取数据库连接;(2)基于连接生成Statement语句对象;(3)发送SQL语句至数据库执行;(4)处理SQL语句的执行结果。其中,获取数据库连接由两个步骤实现:(1)注册数据库驱动程序;(2)获取数据库连接对象。,实训任务,实训7-1改写第6章的例6-6,将结果集存至表格模型,再由表格模型来构造Jtable表格对象来表现查询结果。实训7-2改写例7-7的“模拟DBMS查询分析器”程序,在原有功能基础上增加它对数据库的添加、修改和删除功能,即在文本区输入SQL语句并点击按钮后还能够对后台数据库进行添、删、改的操作,并在下方表格组件中显示操作后的表数据。,第8节Java桌面程序实例:联系人管理,教学要求1掌握:综合运用Java桌面程序开发技术和数据库编程技术2理解:将数据库操作封装成DAO类,8.1看看效果,检索模块,添加模块,修改模块,删除模块,8.2需求分析及系统设计,8.2.1系统目标,8.2.2任务1:数据库设计,1、实体E-R图,2、数据库表的设计(1)用户表:用于记录合法的用户账户信息,只包含登陆账户名和登录密码两个字段(2)联系人表:用于记录联系人信息,包括联系人的姓名、性别、年龄、联系电话和电子邮件地址,8.2.3任务2:界面设计与模块设计,1、界面设计登录界面:用户在该界面中输入登陆账户名和密码进行身份验证,可以选择登录或退出程序。主界面:用户在该界面中可以选择对联系人进行管理或退出系统。检索联系人界面:用户在该界面中可以实现检索所有联系人信息,或根据姓名指定要查看的联系人,并将检索结果显示在该界面中。,添加联系人界面:用户在该界面中可以添加新的联系人信息,或清空已填写的信息重新填写,或退出该界面。更新联系人界面:用户在该界面中可以修改指定姓名的联系人的部分资料,可先查询指定姓名的联系人原信息,再填写新的信息内容,可以清空已填写的信息重新填写,或退出该界面。删除联系人界面:用户在该界面中可先查询指定姓名的联系人信息,待确认后可以进行删除操作,可以退出该界面。,2、模块设计(1)用户登录模块:实现登陆界面及登陆验证逻辑。(2)公共模块:实现公共的数据库操作功能,包括获取数据库连接,描述联系人数据库实体的实体类,实现检查登陆账户和对联系人信息进行添、删、改、查操作的数据库DAO(DatabaseAccessObject)类。(3)联系人管理模块:实现联系人管理的各个操作界面,以及各界面的逻辑功能。,项目文件夹(源代码)结构:,8.3编码实现,8.3.1编码规范Java程序在命名时应始终采用完整的英文描述符。此外,一般应采用小写字母,但类名、接口名以及任何非初始单词的第一个字母要大写。一般而言,我们须遵循以下一些约定:包(Package)应采用完整的英文描述符,由小写字母组成。类(Class)应采用完整的英文描述符,所有单词的第一个字母大写,例如MainFrame。,接口(Interface)应采用完整的英文描述符说明接口封装,所有单词的第一个字母大写。习惯上,名字后面加上后缀able,ible或者er。组件(JComponent)应使用较完整的英文描述来说明组件的用途。异常(Exception)对象通常使用字母e表示。类变量应采用完整的英文描述,第一个字母小写,任何中间单词的首字大写。例如firstName,lastName。,获取方法,可在方法名上使用前缀get来表示。例如getAllContacts(),getContact()。设置方法,可在方法名上使用前缀set来表示。例如setName(),setEmail()。普通成员方法采用完整的英文描述说明成员函数功能,第一个单词尽可能采用一个生动的动词,第一个字母小写。例如buildMenuBar()。静态常量字段(staticfinal)全部采用大写字母,单词之间用下划线分隔。例如MIN_BALANCE,DEFAULT_DATE。循环计数器通常采用字母i,j,k或者counter都可以。,8.3.2任务1:数据库实施,编码8-1创建MySQL数据

温馨提示

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

评论

0/150

提交评论