Java 如何在MySQL中动态转换行到列并在Swing中显示结果
我试图在MySQL中动态地将行转换为列,并在Java/Swing中显示结果 我用于将行转换为列的代码如下Java 如何在MySQL中动态转换行到列并在Swing中显示结果,java,mysql,swing,Java,Mysql,Swing,我试图在MySQL中动态地将行转换为列,并在Java/Swing中显示结果 我用于将行转换为列的代码如下 SET @cols = NULL; SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(Name = ''', Name, ''', Amount , NULL)) AS ', '''', Name , '''') ) INTO @cols FROM table1; SET @sql = CONC
SET @cols = NULL;
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(Name = ''',
Name, ''', Amount , NULL)) AS ', '''', Name , '''')
) INTO @cols
FROM table1;
SET @sql = CONCAT('SELECT
Date, ', @cols , ', SUM(Amount) AS Total
FROM table1
GROUP BY Date;');
prepare stmt
FROM @sql;
execute stmt;
虽然我在MySQL中获得了结果,但我不知道如何使用该代码并在Java Swing中显示结果。使用准备好的语句创建存储过程 首先,你必须。我没有测试您的代码,但是可以使用如下代码创建存储过程
DROP PROCEDURE IF EXISTS execSql;
DELIMITER //
CREATE PROCEDURE execSql ()
BEGIN
SET @sql = CONCAT( ...
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
使用JDBC调用MySQL存储过程
JDBC提供了一个CallableStatement
类,可以用来调用存储过程。您可以查看教程以了解更多信息
在Swing JTable中显示结果
要显示数据,可以使用结果集创建一个表格模型
。有许多类/库可用于使用resultset(例如或)填充TableModel
转置表格模型
有时,您希望将查询结果转置(将行转换为列)。虽然是MySQL,但您可以转置Swing的TableModel。我认为转置TableModel是更好(更简单)的选择
基本上,你可以转换结果。您可以检查和。TransposedTableModel
的代码可能如下所示
public TransposedTableModel extends AbstractTableModel {
private TableModel innerTableModel;
public TransposedTableModel(TableModel innerTableModel) {
this.innerTableModel = innerTableModel;
}
@Override
public int getRowCount() {
return innerTableModel.getColumnCount();
}
@Override
public int getColumnCount() {
return innerTableModel.getRowCount();
}
Override
public Object getValue(int row, int column) {
return innerTableModel.getValue(column, row);
}
};
然后,您可以使用“普通”SQL,并使用转置的TableModel
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table1");
TableModel normalTableModel = DBUtils.resultSetToTableModel(rs);
TableModel transposedTableModel = new TransposedTableModel(normalTableModel);
JTable swingTable = new JTable (transposedTableModel);
请澄清你的问题您想和吗?是的,我想调用这个mysql过程并在jtable中显示它,您能用示例指导我吗?如果你想转置结果,我认为你必须转置Java中的TableModel,而不是“动态地将行转换为列”
,并在jtable中显示它,
——论坛和web上有很多例子展示了如何做到这一点。首先,您可以使用JTable
和ResultSet
搜索此论坛,以查找示例,说明如何使用ResultSet中的数据创建TableModel
。这就是你解决许多问题的方法。您只需选择几个关键字并进行搜索。
public TransposedTableModel extends AbstractTableModel {
private TableModel innerTableModel;
public TransposedTableModel(TableModel innerTableModel) {
this.innerTableModel = innerTableModel;
}
@Override
public int getRowCount() {
return innerTableModel.getColumnCount();
}
@Override
public int getColumnCount() {
return innerTableModel.getRowCount();
}
Override
public Object getValue(int row, int column) {
return innerTableModel.getValue(column, row);
}
};
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table1");
TableModel normalTableModel = DBUtils.resultSetToTableModel(rs);
TableModel transposedTableModel = new TransposedTableModel(normalTableModel);
JTable swingTable = new JTable (transposedTableModel);