【问题标题】:Adjacency Matrix from Java to SQL从 Java 到 SQL 的邻接矩阵
【发布时间】:2025-11-28 10:55:01
【问题描述】:

我在 Java 中有一个字符串数据类型的邻接矩阵:

String[][] A;

我想将我的邻接矩阵 A 读入 MySQL 表。问题是我永远不知道我需要多少行/列(我也不想创建所有列)。我认为解决这个问题的诀窍是动态创建列。如何“即时”添加列?

一旦我可以动态添加列,我就可以逐行读取矩阵。

  1. 我希望能够以矩阵的形式查看数据。

非常感谢所有帮助!

【问题讨论】:

    标签: java sql adjacency-matrix


    【解决方案1】:

    不用费心设置变量列,创建一个简单的数据库表A:

    row     integer
    col     integer
    content varchar
    

    这使您可以灵活地轻松避免空条目,并且每个数组项都有一个数据库表行。

    你有两个选择:

    1. 为数组的每个元素(包括空值)生成一个数据库行,或
    2. 为每个非空元素生成一个数据库行。

    对于选项 1,此代码将提供任何元素:

    private String getElement(int row, int col) {
        String result = null;
        try {
            if(rs.absolute(row*colNumber+col+1))
                result=rs.getString("content");
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return result;
    }
    

    对于选项 2,在 row,col 处的请求元素的内容是这样找到的:

    private String getElement(int row, int col) {
        String result = null;
        String query = "SELECT * from A where row=? and col=?";
        try {
            PreparedStatement preps = con.prepareStatement(query);
            preps.setInt(1, row);
            preps.setInt(2, col);
            preps.execute();
            rs = preps.getResultSet();
            if (rs.next()) {
                result = rs.getString("content");
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
    
        return result;
    }
    

    很明显,选项 1 访问元素的速度更快。选项 2 节省了数据库空间。

    PS:如果您有一个可变长度数组的数组,选项 1 将不起作用。
    colNumber 是您的字符串数组的固定列数。

    【讨论】:

    • 这显然是正确的解决方案。尽可能避免动态更改表架构。
    • 我知道这如何更有效,有没有办法以这种格式查询数据,以便我可以将我的数据实际视为一个矩阵?我真的希望能够以 n × n 矩阵的形式实际查看数据。
    • 如果你最终得到一个已知行号和列号的数组,如果你将所有元素添加到数据库中,即使是空元素 rs.absolute(row*colunmNumber+column+1 ) 将光标定位到右行。如果你没有固定的列数,或者你不希望有一个空元素的数据库行,那么编写一个方法 String getElement(int row, int col) 并选择需要的记录.如果元素为空,则返回 null,否则返回 String...
    • 您能否详细介绍一下您的解决方案?我不知道你说的光标和你写的方法头是什么意思,以及它是如何应用于这个问题的。
    【解决方案2】:

    也许您可以在表格中添加列。想象一下您的表名为“MYTABLE”: 在 SQL Server 中,您可以编写:

    ALTER TABLE MYTABLE ADD COLUMN COLX varchar(255);
    

    其中 X 是您需要的列数。

    此选项将允许您在表格上添加列,但也许解决方案是创建一个新表格并下拉前一个表格:

    DROP TABLE MYTABLE;
    CREATE TABLE MYTABLE(COL1 varchar(255), COL2 varchar(255)...);
    

    如果是你的问题,请告诉我。 谢谢。

    【讨论】:

      最近更新 更多