2012-12-27 109 views
0

我在Java中的String数据类型的邻接矩阵:邻接矩阵从Java到SQL

String[][] A; 

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

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

  1. 我希望能够将数据视为矩阵。

非常感谢所有帮助!

回答

3

而是通过设置变量列的麻烦去的,创建一个简单的数据库表:

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中,在排所请求的元素的含量,列是发现这样的:

​​

很明显,选项1更快地访问元素。选项2节省数据库空间。 PS:如果你有一个长度可变的数组数组,那么选项1将不起作用。
colNumber是String数组的固定列数。

+1

这显然是正确的解决方案。尽可能避免动态更改表格模式。 –

+0

+1我非常同意这一点。 –

+0

我看到这是如何更高效,是否有一种方法来查询这种格式的数据,以便我可以物理看待我的数据为矩阵?我真的希望能够以n×n的矩阵物理地查看数据。 – CodeKingPlusPlus

0

也许你可以添加列到表中。试想一下,你的表被命名为“MYTABLE”: 在SQL Server中,你可以这样写:

ALTER TABLE MYTABLE ADD COLUMN COLX varchar(255); 

其中X是你需要的列数。

这个选项,可以让你在你的表中添加列,但也许解决方案是创建一个新的表落下前一个:

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

让我知道,如果它是你的问题。 谢谢。