jtable-java连接数据库 更新JTable问题

问题描述

java连接数据库 更新JTable问题

//下面是我的table
class Store_table

{
Object data[][];
Object name[]={"商品编号","商品名称","价格","上架日期","保质日期","库存"};
Store_table(String bq)
{

String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=Store;IntegratedSecurity=True";//
// Declare the JDBC objects.
Connection con=null;
Statement sql=null;
ResultSet rs=null; 

try {
    // Establish the connection.
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    con = DriverManager.getConnection(url);    

    sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    rs = sql.executeQuery("SELECT  * FROM 仓库 where 标签='"+bq+"'");
    rs.last();
    data=new Object[rs.getRow()][6];
    // Iterate through the data in the result set and display it.
    int i=0;
    rs.beforeFirst();
    while (rs.next()) {    

        long number=rs.getLong("商品编号");
        String name=rs.getString("商品名称");
        float price=rs.getFloat("价格");
        Date date=rs.getDate("上架日期");
        int staydate=rs.getInt("保质日期");
        int repertory=rs.getInt("库存");
        data[i][0]=number;
        data[i][1]=name;
        data[i][2]=price;
        data[i][3]=date;
        data[i][4]=staydate;
        data[i][5]=repertory;
        i++;

    }
}    

// Handle any errors that may have occurred.
catch (Exception e) {
    e.printStackTrace();    

}    

finally {
    if (rs != null)
        try {
            rs.close();
        } catch (Exception e) {
        }
    if (sql != null)
        try {
            sql.close();
        } catch (Exception e) {
        }
    if (con != null)
        try {
            con.close();
        } catch (Exception e) {
        }
} 

}

}

//我用JComboBox调用和更新JTable

        public void actionPerformed(ActionEvent arg0) {

            String a=comboBox.getSelectedItem().toString();

            store=new Store_table(a);
            //把store放进JTable
            ta=new JTable(store.data,store.name)
            {
                public boolean isCellEditable(int row, int column) {return false;};//设置列表数据不能修改
                };
            //把ta列表放进滚动列表
                ta.setModel(model);
            JScrollPane jsp=new JScrollPane(ta);
            //JScrollPane jsp=new JScrollPane(store);
            //getContentPane().add(jsp,BorderLayout.CENTER);
            ta.setBackground(Color.ORANGE);
            jsp.setBackground(Color.GRAY);
            //jsp.setBackground(Color.ORANGE);
            contentPane.add(jsp);
            jsp.setBounds(0, 41, 743, 252);

        }
    });

怎么让JTable在JComboBox改动的时候更新呢?
据说需要setModel 再repaint 再updateUI
可是具体怎么做呢?

解决方案

table不用每次都重新new一个,每次刷新用的都是同一个table, 所以new Jtable是在JComboBox的actionPerformed()之外,在动作之内只需更新table的model并repaint和updateUI. 你可以每次刷新都新建一个model:
DefaultTableModel model=new DefaultTableModel(store.data, store.name);
table.setModel(model);
table.repaint();
table.updateUI();
或者新建一个model类,在Store_table(String bq)里面将数据用list的方式保存:
public class StoreTableModel extends AbstractTableModel{

private String[] names = {"商品编号","商品名称","价格","上架日期","保质日期","库存"};
private List<Object> list = new ArrayList<Object>();

public StoreTableModel() {

}

public void setRowData(List list) {
    this.list = list;
    fireTableDataChanged();
}

@Override
public int getRowCount() {
    if(list.isEmpty())
        return -1;
    return list.size();
}

@Override
public int getColumnCount() {
    return names.length;
}

@Override
public String getColumnName(int columnIndex) {
    return names[columnIndex];
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    if (!list.isEmpty()) {
         return list.get(rowIndex)[columnIndex];
   }
    return null;
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
}

}

时间: 2024-08-30 23:58:07

jtable-java连接数据库 更新JTable问题的相关文章

数据统计-java连接数据库 对数据库的操作

问题描述 java连接数据库 对数据库的操作 创建数据库表格(学生考勤信息),以每周为单位,怎样在java中创建统计并查询出一个月的信息. 个人思路:在java中另外创建各个周的表格,表格结构一样 解决方案 grep by ** 有一个按照月统计的sql自己差吧.. 解决方案二: jtable很好用见表格 用二维数组向里面填充就可以

Win7系统怎么关闭Java自动更新功能?

  Win7系统上安装JAVA JRE或JDK后,系统就会启动一个jusched进程,定时检查JRE或JDK更新包,跟Adobe Reader.FlashPlayer一样烦人,每次开机,或是定时每天去搞个更新.推个升级什么的,你不理它,它就候着在托盘里.往往你想关闭它还真不是那么容易的事,你把默认的配置关了,一开机它跑又出来了(因为我们通过右下角那个默认配置窗口配置,根本没生效,它也不提示),下面系统之家小编就为大家介绍一下Win7系统怎么关闭Java自动更新功能! 现在的程序一般都把更新程序独

开发者论坛一周精粹(第十五期):Oracle发布多个Java漏洞更新-2017年7月

第十五期(2017年7月17日-2017年7月23日 ) 2017年7月18日,Oracle官方发布了2017年7月份的安全公告,安全公告中报告了多个漏洞,远程用户可以访问和修改目标系统上的数据,或可以在目标系统上获得提升的权限,或导致目标系统上的拒绝服务,涉及到的安全漏洞较多,安全风险较高. [漏洞公告]Oracle发布多个Java漏洞更新-2017年7月 https://bbs.aliyun.com/read/322152.html 您的MySQL数据在裸奔中吗?来不及了,快上车 https

Java连接数据库,成功加载SQL驱动程序,但数据库连接失败

问题描述 Java连接数据库,成功加载SQL驱动程序,但数据库连接失败 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class T2 { public static void main(String[] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver&quo

java连接数据库,驱动也加载了,还是出错

问题描述 java连接数据库,驱动也加载了,还是出错 我用的是sqlserver2008 解决方案 private String url="jdbc:sqlserver://localhost:1433;DatabaseName=Memorandum"; private String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; 看下这两句话对么 解决方案二: 看你的错误信息是插件而不是mysql连接数

java 关于更新数据库报错

问题描述 java 关于更新数据库报错 用spring操作数据库!在后台更新时!执行完update了!后面代码报错!怎么样才能控制整句话执行完在插入数据库 解决方案 事务控制 最起码贴图看看吧~~~ 解决方案二: 先把错误贴出来,没错误怎么看 解决方案三: 配置 事务控制 呀呀呀

java mysql-Eclipse 使用java连接数据库MySQL

问题描述 Eclipse 使用java连接数据库MySQL Eclipse 使用java连接数据库MySQL ResultSet rs=stat.executeQuery(sql1) 虽然可以,sql1=SELECT*FROM hit可以,但是稍微复杂点用不了怎么办?比如sql1=SELECT*FROM hit WHERE (POWER(MOD(ABS(X-113.964034)360)2)+POWER(ABS(Y-22.590436)2)) AS distance ORDER BY dista

求大神帮忙使用netbeans写java连接数据库时Statemnt中没有executeQuery方法

问题描述 求大神帮忙使用netbeans写java连接数据库时Statemnt中没有executeQuery方法 我在使用的netbeans中做数据库连接的时候没有Statemnt中没有executeQuery方法但是有execute方法怎么办是JDK的问题还是netbeans问题?求大神帮助!!!! 解决方案 public interface Statement 中有executeQuery 在java.sql中; public class Statement 这里面是没有executeQue

java 数据库更新没反应

问题描述 java 数据库更新没反应 我写了这段代码.为什么数据库那边数据没更新呢. 解决方案 看看这个的写法,http://www.cnblogs.com/hongten/archive/2011/06/19/2084696.html. 解决方案二: 你的查询语句可以查询到数据吗 解决方案三: 事务没有提交吧 解决方案四: 还可以在数据库里追踪看一下,是否有语句执行,执行的是什么 解决方案五: hql里面的冒号... 解决方案六: 你写的是select语句啊,跟 更数据没半毛关系 解决方案七: