电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Hacking swing: 一個JDBC表控件模型

瀏覽:7日期: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
相關文章:
主站蜘蛛池模板: 江苏南京多语种翻译-专业翻译公司报价-正规商务翻译机构-南京华彦翻译服务有限公司 | 小型铜米机-干式铜米机-杂线全自动铜米机-河南鑫世昌机械制造有限公司 | 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 商秀—企业短视频代运营_抖音企业号托管 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 玻璃钢罐_玻璃钢储罐_盐酸罐厂家-河北华盛节能设备有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 不锈钢电动球阀_气动高压闸阀_旋塞疏水调节阀_全立阀门-来自温州工业阀门巨头企业 | 半容积式换热器_北京浮动盘管换热器厂家|北京亿丰上达 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 成都珞石机械 - 模温机、油温机、油加热器生产厂家 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 | 减速机_上海宜嘉减速机| LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 乐之康护 - 专业护工服务平台,提供医院陪护-居家照护-居家康复 | 荣事达手推洗地机_洗地机厂家_驾驶式扫地机_工业清洁设备 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 电磁铁_小型推拉电磁铁_电磁阀厂家-深圳市宗泰电机有限公司 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 电地暖-电采暖-发热膜-石墨烯电热膜品牌加盟-暖季地暖厂家 |