zoukankan      html  css  js  c++  java
  • Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法

    在 MyEclipse 的可视化 Swing 中,有 JTable 控件。

    JTable 用来显示和编辑常规二维单元表。

    那么,如何将 数据库SQL中的数据绑定至JTable中呢?

    在这里,提供两种方法。

    JTable的构造方法

    通过查阅Java的API,可以可以得到JTable的两个重要的构造方法:

    JTable(Object[][] rowData, Object[] columnNames)
    构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。

    JTable(TableModel dm)
    构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。

    以下,我们就通过这两个构造方法来将JTable绑定到SQL数据库。

    必要的准备工作

    一、有一个可供绑定的数据库。
    二、在可视化Swing中拖拉进来一个Jtable控件。

    方法一:通过二维数组绑定

    该方法用到的构造方法为:

    JTable(Object[][] rowData, Object[] columnNames)
    构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。

    构建二维数组rowData

    通过上节博文“预编译”的学习,我们已经能够将SQL数据库读取至ResultSet 中。
    回顾如下:
    	/** 查询并返回记录集 */
    	public ResultSet getResultSet(String sql, Object[] objArr){
    		getConnection();
    		try {
    			pStatement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    			if(objArr!=null && objArr.length>0) {
    				for (int i = 0; i < objArr.length; i++) {
    					pStatement.setObject(i+1, objArr[i]);
    				}
    			}
    			rSet = pStatement.executeQuery();
    			//list = resultSetToList(rs);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			//close();
    		}
    		return rSet;
    	}
    【注】只是与上节博客的方法名不同而已。。
    现在,我们为了将ResultSet 转化为二维数组,写如下方法:
    	/** 把结果集转成Object[][] */
    	public Object[][] resultSetToObjectArray(ResultSet rs) {
    		Object[][] data = null;
    		try {	
    			rs.last();
    			int rows = rs.getRow();
    			data = new Object[rows][];  
    			ResultSetMetaData md = rs.getMetaData();//获取记录集的元数据
    			int columnCount = md.getColumnCount();//列数
    			rs.first();
    			int k = 0;
    			while(rs.next()) {
    				System.out.println("i"+k);
    				Object[] row = new Object[columnCount];
    				for(int i=0; i<columnCount; i++) {
    					row[i] = rs.getObject(i+1).toString();
    				}
    				data[k] = row;
    				k++;
    			}
    		} catch (Exception e) {
    		}
    		return data;
    	}	
    并将这两个方法存至文件UserDAO.java中。
    在Swing所在的Java文件中先实例化UserDAO:
    	UserDAO userDAO = new UserDAO();
    即可将SQL数据转化为二维数组:
    		Object[][] dataObjects = userDAO.resultSetToObjectArray(userDAO.getResultSet(
    						"select id,username,password from t_userr", null));

    构建列名称 columnNames

    这个比较简单,只需要将列名称写入String数组即可。
    	String[] tableStrings = { "id", "username", "password" };

    构建JTable的Model:

    	jTable1.setModel(new DefaultTableModel(dataObjects, tableStrings));

    整体代码视图:


    最终JTable效果图:



    方法二:通过Model绑定

    该方法用到的构造方法为:

    JTable(TableModel dm)
    构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。


    设置Model路径

    进入 JTable 控件的控制面板,点击model。
    选择Model来自代码。
    填写 model 的方法路径:包名.Java文件名.方法名。
    为了调用方便,建议将方法设置为静态方法。


    写入Model 方法

    在刚刚设置的路径下写入Model的方法,注意其返回类型为TableModel。
    方法的写法与上面的大同小异,不再赘述。
    	public static TableModel Member() {
    		String[][] playerInfo = new String[80][8];
    		BaseDAO bDao = new BaseDAO();
    		String sql = "select id,realName,username,sex,phone,email,vocation,city from jdbctest";
    		String[] ss = {};
    		ArrayList<HashMap<Object, Object>> list = bDao.Query(sql, ss);
    //		bDao.AllArray(list);
    		int i = 0, j = 0;
    		for (HashMap<Object, Object> maps : list) {
    			Set<Object> keysObjects = maps.keySet();
    			for (Object kObject : keysObjects) {
    				playerInfo[i][j] = maps.get(kObject).toString();
    				j++;
    			}
    			i++;
    			j = 0;
    		}
    		String[] Names = { "id", "username", "sex", "phone","vocation","email","realName",   "city" };
    		DefaultTableModel dModel = new DefaultTableModel(playerInfo, Names);
    		return (TableModel)dModel;
    	}

    JTable 效果



  • 相关阅读:
    基于Flume做FTP文件实时同步的windows服务。
    Java代码解决ElasticSearch的Result window is too large问题
    springboot+zuul(二)------智能负载
    springboot+zuul(一)------实现自定义过滤器、动态路由、动态负载。
    Docker 快速安装&搭建 Ngnix 环境,并配置反向代理
    如何通过 Freemark 优雅地生成那些花里胡哨的复杂样式 Excel 文件?
    Elasticserach 同步索引报错:ElasticSearch ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]
    如何通过Gitalk评论插件,5分钟为你的博客快速集成评论功能
    一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏
    Docker 快速安装&搭建 Mysql 环境
  • 原文地址:https://www.cnblogs.com/aukle/p/3228576.html
Copyright © 2011-2022 走看看