我在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()
,但它确切地返回已编辑的内容,而不是数据库中包含的内容。
答案 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,!]]