实现通过结果集显示数据库记录的TableModel

import javax.swing.table.*; import java.sql.*; import java.util.Vector; public class ResultSetTableModel extends AbstractTableModel{ public ResultSetTableModel(ResultSet aResultSet,String[] columnNames) { this.columnNames = columnNames; rs = aResultSet; try { rsmd = rs.getMetaData(); }catch(SQLException e) { e.printStackTrace(); } } public String getColumnName(int c) { return columnNames[c]; } public int getColumnCount() { try { return rsmd.getColumnCount(); }catch(SQLException e) { e.printStackTrace(); return 0; } } public int getRowCount() { try { rs.last(); return rs.getRow(); }catch(SQLException e) { e.printStackTrace(); return 0; } } public Object getValueAt(int r, int c) { try { rs.absolute(r + 1); return rs.getObject(c + 1); }catch(SQLException e) { e.printStackTrace(); return null; } } private ResultSet rs = null; private ResultSetMetaData rsmd = null; private String[] columnNames = null; }

 

 

直接用这个还不行哦。
在具体用之前还要进行一下设置:
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
不带参数使用默认值: createStatement()=
createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY)

 

1.TYPE_FORWORD_ONLY,只可向前滚动;      
       
    2.TYPE_SCROLL_INSENSITIVE,双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。      
       
    3.TYPE_SCROLL_SENSITIVE,双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。
详看API

好的,我可以为您提供Java窗体显示SQL数据的示例代码,实现显示数据库表格。 您可以使用Java的JDBC API连接到SQL数据库,然后使用Java GUI框架(如Swing或JavaFX)创建窗体,并将查询结果显示在表格控件中。 以下是一个使用Swing框架创建Java窗体,显示SQL查询结果的简单示例代码: ```java import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.sql.*; public class MyWindow extends JFrame { private JTable table; public MyWindow() { super("SQL数据表"); try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 连接数据库,这里使用MySQL数据库举例 String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password); // 执行SQL查询 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); // 将查询结果装载到JTabletable = new JTable(buildTableModel(rs)); JScrollPane scrollPane = new JScrollPane(table); getContentPane().add(scrollPane, BorderLayout.CENTER); // 关闭连接 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new MyWindow(); } // 将ResultSet装载到TableModel中 public static DefaultTableModel buildTableModel(ResultSet rs) throws SQLException { ResultSetMetaData metaData = rs.getMetaData(); // 获取列数 int columnCount = metaData.getColumnCount(); // 获取列名 String[] columnNames = new String[columnCount]; for (int column = 1; column <= columnCount; column++) { columnNames[column - 1] = metaData.getColumnName(column); } // 将结果转换为表格模型 DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0); while (rs.next()) { Object[] rowData = new Object[columnCount]; for (int column = 1; column <= columnCount; column++) { rowData[column - 1] = rs.getObject(column); } tableModel.addRow(rowData); } return tableModel; } } ``` 以上代码演示了如何将查询结果装载到`JTable`中,并显示在Java窗体中。在`buildTableModel()`方法中,我们使用`ResultSetMetaData`对象获取每一列的列名,并将查询结果装载到`DefaultTableModel`中。 希望以上内容能够帮助到您。如果您有任何问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值