日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Hacking swing: 一個(gè)JDBC表控件模型

瀏覽:46日期:2024-06-16 10:55:11
內(nèi)容: 編者按:SwingHacks不僅僅是視覺(jué)上的游戲,就如同本文所闡述的一樣。本書(shū)的目的是使開(kāi)發(fā)者能夠利用Java開(kāi)發(fā)出更優(yōu)秀的桌面應(yīng)用程序,而本文正是這樣的一個(gè)例子,不光是利用可視化的JTable,而主要是利用隱藏在這之后的模型來(lái)開(kāi)發(fā)。通過(guò)J2SE所提供的JDBC支持,你可以將一個(gè)數(shù)據(jù)庫(kù)的表映射到一個(gè)Swing的表控件模型,然后用JTable將其呈現(xiàn)出來(lái)。讓我們進(jìn)入細(xì)節(jié)吧。版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必保留以下作者信息和鏈接作者: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關(guān)鍵字:swing;JDBC簡(jiǎn)單快速的將數(shù)據(jù)庫(kù)中的表引入Swing之內(nèi)。如果你已經(jīng)用過(guò)數(shù)據(jù)庫(kù)了,你很可能已經(jīng)用過(guò)為數(shù)據(jù)庫(kù)提供的維護(hù)和查詢表的工具:命令行工具很適合作簡(jiǎn)單而直接的工作,但是很難完成大量數(shù)據(jù)的處理工作。在一次查詢中寫(xiě)一條返回10或20列的數(shù)據(jù)就已經(jīng)很困難了-更糟的是由于換行而使每條記錄都有很多行的情況,此時(shí)你根本無(wú)法區(qū)分一條記錄在哪一行結(jié)束,另一條記錄在哪一行開(kāi)始。如果能夠?qū)?shù)據(jù)庫(kù)中表的內(nèi)容映射到Swing的JTable中是否好一些呢?加上一些JDBC語(yǔ)句,添加到JFrame上,頃刻之間就形成了圖形界面。建立連接如果你同時(shí)用到JDBC和Swing,只需要一句話你就可以抓住要點(diǎn):使用數(shù)據(jù)庫(kù)表的元數(shù)據(jù)來(lái)建立Swing表控件模型。如果你還沒(méi)用到它們,下面就是你需要了解的背景知識(shí):JDBC提供許多抽象方法來(lái)存取數(shù)據(jù)庫(kù)。對(duì)于一個(gè)數(shù)據(jù)庫(kù)有效的Java代碼也應(yīng)該對(duì)其他數(shù)據(jù)庫(kù)有效,唯一的不同之處在于JDBC與不同的數(shù)據(jù)庫(kù)建立連接時(shí)所需要提供的下面的一些字符串也是不同的:¨ 一個(gè)驅(qū)動(dòng)程序類(lèi)的類(lèi)名,提供各種不同的java.sql接口的實(shí)現(xiàn)。¨ 一個(gè)連接到數(shù)據(jù)庫(kù)的URL。這就意味著可能會(huì)用到socket,盡管這不是一定的。一些小的可嵌入的數(shù)據(jù)庫(kù)就像你的應(yīng)用程序一樣可以存活于Java虛擬機(jī)中。¨ 一個(gè)可選的用戶名。¨ 一個(gè)可選的密碼。一旦建立了連接,你就可以發(fā)送一些命令(創(chuàng)建、刪除、或修改表),或者通過(guò)該連接,創(chuàng)建SQL語(yǔ)句來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢。你也能通過(guò)該連接得到數(shù)據(jù)庫(kù)的元數(shù)據(jù),例如它所支持的各種特性,某一字符串的最大長(zhǎng)度等等。更重要的是,它可以讓你知道數(shù)據(jù)庫(kù)中都有哪些表,它們都有哪些字段,每個(gè)字段的數(shù)據(jù)類(lèi)型是什么。因此,假設(shè)連接到了數(shù)據(jù)庫(kù),并且知道該數(shù)據(jù)庫(kù)中的一個(gè)表的表名,你就可以利用兩次查詢將表的內(nèi)容用Java表現(xiàn)出來(lái)。第一次查詢能得到該表的各字段的元數(shù)據(jù)并且將字段名和字段的類(lèi)型構(gòu)建成一個(gè)數(shù)組。這些能被適當(dāng)?shù)囟液芎玫赜成涞絁ava類(lèi)中,至少支持你想支持的各種類(lèi)型。第二次查詢得到表中所有的數(shù)據(jù)。對(duì)于每行數(shù)據(jù),對(duì)應(yīng)字段它都有相應(yīng)的值。這些數(shù)據(jù)可以放入一個(gè)二維數(shù)組中,該數(shù)組存放的是整個(gè)表的內(nèi)容。通過(guò)這兩次查詢,也就完成了要實(shí)現(xiàn)AbstractTableModel類(lèi)中的抽象方法的所有準(zhǔn)備:¨ getRowCount():是你所創(chuàng)建的內(nèi)容數(shù)組contents的長(zhǎng)度。¨ getColumnCount():如果沒(méi)有內(nèi)容則為0,否則為數(shù)組contents的第一項(xiàng)(該項(xiàng)也是一個(gè)數(shù)組,因?yàn)閮?nèi)容數(shù)組是一個(gè)二維數(shù)組)的長(zhǎng)度。¨ getValueAt():contents[row][col]的值。AbstractTableModel已經(jīng)完全的實(shí)現(xiàn)了getColumnClass()和getColumnName()兩個(gè)方法,因此,前者總是返回Object.class,后者返回'A','B','C',等等;你也可以利用第一次查詢的字段元數(shù)據(jù)覆蓋這兩個(gè)方法,以更好的實(shí)現(xiàn)它們。例3-12演示JDBCTableModel如何被實(shí)現(xiàn)。例3-12.由數(shù)據(jù)庫(kù)連接生成的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
標(biāo)簽: JDBC
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美丝祙| 国产精品成人一区二区不卡| 亚洲一区不卡| 老司机精品视频在线播放| 在线国产一区二区| 久久精品三级| 日韩精品一区二区三区免费视频| 精品免费视频| 蜜桃传媒麻豆第一区在线观看| 欧美黄色一区| 亚洲日本三级| 91久久久久| 国产精品麻豆成人av电影艾秋| 午夜久久一区| 日韩精品水蜜桃| 精品久久影院| 国产免费av国片精品草莓男男| 99国产成+人+综合+亚洲欧美| 精品亚洲a∨| 69堂精品视频在线播放| 麻豆久久精品| 好看的亚洲午夜视频在线| 日本不卡免费高清视频在线| 国产精品一区二区三区av麻| 日韩高清在线不卡| 国产精品a久久久久| 亚洲精品1区| av亚洲免费| 久久久精品五月天| 日韩国产一区二区三区| 在线精品亚洲欧美日韩国产| 国产精品毛片| 久久xxxx| 欧美综合二区| 亚洲ab电影| 国产亚洲高清视频| 免费日韩av片| 日韩激情网站| 国产精品igao视频网网址不卡日韩| 国产日韩精品视频一区二区三区| 国产情侣久久| 国产成人调教视频在线观看| 亚洲区第一页| 麻豆精品视频在线| 日韩精品久久久久久久电影99爱| 亚洲精品午夜av福利久久蜜桃| 久久高清免费观看| 国产精品国码视频| 日韩av首页| 亚洲午夜一级| 日韩免费精品| 中文字幕成在线观看| 亚洲综合国产| 久久天堂影院| 先锋影音国产一区| 精品久久久亚洲| 免费在线观看视频一区| 欧美精品国产| 日韩av首页| 国产欧美一区二区三区国产幕精品 | 播放一区二区| 日本不卡视频在线| 日韩国产一区二区| 日本aⅴ免费视频一区二区三区| 高清一区二区三区av| 伊人国产精品| 成人国产精品一区二区网站| 久久99久久人婷婷精品综合| 欧美视频一区| 日韩精品欧美| 国产精品一区二区三区av| 国产综合精品| 激情视频网站在线播放色| 亚洲免费资源| 久久香蕉国产| 精品中国亚洲| 日韩精品社区| 亚洲专区欧美专区| 午夜精品久久久久久久久久蜜桃| 久久国产精品免费一区二区三区| 国产亚洲精品久久久久婷婷瑜伽| 久久uomeier| 国产一区丝袜| 欧美精品第一区| 夜久久久久久| 在线亚洲观看| 美女少妇全过程你懂的久久| 国产成人免费视频网站视频社区| 国产欧美日韩一级| 日本欧美大码aⅴ在线播放| 国产视频一区二| 日韩在线短视频| 视频一区欧美精品| 国产精品一级在线观看| 在线一区视频观看| 视频一区免费在线观看| 国产精品视频一区视频二区| 播放一区二区| 日韩久久一区| 免费看久久久| 国产色综合网| 精品香蕉视频| 亚洲深深色噜噜狠狠爱网站 | 成人在线免费观看网站| 红桃视频亚洲| 精品国产亚洲一区二区三区大结局 | 亚洲网址在线观看| 久久精品国产久精国产| 一区视频在线| 高清日韩中文字幕| 久久精品午夜| 日本99精品| 成人va天堂| 91精品美女| 亚洲精品小说| 国产色播av在线| 久久激情av| 欧美精品一区二区三区精品| 欧美激情视频一区二区三区在线播放| 久久一级电影| 久久中文精品| 久久精品99久久久| 亲子伦视频一区二区三区| 国产伦精品一区二区三区视频| av不卡免费看| 亚洲四虎影院| 国产精品久久久久久久久妇女| 欧美精品国产白浆久久久久| 美女精品网站| 九一成人免费视频| 99久久激情| 久久亚洲国产| 婷婷成人在线| 1024精品久久久久久久久| 正在播放日韩精品| 久久这里只有精品一区二区| 国产日韩视频在线| 美女久久久久| 国产视频一区欧美| 日本aⅴ亚洲精品中文乱码| 精品一区二区三区中文字幕| 日韩国产欧美一区二区三区| 亚洲精品字幕| 日韩在线观看中文字幕| 亚洲精品美女91| 日韩精品成人| 国产伦乱精品| 国产精品99一区二区三区| 国产高潮在线| 欧美精品一二| 亚洲精品少妇| 国产高清日韩| 青草国产精品久久久久久| 色综合视频一区二区三区日韩| 蜜桃久久久久久| 四虎成人精品一区二区免费网站| 欧美一区不卡| 久久亚洲精精品中文字幕| 日韩精品一卡| 丝袜亚洲精品中文字幕一区| 日本精品久久| 亚洲国产成人二区| 老司机久久99久久精品播放免费| 久久爱www成人| 福利一区视频| 亚洲青青久久| 日韩欧美三级| 黄色免费成人| 国产精品二区不卡| 综合激情视频| 久久高清免费| 久久91视频| 石原莉奈在线亚洲二区| 黄色欧美在线| 青草久久视频| 午夜国产精品视频| 日韩福利视频导航| 日韩国产一区二区三区| 亚州av日韩av| 亚洲精品网址| 精品国产麻豆| 自拍自偷一区二区三区| 精品资源在线| 伊人久久一区| 亚洲精品国产偷自在线观看| 亚洲ww精品| 欧美不卡在线| 成人亚洲精品| 欧美日韩亚洲一区| 久久福利影视| 亚洲男女av一区二区| 亚洲精品一区三区三区在线观看| 亚洲精品日本| 久久国产精品久久久久久电车| 国产精品99一区二区| 国产乱码精品一区二区亚洲| 午夜亚洲一区| 日韩伦理福利| 欧美男人天堂| 日韩精品欧美|