java怎么以table形式显示数据库查询结果

8 篇文章 0 订阅
package com.unit.wjh;
import javax.swing.table.AbstractTableModel;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
//***************************************************************************
class test1 extends AbstractTableModel
{      

/**         *  @author 小悠         */ 
       private Vector TableData;//用来存放表格数据的线性表
       private Vector TableTitle;//表格的 列标题
        
       //注意构造函数是第一个执行的,用于初始化 TableData,TableTitle
       public test1()
       {
              //先new 一下
              TableData = new Vector();
              TableTitle= new Vector();
               
              //这里我们假设当前的表格是 3x3的
              //先初始化 列标题,有3列
              TableTitle.add("第一列");
              TableTitle.add("第二列");
              TableTitle.add("第三列");
              String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";  
           String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=Leading";    
           String userName="sa";   
              String userPwd="123456";
              try  { 
              Class.forName(driverName);   
              System.out.println("加载驱动成功!");  
              } catch(Exception e)   {   
              e.printStackTrace();    
              System.out.println("加载驱动失败!");  
              } try{    
              Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);    
              System.out.println("连接数据库成功!"); 
              Statement stmt = dbConn.createStatement();
                     ResultSet rs = stmt.executeQuery("select GoodsId,Operate,StoreId,RelationId from GoodsStoreDetail with (nolock) where GoodsId in (12345)");
                     while(rs.next()){//如果对象中有数据,就会循环打印出来
                      String []Line= {rs.getString("GoodsId"),rs.getString("Operate"),rs.getString("RelationId")};
                      TableData.add(Line);
                      //System.out.println(rs.getString("operate"));
                     }


              } catch(Exception e)   {    
              e.printStackTrace();    
              //System.out.print("SQL Server异常失败!");  
              }  
           
               
              /*//初始化3行数据,方便起见直接用String数组保存每一行的数据
              //第0行,都显示表格的坐标
              String []Line1 = {"(0,0)","(0,1)","(0,2)"};
              //第1行
              String []Line2 = {"(1,0)","(1,1)","(1,2)"};
              //第2行
              String []Line3 = {"(2,0)","(2,1)","(2,2)"};
              //将数据挂到线性表形成二维的数据表,形成映射
              TableData.add(Line1);
              TableData.add(Line2);
              TableData.add(Line3);*/
               
       }
       @Override
       public int getRowCount()
       {
              //这里是告知表格应该有多少行,我们返回TableData上挂的String数组个数
              return TableData.size();
       }
  
       @Override
       public int getColumnCount()
       {
              //告知列数,用标题数组的大小,这样表格就是TableData.size()行,TableTitle.size()列了
              return TableTitle.size();
       }
  
       @Override
       public Object getValueAt(int rowIndex, int columnIndex)
       {
              //获取了表格的大小,当然还要获取数据,根据坐标直接返回对应的数据
              //小心 都是从 0开始的,小心下标越界 的问题
              //我们之前是将 String[]挂到了线性表上,所以要先获取到String[]
              //
              //获取每一行对应的String[]数组
              String LineTemp[] = (String[])this.TableData.get(rowIndex);
              //提取出对 应的数据
              return LineTemp[columnIndex];
               
              //如果我们是将 线性表Vector挂到了Vector上要注意每次我们获取的是 一行线性表
              //例如
              //return ((Vector)TableData.get(rowIndex)).get(columnIndex);
       }
  
       @Override
       public boolean isCellEditable(int rowIndex, int columnIndex)
       {
              //这个函数式设置每个单元格的编辑属性的
              //这个函数AbstractTableModel已经实现,默认的是 不允许编辑状态
              //这里我们设置为允许编辑状态
              return true;//super.isCellEditable(rowIndex, columnIndex);
       }
       @Override
       public void setValueAt(Object aValue, int rowIndex, int columnIndex)
       {
              //当单元格的数据发生改变的时候掉用该函数重设单元格的数据
              //我们想一下,数据是放在TableData 中的,说白了修改数据就是修改的
              //TableData中的数据,所以我们仅仅在此处将TableData的对应数据修改即可
               
              ((String[])this.TableData.get(rowIndex))[columnIndex]=(String)aValue;
              super.setValueAt(aValue, rowIndex, columnIndex);
              //
              //其实这里super的方法是调用了fireTableCellUpdated()只对应更新了
              //对应单元格的数据
              //fireTableCellUpdated(rowIndex, columnIndex);
       }
}
//创建一个Dialog显示一下
public class test
{
       public static void main(String[] args)
       {     test1 myModel=  new test1(); 
             JTable table = new JTable(myModel);
             JScrollPane scrollpane = new JScrollPane(table);
             JFrame jf = new JFrame();
             JScrollPane jsp = new JScrollPane(table);
             jf.add(jsp);
             jf.setBounds(0, 0, 500, 500);
             jf.setVisible(true);    
       }
}
  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值