Я пишу простую программу, которая обновляет записи в CachedRowset. По какой-то причине он сохранит только набор строк только с одной записью. Если набор строк содержит более одной записи, когда я перебираю записи и изменяю каждую из них в наборе кэшированных строк, эти изменения не будут применены в базе данных.
У меня нет проблем с получением данных из база данных. Когда я говорю «фундаментально», я имею в виду наличие большого количества пользователей в базе данных, набор строк должен быть отключен, иначе приложение полностью остановится. Я понимаю, что использование подготовленных операторов защищает от SQL-инъекций, но в этом приложении я единственный, кто использует программное обеспечение.
Приведенный ниже код берет идентификатор ссылки из главной таблицы и сохраняет его в внешний ключ в дочерней таблице. Причина кода заключается в том, что я создал комплексную систему производственного программного обеспечения и в то время не использовал столбец автоматического увеличения для поля Id. Вместо этого я использую символьные значения для поля Id. Теперь я меняю все это на автоматическое увеличение, но для этого мне нужно обновить все внешние ключи дочерних таблиц.
private void FillForeignKey(String strDeprecated_Id_Column, String strChild_Table_Name, String strChildForeignKey_Column,
Integer intNewMaster_Id, String strOldMaster_Id) throws SQLException {
try {
Connection connection = getConnection("jdbc:mysql://127.0.0.1:5222/jobtrack", "root", "");
//Select Master table with
String seqlChild = "SELECT " + strDeprecated_Id_Column + ", " + strChildForeignKey_Column +
" FROM " + strChild_Table_Name +
" Where " + strDeprecated_Id_Column +" = " + "'" + strOldMaster_Id + "'";
System.out.println(seqlChild);
Statement stChild = connection.createStatement();
ResultSet rsChild = stChild.executeQuery(seqlChild);
RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet crsetChild = factory.createCachedRowSet();
crsetChild.populate(rsChild);
rsChild.close();
//connection.close();
connection.setAutoCommit(false);
System.out.println("Child Rowset Size " + crsetChild.size());
System.out.println("New Id " + intNewMaster_Id);
System.out.println("Old Id " + strOldMaster_Id);
while (crsetChild.next()) {
crsetChild.updateInt(strChildForeignKey_Column, intNewMaster_Id);
crsetChild.moveToCurrentRow();
System.out.println("Data From child Rowset " + crsetChild.getInt(strChildForeignKey_Column));
crsetChild.updateRow();
crsetChild.acceptChanges(connection);
}
crsetChild.close();
//connection.close();
}catch (SQLException e) {
System.out.println(e.getMessage());
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... o-database
Сохранение нескольких изменений строк CachedRowset в базе данных ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сохранение изменений Ravendb заняло слишком много времени при вызове изменений
Anonymous » » в форуме C# - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-