swing中把数据库的数据显示在界面表格中

        private JFrame J;
	private DefaultTableModel model;
	private JTable table;


	Hangban() throws ClassNotFoundException ,SQLException{

		J = new JFrame();
		J.setTitle("航班信息");
		J.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		J.setVisible(true);
		J.setBounds(230, 130, 620, 400);
		AbstractTableModel tm;

		final String[] title = { "航班号", "起飞时间", "始发地", "目的地", "总票数", "头等舱票数",
				"商务舱票数", "经济舱票数" };
		JScrollPane jsp;

		@SuppressWarnings({ "rawtypes", "unchecked" })
		final Vector<Vector<Comparable>> vect = new Vector();// 实例化向量
		tm = new AbstractTableModel() {// 实现AbstractTableModel的抽象方法
			/**
		 * 
		 */
			private static final long serialVersionUID = 1L;

			public int getColumnCount() {
				return title.length;
			}

			public int getRowCount() {
				// TODO 自动生成的方法存根
				return vect.size();
			}

			public Object getValueAt(int row, int column) {
				// TODO 自动生成的方法存根
				if (!vect.isEmpty())
					return (((Vector<?>) vect.elementAt(row)).elementAt(column));
				else
					return null;
			}

			public String getColumnName(int column) {
				return title[column];// 设置表格列名
			}

			public void setValueAt(Object value, int row, int column) {
			}

			public Class<? extends Object> getColumnClass(int c) {
				return getValueAt(0, c).getClass();
			}// 取得所属对象类

			public boolean isCellEditable(int row, int column) {

				return false;
			}// 设置单元格不可编辑
		};
		table = new JTable(tm);
		table.setToolTipText("显示所有的数据");
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);// 设置表格调整尺寸模式
		table.setCellSelectionEnabled(false);// 设置单元格选择方式
		table.setShowVerticalLines(true);// 设置是否显示单元格间的分割线
		table.setShowHorizontalLines(true);

		jsp = new JScrollPane(table);

		J.add(jsp);

		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;

		Class.forName("com.hxtt.sql.access.AccessDriver");
		con = DriverManager.getConnection("jdbc:odbc:tourist_access");
		stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
				ResultSet.CONCUR_UPDATABLE);
		rs = stmt.executeQuery("select * from flight ");

		vect.removeAllElements();// 初始化向量对象
		tm.fireTableStructureChanged();// 更新表格内容
		while (rs.next()) {
			@SuppressWarnings("rawtypes")
			Vector<Comparable> v = new Vector<Comparable>();
			v.add(rs.getInt(1));
			v.add(rs.getString(2));
			v.add(rs.getString(3));
			v.add(rs.getString(4));
			v.add(rs.getInt(5));
			v.add(rs.getInt(7));
			v.add(rs.getInt(6));
			v.add(rs.getInt(8));
			vect.add(v);
			tm.fireTableStructureChanged();
		}

		
		if (rs != null) {
			rs.close();
			rs = null;
		}
		if (stmt != null) {
			stmt.close();
			stmt = null;
		}
		if (con != null) {
			con.close();
			con = null;
		}
	}

要在Swing GUI查询数据库显示结果,需要进行以下步骤: 1. 建立数据库连接,可以使用Java提供的JDBC API来实现。 2. 创建一个Swing GUI界面,包括需要查询的文本框、按钮和显示结果的表格等组件。 3. 当用户点击查询按钮时,获取文本框的查询条件,并使用JDBC API执行查询操作。 4. 将查询结果封装成一个数据模型,例如Java提供的TableModel。 5. 将数据模型设置到表格,用于显示查询结果。 下面是一个简单的示例代码,可以根据实际情况进行修改和扩展: ```java import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; public class DatabaseQueryGUI extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JTextField queryText; private JButton queryButton; private JTable resultTable; public DatabaseQueryGUI() { super("Database Query GUI"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建查询条件输入框和查询按钮 JPanel queryPanel = new JPanel(); queryText = new JTextField(20); queryPanel.add(queryText); queryButton = new JButton("Query"); queryButton.addActionListener(this); queryPanel.add(queryButton); getContentPane().add(queryPanel, BorderLayout.NORTH); // 创建显示结果的表格 resultTable = new JTable(); getContentPane().add(new JScrollPane(resultTable), BorderLayout.CENTER); // 显示窗口 pack(); setLocationRelativeTo(null); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == queryButton) { // 获取查询条件 String query = queryText.getText(); try { // 建立数据库连接 Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", "root", "password"); // 执行查询 Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(query); // 封装查询结果 DefaultTableModel model = new DefaultTableModel(); int columnCount = resultSet.getMetaData().getColumnCount(); for (int i = 1; i <= columnCount; i++) { model.addColumn(resultSet.getMetaData().getColumnName(i)); } while (resultSet.next()) { Object[] row = new Object[columnCount]; for (int i = 1; i <= columnCount; i++) { row[i-1] = resultSet.getObject(i); } model.addRow(row); } // 显示查询结果 resultTable.setModel(model); // 关闭数据库连接 resultSet.close(); statement.close(); connection.close(); } catch (Exception ex) { ex.printStackTrace(); } } } public static void main(String[] args) { new DatabaseQueryGUI(); } } ``` 上述代码使用了MySQL数据库,如果需要使用其他数据库,需要修改JDBC驱动和连接串的信息。同时,为了保证安全性,应该将查询条件进行参数化处理,而不是直接拼接SQL语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值