Я пишу простую программу, которая обновляет записи в 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
Программисты JAVA общаются здесь
-
Anonymous
1733942910
Anonymous
Я пишу простую программу, которая обновляет записи в 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());
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79272846/saving-multiple-cachedrowset-row-changes-to-database[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия