成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Hacking swing: 一個JDBC表控件模型

瀏覽:4日期:2024-06-16 10:55:11
內容: 編者按:SwingHacks不僅僅是視覺上的游戲,就如同本文所闡述的一樣。本書的目的是使開發者能夠利用Java開發出更優秀的桌面應用程序,而本文正是這樣的一個例子,不光是利用可視化的JTable,而主要是利用隱藏在這之后的模型來開發。通過J2SE所提供的JDBC支持,你可以將一個數據庫的表映射到一個Swing的表控件模型,然后用JTable將其呈現出來。讓我們進入細節吧。版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接作者:Elliotte Rusty;henterji原文:http://www.onjava.com/pub/a/onjava/excerpt/swinghks_hack24/index.html譯文:http://www.matrix.org.cn/resource/article/44/44193_Swing+JDBC.html關鍵字:swing;JDBC簡單快速的將數據庫中的表引入Swing之內。如果你已經用過數據庫了,你很可能已經用過為數據庫提供的維護和查詢表的工具:命令行工具很適合作簡單而直接的工作,但是很難完成大量數據的處理工作。在一次查詢中寫一條返回10或20列的數據就已經很困難了-更糟的是由于換行而使每條記錄都有很多行的情況,此時你根本無法區分一條記錄在哪一行結束,另一條記錄在哪一行開始。如果能夠將數據庫中表的內容映射到Swing的JTable中是否好一些呢?加上一些JDBC語句,添加到JFrame上,頃刻之間就形成了圖形界面。建立連接如果你同時用到JDBC和Swing,只需要一句話你就可以抓住要點:使用數據庫表的元數據來建立Swing表控件模型。如果你還沒用到它們,下面就是你需要了解的背景知識:JDBC提供許多抽象方法來存取數據庫。對于一個數據庫有效的Java代碼也應該對其他數據庫有效,唯一的不同之處在于JDBC與不同的數據庫建立連接時所需要提供的下面的一些字符串也是不同的:¨ 一個驅動程序類的類名,提供各種不同的java.sql接口的實現。¨ 一個連接到數據庫的URL。這就意味著可能會用到socket,盡管這不是一定的。一些小的可嵌入的數據庫就像你的應用程序一樣可以存活于Java虛擬機中。¨ 一個可選的用戶名。¨ 一個可選的密碼。一旦建立了連接,你就可以發送一些命令(創建、刪除、或修改表),或者通過該連接,創建SQL語句來對數據庫進行查詢。你也能通過該連接得到數據庫的元數據,例如它所支持的各種特性,某一字符串的最大長度等等。更重要的是,它可以讓你知道數據庫中都有哪些表,它們都有哪些字段,每個字段的數據類型是什么。因此,假設連接到了數據庫,并且知道該數據庫中的一個表的表名,你就可以利用兩次查詢將表的內容用Java表現出來。第一次查詢能得到該表的各字段的元數據并且將字段名和字段的類型構建成一個數組。這些能被適當地而且很好地映射到Java類中,至少支持你想支持的各種類型。第二次查詢得到表中所有的數據。對于每行數據,對應字段它都有相應的值。這些數據可以放入一個二維數組中,該數組存放的是整個表的內容。通過這兩次查詢,也就完成了要實現AbstractTableModel類中的抽象方法的所有準備:¨ getRowCount():是你所創建的內容數組contents的長度。¨ getColumnCount():如果沒有內容則為0,否則為數組contents的第一項(該項也是一個數組,因為內容數組是一個二維數組)的長度。¨ getValueAt():contents[row][col]的值。AbstractTableModel已經完全的實現了getColumnClass()和getColumnName()兩個方法,因此,前者總是返回Object.class,后者返回'A','B','C',等等;你也可以利用第一次查詢的字段元數據覆蓋這兩個方法,以更好的實現它們。例3-12演示JDBCTableModel如何被實現。例3-12.由數據庫連接生成的Swing表控件模型 import javax.swing.*; import javax.swing.table.*; import java.sql.*; import java.util.*; /** an immutable table model built from getting metadata about a table in a jdbc database */ public class JDBCTableModel extends AbstractTableModel { Object[][] contents; String[] columnNames; Class[] columnClasses; public JDBCTableModel (Connection conn, String tableName) throws SQLException { super(); getTableContents (conn, tableName); } protected void getTableContents (Connection conn, String tableName) throws SQLException { // get metadata: what columns exist and what // types (classes) are they? DatabaseMetaData meta = conn.getMetaData(); System.out.println ('got meta = ' + meta); ResultSet results = meta.getColumns (null, null, tableName, null); System.out.println ('got column results'); ArrayList colNamesList = new ArrayList(); ArrayList colClassesList = new ArrayList(); while (results.next()) { colNamesList.add (results.getString ('COLUMN_NAME')); System.out.println ('name: ' + results.getString ('COLUMN_NAME')); int dbType = results.getInt ('DATA_TYPE'); switch (dbType) { case Types.INTEGER: colClassesList.add (Integer.class); break; case Types.FLOAT: colClassesList.add (Float.class); break; case Types.DOUBLE: case Types.REAL: colClassesList.add (Double.class); break; case Types.DATE: case Types.TIME: case Types.TIMESTAMP: colClassesList.add (java.sql.Date.class); break; default: colClassesList.add (String.class); break; }; System.out.println ('type: ' +results.getInt ('DATA_TYPE')); } columnNames = new String [colNamesList.size()]; colNamesList.toArray (columnNames); columnClasses = new Class [colClassesList.size()]; colClassesList.toArray (columnClasses); // get all data from table and put into // contents array Statement statement = conn.createStatement (); results = statement.executeQuery ('SELECT * FROM ' + tableName); ArrayList rowList = new ArrayList(); while (results.next()) { ArrayList cellList = new ArrayList(); for (int i = 0; i
標簽: JDBC
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩一区二区三区av| 日韩av成人高清| 久久精品亚洲麻豆av一区二区| 一区二区在线观看av| 丰满少妇在线播放bd日韩电影| 亚洲国产日韩欧美| 欧美一级夜夜爽| 一区二区三区免费网站| 成人性视频网站| 久久婷婷久久| 国产精品精品国产色婷婷| 日本免费在线视频不卡一不卡二| 国产一区二区三区四区老人| 4438x亚洲最大成人网| 亚洲国产日韩在线一区模特| 欧美在线视频二区| 制服丝袜亚洲色图| 日日摸夜夜添夜夜添国产精品| 欧美不卡视频| 日韩亚洲欧美成人一区| 天天射综合影视| 亚洲欧洲日夜超级视频| 久久综合国产精品| 国产自产视频一区二区三区| 国产精品久久久久久久久婷婷| 久久久亚洲高清| 精品一区二区三区久久| 国产亚洲二区| 欧美激情一二三区| 成人免费视频视频| 欧美午夜电影一区| 亚洲第一成年网| 亚洲黄色影片| 国产精品无圣光一区二区| 丰满放荡岳乱妇91ww| 欧美三级电影一区| 天堂在线一区二区| 国产精品五区| 日韩美女视频一区二区| 91片在线免费观看| 日韩欧美激情四射| 久久aⅴ国产欧美74aaa| 蜜桃av综合| 亚洲综合一区二区| 韩国一区二区三区在线观看 | 久久精品欧美| 亚洲一区二区三区四区的| 亚洲国产91| 国产精品久久久久久久久图文区 | 亚洲国产一区二区在线播放| 亚洲伦伦在线| 国产精品福利影院| 欧美午夜免费| 久久久蜜桃精品| av电影在线观看不卡| 欧美mv和日韩mv国产网站| 国产精品影视在线| 91精品国产一区二区三区| 精品一区二区三区免费毛片爱 | 欧美二区三区的天堂| 精品影院一区二区久久久| 欧美日韩一区不卡| 看国产成人h片视频| 在线免费视频一区二区| 日韩成人免费电影| 久久婷婷激情| 久久精品噜噜噜成人88aⅴ| 欧美日韩在线不卡| 精品一区二区在线播放| 欧美日韩成人综合| 国产一区中文字幕| 制服丝袜在线91| 国产a精品视频| 欧美电影免费提供在线观看| 成人免费va视频| 国产亚洲欧美色| 欧美日韩亚洲一区三区| 国产精品久久久久久久第一福利 | 94-欧美-setu| 国产精品久久久久久一区二区三区| 国内激情久久| 亚洲精品国产a久久久久久| 国产乱人伦精品一区二区| 偷拍与自拍一区| 欧美视频一区二区三区四区| 国产一区二区久久| 久久先锋影音av鲁色资源网| 欧美午夜欧美| 亚洲福利一二三区| 91福利资源站| 国产精品一二三四五| 日韩欧美电影一二三| 91小视频免费看| 日韩理论片在线| 亚洲欧美久久久| 蜜桃久久av一区| 日韩欧美国产一二三区| 午夜精品亚洲一区二区三区嫩草| 中文字幕一区二区三区四区不卡| 在线午夜精品| 蜜臀va亚洲va欧美va天堂| 51精品国自产在线| 欧美xxx在线观看| 亚洲一区影音先锋| 欧美亚洲综合在线| eeuss鲁片一区二区三区| 中文字幕一区二| 一本到不卡精品视频在线观看| 国产一区二区三区电影在线观看| 久久亚洲影视婷婷| 国产欧美大片| 国产一区二区三区美女| 欧美激情一区二区三区在线| 久久精品国语| av在线播放不卡| 亚洲综合丁香婷婷六月香| 欧美日韩一级黄| 欧美另类女人| 天天影视网天天综合色在线播放| 欧美一区二区三区在线电影| 91香蕉视频黄| 亚洲国产精品久久人人爱| 欧美精品 日韩| 极品裸体白嫩激情啪啪国产精品| 人人精品人人爱| 久久精品水蜜桃av综合天堂| 亚洲欧美99| youjizz久久| 一区二区三区精品在线| 在线不卡免费欧美| 一区二区亚洲| 激情六月婷婷综合| 亚洲欧美怡红院| 欧美高清精品3d| 伊人久久成人| 九九久久精品视频| 国产精品狼人久久影院观看方式| 在线观看日韩av先锋影音电影院| 91视频免费观看| 免费视频最近日韩| 中文字幕av一区二区三区高| 色8久久精品久久久久久蜜| 欧美一区二区三区另类| 日欧美一区二区| 亚洲国产高清不卡| 欧美私模裸体表演在线观看| 国产精品mm| 国产精品1区2区3区| 亚洲精选免费视频| 欧美一二三四区在线| 国产精品视频| 91麻豆免费看片| 另类调教123区 | 免费成人av在线播放| 久久久久国产精品麻豆| 欧美主播一区二区三区美女| 今天的高清视频免费播放成人| 国产呦精品一区二区三区网站| 亚洲精品视频在线看| 日韩欧美色电影| 色哦色哦哦色天天综合| 欧美日韩精品伦理作品在线免费观看| 久久国内精品视频| 一区二区视频在线看| www亚洲一区| 欧美日韩国产精选| 亚洲影音一区| 国产综合自拍| 成人网男人的天堂| 老司机午夜精品| 一区二区三区国产精华| 国产午夜精品一区二区三区四区| 欧洲一区二区三区在线| 最新成人av网站| 99精品欧美一区二区三区小说| 另类小说一区二区三区| 亚洲精品网站在线观看| 国产亚洲精品资源在线26u| 538在线一区二区精品国产| 老司机亚洲精品| 亚洲毛片一区| 欧美久久99| 97se亚洲国产综合自在线不卡 | 精品不卡一区| 99re这里只有精品视频首页| 韩国理伦片一区二区三区在线播放| 午夜精品福利一区二区三区av| 亚洲欧洲日产国产综合网| 精品av久久707| 91精品免费在线观看| 欧美日韩中文字幕精品| 色综合激情久久| 香蕉av777xxx色综合一区| 亚洲欧洲日本一区二区三区| 午夜精品网站| 91美女在线观看| www.成人网.com| 成人a免费在线看| 懂色av一区二区夜夜嗨| 国产一区二区视频在线播放|