1、单元员 24JDBC 应用实例单元目标 巩固如何使用 JDBC 获取数据库连接; 掌握如何使用 JDBC 获取数据库元数据 巩固运用 JDBC 对数据进行增、删、改、查。学习任务1.任务描述开发 SQL 小工具,允许用户输入数据源、用户名、口令,连接数据库。输入并执行增、删、查、改 SQL 语句。2.运行结果初始运行界面如下:点击连接按钮后,再点击 SQL 查询按钮:查询结果显示:输入执行修改语句:SQL 小工具开发知识准备5.18 ResultSetMetaDataDatabaseMetaData 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。ResultS
2、et 关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息。 例如:ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM TABLE2);ResultSetMetaData rsmd = rs.getMetaData();int numberOfColumns = rsmd.getColumnCount();String colName = rsmd. getColumnName(1);ResultSetMetaData 的主要方
3、法包括:String getCatalogNamegetCatalogName(intcolumn)获取指定列的表目录名称。String getColumnClassNamegetColumnClassName(intcolumn)如果调用方法ResultSet.getObject 从列中获取值, 则返回构造其实例的 Java 类的完全限定名称。int getColumnCountgetColumnCount()返回此 ResultSet 对象中的列数。int getColumnDisplaySizegetColumnDisplaySize(intcolumn)指示指定列的最大标准宽度,以字符
4、为单位。String getColumnLabelgetColumnLabel(intcolumn)获取用于打印输出和显示的指定列的建议标题。String getColumnNamegetColumnName(intcolumn)获取指定列的名称。int getColumnTypegetColumnType(intcolumn)获取指定列的 SQL 类型。String getColumnTypeNamegetColumnTypeName(intcolumn)获取指定列的数据库特定的类型名称。int getPrecisiongetPrecision(intcolumn) 获取指定列的指定列宽。i
5、nt getScalegetScale(intcolumn)获取指定列的小数点右边的位数。String getSchemaNamegetSchemaName(intcolumn)获取指定列的表模式。String getTableNamegetTableName(intcolumn)获取指定列的名称。boolean isAutoIncrementisAutoIncrement(intcolumn)指示是否自动为指定列进行编号。SQL 小工具开发boolean isCaseSensitiveisCaseSensitive(intcolumn)指示列的大小写是否有关系。boolean isCurre
6、ncyisCurrency(intcolumn)指示指定的列是否是一个哈希代码值。boolean isDefinitelyWritableisDefinitelyWritable(intcolumn)指示在指定的列上进行写操作是否明确可以获得成功。int isNullableisNullable(intcolumn)指示指定列中的值是否可以为 null。boolean isReadOnlyisReadOnly(intcolumn)指示指定的列是否明确不可写入。boolean isSearchableisSearchable(intcolumn)指示是否可以在 where 子句中使用指定的列。b
7、oolean isSignedisSigned(intcolumn)指示指定列中的值是否带正负号。boolean isWritableisWritable(intcolumn)指示在指定的列上进行写操作是否可以获得成功。5.19 JTableJTable 用来显示和编辑常规二维单元表。JTable 有很多用来自定义其呈现和编辑的工具,同时提供了这些功能的默认设置,从而可以轻松地设置简单表。例如,要设置一个 10 行 10 列的表:TableModel dataModel = new AbstractTableModel() public int getColumnCount() return
8、10; public int getRowCount() return 10;public Object getValueAt(int row, int col) return new Integer(row*col);JTable table = new JTable(dataModel);JScrollPane scrollpane = new JScrollPane(table);注意,如果要在单独的视图中(在 JScrollPane 外)使用 JTable 并显示表标题,则可以使用 getTableHeader() 获取并单独显示它。要启用行的排序和过滤,请使用 RowSorter。可
9、以通过以下两种方式之一设置一个行排序器。直接设置RowSorter。例如:table.setRowSorter(newTableRowSorter(model)。将 autoCreateRowSorter 属性设置为 true,从而 JTable 可用于创建RowSorter。例如:setAutoCreateRowSorter(true)。设计使用 JTable 的应用程序时,务必要注意用来表示表数据的数据结构。DefaultTableModel 是一个模型实现,它使用一个 Vector 来存储所有单元格的值,该 Vector 由包含多个 Object 的 Vector 组成。除了将数据从应用
10、程序复制到 DefaultTableModel 中之外,还可以用 TableModel 接口的方法来包装数据,这样可将数据直接传递到 JTable,如上例所示。这通常可以提高应用程序的效率,因为模型可以自由选择最适合数据的内部表示形式。在决定使用AbstractTableModel 还是使用 DefaultTableModel 方面有一个好的实践经验,即在创建子类时使用 AbstractTableModel 作为基类,在不需要创建子类时则使用 DefaultTableModel。源分布演示部分中的 TableExample 目录给出了许多 JTable 用法的完整示例,包括如何使用 JTabl
11、e 来提供一个可编辑的数据视图(数据取自数据库) ,以及如何修改显示的列以使用指定的渲染器和编辑器。JTable 使用专有的整数来引用它所显示的模型的行和列。JTable 采用表格的单元格范围,并在绘制时使用 getValueAt(int, int) 从模型中获取值。务必记住各种 JTable 方法所返回的列和行索引是就 JTable(视图)而言的,不一定是模型所使用的那些索引。默认情况下,在 JTable 中对列进行重新安排,这样在视图中列的出现顺序与模型中列的顺序不同。但这根本不影响模型的实现:当列重新排列时,JTable在内部保持列的新顺序,并在查询模型前转换其列索引。因此编写 Tabl
12、eModel 时,不必侦听列的重排事件,因为不管视图怎样,模型都将在其自己的坐标系统被查询。在示例部分中有一个排序算法的演示,此演示正是使用了此技术在另一个坐标系统中进行排序,其中更改了行顺序,没有更改列顺序。类似地,使用 RowSorter 提供的排序和过滤功能时,底层 TableModel 不需要知道怎样进行排序,RowSorter 将处理它。对底层 TableModel 使用JTable 的基于行的方法时,必须进行坐标转换。所有基于 JTable 行的方法都是就 RowSorter 而言的,不一定与底层 TableModel 的方法相同。例如,选择始 终 是 就JTable而 言 的 ,
13、 因 此 使 用RowSorter时 , 需 要 使 用convertRowIndexToView 或 convertRowIndexToModel 进行转换。 以下代码显示了如何将 JTable 的坐标转换为底层模型的坐标:int selection = table.getSelectedRows();for (int i = 0; i selection.length; i+) selectioni = table.convertRowIndexToModel(selectioni);/ selection is now in terms of the underlying TableMo
14、del默认情况下,如果启用排序,那么排序时 JTable 将保留基于模型的选择和可变行高度。例如,如果当前选择行 0(就底层模型而言) ,那么排序之后将选择行 0(就底层模型而言) 。选择有可能看起来被更改了,但就底层模型而言它仍然保持不变。模型索引不再可见或者被移除时除外。例如,如果行 0 被过滤掉了,那么选择在排序后将为空。J2SE 5 在 JTable 中添加了一些方法,为某些普通打印需求提供方便的访问。print() 是一个简单的新方法,它允许快速简单地向应用程序添加打印支持。此外,新的getPrintable(javax.swing.JTable.PrintMode,java.tex
15、t.MessageFormat, java.text.MessageFormat) 方法可用于更高级的打印需求。下面是 JTable 的主要方法:构造方法摘要构造方法摘要JTableJTable()构造一个默认的 JTable,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。JTableJTable(intnumRows, intnumColumns) 使用 DefaultTableModel 构造具有 numRows 行和 numColumns 列个空单元格的 JTable。JTableJTable(ObjectrowData, ObjectcolumnNames) 构造一个
16、 JTable来显示二维数组 rowData 中的值,其列名称为 columnNames。JTableJTable(TableModeldm) 构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。JTableJTable(TableModeldm, TableColumnModelcm) 构造一个 JTable,使用数据模型 dm、列模型 cm 和默认的选择模型对其进行初始化。JTableJTable(TableModeldm, TableColumnModelcm, ListSelectionModelsm)构造一个 JTable,使用数据模型 dm、列模
17、型 cm 和选择模型 sm 对其进行初始化。JTableJTable(VectorrowData, VectorcolumnNames)构造一个 JTable 来显示 Vector 所组成的 Vector rowData 中的值,其列名称为 columnNames。方法摘要方法摘要void addColumnaddColumn(TableColumnaColumn)将 aColumn 追加到此 JTable 的列模型所保持的列数组的尾部。void addColumnSelectionIntervaladdColumnSelectionInterval(intindex0, intindex1)
18、将从 index0 到 index1 之间(包含两端)的列添加到当前选择中。void addNotifyaddNotify()调用 configureEnclosingScrollPane 方法。void addRowSelectionIntervaladdRowSelectionInterval(intindex0, intindex1)将从 index0 到 index1 之间(包含两端)的行添加到当前选择中。void changeSelectionchangeSelection(introwIndex, intcolumnIndex,booleantoggle, booleanexten
19、d)根据 toggle 和 extend 这两个标志的状态,更新表的选择模型。void clearSelectionclearSelection()取消选中所有已选定的行和列。void columnAddedcolumnAdded(TableColumnModelEvente)将列添加到表的列模型时调用。int columnAtPointcolumnAtPoint(Pointpoint)返回 point 所在的列索引; 如果结果不在 0, getColumnCount()-1 范围内, 则返回 -1。void columnMarginChangedcolumnMarginChanged(Cha
20、ngeEvente)当列由于间距的更改而被移动时调用。void columnMovedcolumnMoved(TableColumnModelEvente)重新定位列时调用。void columnRemovedcolumnRemoved(TableColumnModelEvente)从表的列模型中移除列时调用。void columnSelectionChangedcolumnSelectionChanged(ListSelectionEvente)TableColumnModel 的选择模型更改时调用。protectedvoidconfigureEnclosingScrollPaneconfi
21、gureEnclosingScrollPane()如果此 JTable 是一个封闭 JScrollPane 的 viewportView(通常情况如此),那么可通过安装表的 tableHeader 作为滚动窗格的columnHeaderView 来配置此 ScrollPane。int convertColumnIndexToModelconvertColumnIndexToModel(intviewColumnIndex)将视图中位于 viewColumnIndex 的列索引映射到表模型中的列索引。int convertColumnIndexToViewconvertColumnIndexTo
22、View(intmodelColumnIndex)将表模型中位于 modelColumnIndex 的列索引映射到视图中的列索引。int convertRowIndexToModelconvertRowIndexToModel(intviewRowIndex)将基于视图的行索引映射到底层 TableModel。int convertRowIndexToViewconvertRowIndexToView(intmodelRowIndex)将基于TableModel 的行索引映射到该视图。protectedTableColumnModelcreateDefaultColumnModelcreate
23、DefaultColumnModel()返回默认的列模型对象,它是一个 DefaultTableColumnModel。void createDefaultColumnsFromModelcreateDefaultColumnsFromModel()使用 TableModel 接口中定义的 getColumnCount 方法根据数据模型创建默认的表列。protectedTableModelcreateDefaultDataModelcreateDefaultDataModel()返回默认的表模型对象,它是一个 DefaultTableModel。protectedvoidcreateDefau
24、ltEditorscreateDefaultEditors()为 object、number 和 boolean 值创建默认的单元格编辑器。protectedvoidcreateDefaultRendererscreateDefaultRenderers()为 object、 number、 double、 date、boolean 和 icon 创建默认的单元格渲染器。protectedListSelectionModelcreateDefaultSelectionModelcreateDefaultSelectionModel()返回默认的选择模型对象,它是一个 DefaultListSe
25、lectionModel。protectedJTableHeadercreateDefaultTableHeadercreateDefaultTableHeader()返回默认的表标题对象,它是一个 JTableHeader。void doLayoutdoLayout()使此表布局其行和列。boolean editCellAteditCellAt(introw, intcolumn)如果 row 和 column 位置的索引在有效范围内,并且这些索引处的单元格是可编辑的,则以编程方式启动该位置单元格的编辑。boolean editCellAteditCellAt(introw, intcolu
26、mn, EventObjecte)如果 row和 column 位置的索引在有效范围内,并且这些索引处的单元格是可编辑的,则以编程方式启动该位置单元格的编辑。void editingCancelededitingCanceled(ChangeEvente)编辑取消时调用。void editingStoppededitingStopped(ChangeEvente)编辑结束时调用。AccessibleContextgetAccessibleContextgetAccessibleContext()获取与此 JTable 关联的AccessibleContext。boolean getAutoCr
27、eateColumnsFromModelgetAutoCreateColumnsFromModel()确定表是否要根据模型创建默认的列。boolean getAutoCreateRowSortergetAutoCreateRowSorter()如果每当模型更改时,都应该创建一个新 RowSorter 并作为该表的排序器安装,则返回 true;否则,返回 false。int getAutoResizeModegetAutoResizeMode()返回表的自动调整模式。TableCellEditorgetCellEditorgetCellEditor()返回活动单元格编辑器;如果该表当前没有被编辑
28、,则返回 null。TableCellEditorgetCellEditorgetCellEditor(introw, intcolumn)返回适用于由 row 和column 所指定单元格的编辑器。Rectangle getCellRectgetCellRect(introw, intcolumn,booleanincludeSpacing)返回位于 row 和 column 相交位置的单元格矩形。TableCellRenderergetCellRenderergetCellRenderer(introw, intcolumn)返回适于由此行和列所指定单元格的渲染器。boolean getC
29、ellSelectionEnabledgetCellSelectionEnabled()如果同时启用了行选择模型和列选择模型,则返回 true。TableColumngetColumngetColumn(Objectidentifier)返回表中列的 TableColumn 对象,当使用 equals 进行比较时,表的标识符等于 identifier。Class getColumnClassgetColumnClass(intcolumn)返回出现在视图中 column 列位置处的列类型。int getColumnCountgetColumnCount()返回列模型中的列数。TableColu
30、mnModelgetColumnModelgetColumnModel()返回包含此表所有列信息的TableColumnModel。String getColumnNamegetColumnName(intcolumn)返回出现在视图中 column 列位置处的列名称。boolean getColumnSelectionAllowedgetColumnSelectionAllowed()如果可以选择列,则返回 true。TableCellEditorgetDefaultEditorgetDefaultEditor(ClasscolumnClass)尚未在TableColumn 中设置编辑器时,
31、返回要使用的编辑器。TableCellRenderergetDefaultRenderergetDefaultRenderer(ClasscolumnClass)尚未在TableColumn 中设置渲染器时,返回要使用的单元格渲染器。boolean getDragEnabledgetDragEnabled()返回是否启用自动拖动处理。JTable.DropLocationgetDropLocationgetDropLocation()返回对组件的 DnD 操作期间此组件应该可见地指示为放置位置的位置;如果当前没有显示任何位置,则返回null。DropMode getDropModegetDro
32、pMode()返回此组件的放置模式。int getEditingColumngetEditingColumn()返回包含当前被编辑的单元格的列索引。int getEditingRowgetEditingRow()返回包含当前被编辑的单元格的行索引。Component getEditorComponentgetEditorComponent()返回处理编辑会话的组件。boolean getFillsViewportHeightgetFillsViewportHeight()返回此表是否始终大到足以填充封闭视口的高度。Color getGridColorgetGridColor()返回用来绘制网格
33、线的颜色。Dimension getIntercellSpacinggetIntercellSpacing()返回单元格之间的水平间距和垂直间距。TableModelgetModelgetModel()返回提供此 JTable 所显示数据的 TableModel。Dimension getPreferredScrollableViewportSizegetPreferredScrollableViewportSize()返回此表视口的首选大小。Printable getPrintablegetPrintable(JTable.PrintModeprintMode,MessageFormathe
34、aderFormat, MessageFormatfooterFormat)返回打印此 JTable 中所使用的Printable。int getRowCountgetRowCount()返回 JTable 中可以显示的行数(给定无限空间)。int getRowHeightgetRowHeight()返回表的行高,以像素为单位。int getRowHeightgetRowHeight(introw)返回 row 中单元格的高度,以像素为单位。int getRowMargingetRowMargin()获取单元格之间的间距,以像素为单位。boolean getRowSelectionAllowe
35、dgetRowSelectionAllowed()如果可以选择行,则返回 true。RowSortergetRowSortergetRowSorter()返回负责排序的对象。int getScrollableBlockIncrementgetScrollableBlockIncrement(RectanglevisibleRect,intorientation, intdirection)返回visibleRect.height 或 visibleRect.width,这取决于此表的方向。boolean getScrollableTracksViewportHeightgetScrollabl
36、eTracksViewportHeight()返回 false 指示表的高度不是由视口的高度决定的,除非getFillsViewportHeight 为 true 并且该表的首选高度小于视口的高度。boolean getScrollableTracksViewportWidthgetScrollableTracksViewportWidth()如果autoResizeMode 设置为 AUTO_RESIZE_OFF,则返回 false,这指示表的宽度不是由视口的宽度决定的。int getScrollableUnitIncrementgetScrollableUnitIncrement(Rect
37、anglevisibleRect,intorientation, intdirection)返回完全呈现出一个新行或新列(取决于方向)的滚动增量(以像素为单位)。int getSelectedColumngetSelectedColumn()返回第一个选定列的索引;如果没有选定的列,则返回 -1。int getSelectedColumnCountgetSelectedColumnCount()返回选定列数。int getSelectedColumnsgetSelectedColumns()返回所有选定列的索引。int getSelectedRowgetSelectedRow()返回第一个选定
38、行的索引;如果没有选定的行,则返回 -1。int getSelectedRowCountgetSelectedRowCount()返回选定行数。int getSelectedRowsgetSelectedRows()返回所有选定行的索引。Color getSelectionBackgroundgetSelectionBackground()返回选定单元格的背景色。Color getSelectionForegroundgetSelectionForeground()返回选定单元格的前景色。ListSelectionModelgetSelectionModelgetSelectionModel(
39、)返回用来维持行选择状态的ListSelectionModel。boolean getShowHorizontalLinesgetShowHorizontalLines()如果表绘制单元格之间的水平线,则返回 true,否则返回 false。boolean getShowVerticalLinesgetShowVerticalLines()如果表绘制单元格之间的垂直线,则返回 true,否则返回 false。boolean getSurrendersFocusOnKeystrokegetSurrendersFocusOnKeystroke()如果在键击导致编辑器被激活时编辑器应该获得焦点,则返
40、回 trueJTableHeadergetTableHeadergetTableHeader()返回此 JTable 所使用的 tableHeader。String getToolTipTextgetToolTipText(MouseEventevent)重写 JComponent 的getToolTipText 方法,从而允许使用渲染器的提示(如果设置了文本)。TableUI getUIgetUI()返回呈现此组件的 L&F 对象。String getUIClassIDgetUIClassID()返回用于构造呈现此组件时所用 L&F 类名称的后缀。boolean getUpdateSelec
41、tionOnSortgetUpdateSelectionOnSort()如果排序后应该更新选择,则返回 true。Object getValueAtgetValueAt(introw, intcolumn)返回 row 和 column 位置的单元格值。protectedvoidinitializeLocalVarsinitializeLocalVars()将表的属性初始化为其默认值。boolean isCellEditableisCellEditable(introw, intcolumn)如果 row 和 column位置的单元格是可编辑的,则返回 true。boolean isCellS
42、electedisCellSelected(introw, intcolumn)如果指定的索引位于行和列的有效范围内,并且位于该指定位置的单元格被选定,则返回 true。boolean isColumnSelectedisColumnSelected(intcolumn)如果指定的索引位于列的有效范围内,并且位于该索引的列被选定,则返回 true。boolean isEditingisEditing()如果正在编辑单元格,则返回 true。boolean isRowSelectedisRowSelected(introw) 如果指定的索引位于行的有效范围内,并且位于该索引的行被选定,则返回 t
43、rue。void moveColumnmoveColumn(intcolumn, inttargetColumn)将视图中的column 列移动到当前被 targetColumn 列所占用的位置。protectedStringparamStringparamString()返回此表的字符串表示形式。Component prepareEditorprepareEditor(TableCellEditoreditor, introw,intcolumn)通过查询 row、column 处单元格值的数据模型和单元格选择状态来准备编辑器。Component prepareRendererprepare
44、Renderer(TableCellRendererrenderer, introw,intcolumn)通过查询 row、column 处单元格值的数据模型和单元格选择状态来准备渲染器。boolean printprint()一个便捷的方法,它显示一个打印对话框,然后以 PrintMode.FIT_WIDTH 模式打印此 JTable,不打印标题或脚注文本。boolean printprint(JTable.PrintModeprintMode)一个便捷的方法,它显示一个打印对话框,然后以给定的打印模式打印此 JTable,不打印标题或脚注文本。boolean printprint(JTab
45、le.PrintModeprintMode,MessageFormatheaderFormat, MessageFormatfooterFormat)一个便捷的方法,它显示一个打印对话框,然后以给定的打印模式打印此 JTable,打印指定的标题和脚注文本。boolean printprint(JTable.PrintModeprintMode,MessageFormatheaderFormat, MessageFormatfooterFormat,booleanshowPrintDialog, PrintRequestAttributeSetattr,booleaninteractive)根据
46、完全功能 print 方法的指定打印此表,将默认打印机指定为打印服务。boolean printprint(JTable.PrintModeprintMode,MessageFormatheaderFormat, MessageFormatfooterFormat,booleanshowPrintDialog, PrintRequestAttributeSetattr,booleaninteractive, PrintServiceservice)打印此 JTable。protectedbooleanprocessKeyBindingprocessKeyBinding(KeyStrokeks,
47、 KeyEvente,intcondition, booleanpressed)由于发生 KeyEvent e 而调用此方法处理ks 的键绑定。void removeColumnremoveColumn(TableColumnaColumn)从此 JTable 的列数组中移除 aColumn。void removeColumnSelectionIntervalremoveColumnSelectionInterval(intindex0, intindex1)取消选中从 index0 到 index1 之间(包含两端)的列。void removeEditorremoveEditor()丢弃编辑
48、器对象并释放它用于单元格呈现的资源。void removeNotifyremoveNotify()调用 unconfigureEnclosingScrollPane 方法。void removeRowSelectionIntervalremoveRowSelectionInterval(intindex0, intindex1)取消选中从 index0 到 index1 之间(包含两端)的行。protectedvoidresizeAndRepaintresizeAndRepaint()等效于先调用 revalidate 再调用repaint。int rowAtPointrowAtPoint(P
49、ointpoint)返回 point 所在的行索引;如果结果不在 0, getRowCount()-1 范围内,则返回 -1。void selectAllselectAll()选择表中的所有行、列和单元格。void setAutoCreateColumnsFromModelsetAutoCreateColumnsFromModel(booleanautoCreateColumnsFromModel)设置此表的 autoCreateColumnsFromModel 标志。void setAutoCreateRowSortersetAutoCreateRowSorter(booleanautoCr
50、eateRowSorter)指定其模型更改时是否应该为表创建一个 RowSorter。void setAutoResizeModesetAutoResizeMode(intmode)当调整表的大小时,设置表的自动调整模式。void setCellEditorsetCellEditor(TableCellEditoranEditor)设置活动单元格编辑器。void setCellSelectionEnabledsetCellSelectionEnabled(booleancellSelectionEnabled)设置此表是否允许同时存在行选择和列选择。void setColumnModelset
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。