我如何:复制从方法填充的2D字符串数组

时间:2015-03-06 12:44:45

标签: java

我在Main类中使用以下方法填充了一个2D String数组:

public static String[][] dbTable() throws SQLException
{
    String[][] dbTable = null;
    table = conn.createStatement();
    String sql = "select * from Java_Test_Profiles";
    ResultSet rs = table.executeQuery(sql);
    rs.last();
    int rowNumb = rs.getRow();
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnS = rsmd.getColumnCount();

    rs.beforeFirst();
    dbTable= new String[rowNumb][columnS];

    int i=0;
    while(rs.next() && i<rowNumb && rowNumb<100)
    {
        for(int j=0;j<columnS;j++)
        {
            dbTable[i][j] = rs.getString(j+1);
        }
        i++;
    }
    return dbTable;

“dbTable”在几个类之间传递,我想知道如何创建它的副本进行编辑。我想这样做,因为我需要“重新加载”数组的内容回到其原始状态。我试图调用main.dbTable(),但它确切地返回已编辑的内容,而不是数据库中包含的内容。

1 个答案:

答案 0 :(得分:1)

你可以做一个克隆,但它做一个浅的克隆。只需要做一个技巧来解决这个问题。

首先,让我们复制原文:

String[][] cloneArray = dbTable.clone();

然后让我们填充克隆的数组:

for (int i = 0; i < cloneArray.length; i++) {
    cloneArray[i] = cloneArray[i].clone();
}

用于测试的代码

String[][] mainArray = new String[1][];
String[] data = new String[3];

data[0] = "Hello";
data[1] = "World";
data[2] = "!";

mainArray[0] = data;

String[][] testArray = mainArray.clone();

for (int i = 0; i < testArray.length; i++) {
    testArray[i] = testArray[i].clone();
}

System.out.println("Main Array: " + Arrays.deepToString(mainArray));
System.out.println("test Array: " + Arrays.deepToString(testArray));

data[2] = "!!!!";

mainArray[0] = data;

System.out.println();
System.out.println("Main Array2: " + Arrays.deepToString(mainArray));
System.out.println("test Array2: " + Arrays.deepToString(testArray));

输出:

  

主阵列:[[Hello,World,!]]
  测试数组:[[Hello,World,!]]

     

Main Array2:[[Hello,World,!!!!]]
  测试Array2:[[Hello,World,!]]