2015-02-27 4 views
0

У меня есть интересная дилемма;Java удаляет строку из многомерного массива

У меня есть строка [] [], извлеченная из базы данных MySQL. Для простоты я напечатал содержимое с помощью Arrays.deepToString(<arrayname>):

[[1, gimley, <sanitised>, <sanitised>, <sanitised>, <sanitised>, 1994-10-11, <sanitised>, 2015-02-20 08:55:36.0], 
[2, Eris, Exotic, <sanitised>, <sanitised> <sanitised> <sanitised>, <sanitised>, 1996-02-15, <sanitised>, 2015-02-24 13:02:00.0], 
[3, Macca, Maccan, <sanitised>, <sanitised>, <sanitised>, 1996-11-11, University, Probably on Destiny, 2015-02-24 13:03:17.0], 
[4, <sanitised>, bacon, standard, <sanitised>, <sanitised>, 1996-03-12, <sanitised> or <sanitised>; depends, 2015-02-26 15:44:28.0]] 

Мой вопрос: Как я могу удалить один из рядов массивов массивов из-, и заменить существующую базу данных с содержанием нового массив из-массивов? Я понимаю, что это плохая практика, поскольку я могу просто обновить таблицу напрямую, но это упражнение требует от меня этого метода.

+2

Так что вы пробовали? – NeplatnyUdaj

+1

Как вы заполнили этот массив в первую очередь. Или это существующий код? – CKing

+0

@NeplatnyUdajI попытались преобразовать этот массив в список, отредактировать список, а затем перекомпилировать список как новую String [] [], но я не могу обвести вокруг него голову. Я в основном хочу удалить определенную строку по имени, когда набирается соответствующее имя. –

ответ

1

Вы имеете в виду что-то вроде этого?

public class TestClass { 

public static final String[][] removeRow(String[][] source, String rowName) { 
    boolean rowFound = false; 
    for (int i = 0; i < source.length; i++) { 
     if (source[ i ][ 0 ].equals(rowName)) { 
      rowFound = true; 
     } 
    } 
    if (!rowFound) { 
     return source; 
    } 

    String[][] result = new String[ source.length - 1][ source[ 0 ].length ]; 
    int resultIndex = 0; 
    for (int i = 0; i < source.length; i++) { 
     if (!source[ i ][ 0 ].equals(rowName)) { 
      System.arraycopy(source[ i ], 0, result[ resultIndex ], 0, source[ i ].length); 
      resultIndex++; 
     } 

    } 

    return result; 
} 

@Test 
public void test() { 
    String[][] source = { 
      { "1", "one", "I", "eins" }, 
      { "2", "two", "II", "zwei" }, 
      { "3", "three", "III", "drei" }, 
      { "4", "four", "IV", "vier" } 
    }; 

    String[][] result = removeRow(source, "2"); 
    assertEquals("{[1, one, I, eins][3, three, III, drei][4, four, IV, vier]}", toString(result)); 

    result = removeRow(source, "rowNotIn"); 
    assertEquals("{[1, one, I, eins][2, two, II, zwei][3, three, III, drei][4, four, IV, vier]}", toString(result)); 
} 

private String toString(String[][] source) { 
    StringBuffer sb = new StringBuffer(); 
    sb.append("{"); 
    for (int i = 0; i < source.length; i++) { 
     sb.append(Arrays.toString(source[ i ])); 
    } 
    sb.append("}"); 
    return sb.toString(); 
} 

}

+0

Сортировка, массив печатается только таким образом, метод, используемый для его получения: String [] [] dbTable = null; table = conn.createStatement(); Строка sql = "select * from Profiles"; ResultSet rs = table.executeQuery (sql); rs.last(); int rowNumb = rs.getRow(); ResultSetMetaData rsmd = rs.getMetaData(); int columnS = rsmd.getColumnCount(); \t rs.beforeFirst(); dbTable = new String [rowNumb] [columnS]; int i = 0; в то время как (rs.next() && я

+0

Итак, для массива нет жестко закодированных элементов, теперь вы видите мою проблему? –

Смежные вопросы