• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема С Insert

  • Автор темы Kee_Keekkenen
  • Дата начала
K

Kee_Keekkenen

о базе mysql ничего не знаю, так что не пинайте, как говорится жестко..

таблица с данными создавалась таким образом

Код:
CREATE TABLE IT_ORGANIZATION (
F_ID INT NOT NULL AUTO_INCREMENT,
F_SAP_ID INT NOT NULL,
F_SAP_MODIFIED DATE,
F_ENTER_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
F_NAME VARCHAR(300) NOT NULL,
F_SHORT_NAME VARCHAR(100) NOT NULL,
F_ACTION_TYPE VARCHAR(10) NOT NULL,
F_LEGAL_CODE VARCHAR(20),
F_LEGAL INT,
F_XML_SOURCE INT NOT NULL,
F_PARENT_SAP_ID INT,
F_SYNC_FLAG INT DEFAULT 0,
PRIMARY KEY (F_ID)
) ENGINE=InnoDB;

CREATE UNIQUE INDEX idx_unique_key_itorganization ON IT_ORGANIZATION (F_LEGAL, F_SAP_ID);
CREATE UNIQUE INDEX idx_sapid_itorganization ON IT_ORGANIZATION (F_SAP_ID);
CREATE INDEX idx_itorganization_parentid ON IT_ORGANIZATION (F_PARENT_SAP_ID ASC);
CREATE INDEX idx_pk_itorganization ON IT_ORGANIZATION (F_ID ASC);
данные добавляются методом на java

C++:
private void createOrg(Connection connection, String legal, int location, boolean main) throws Exception {
String SQL = "INSERT INTO IT_ORGANIZATION " +
"(F_SAP_ID, F_NAME, F_SHORT_NAME, F_LEGAL_CODE, F_PARENT_SAP_ID, F_ACTION_TYPE, F_LEGAL, " +
"F_XML_SOURCE, F_SAP_MODIFIED, F_SYNC_FLAG) " +
"VALUES (?, ?, ?, ?, ?, 'NEW', 0, 0, CURDATE(), 0)";
PreparedStatement statement = null;
try {
long id = main ? createMainId(legal) : createId(legal, location);
long parentId = main ? 0 : createMainId(legal);
String name = main ? legal : legal + convertLocation(location);
statement = connection.prepareStatement(SQL);
statement.setLong(1, id);
statement.setString(2, name);
statement.setString(3, name);
statement.setString(4, legal);
statement.setLong(5, parentId);
int res = statement.executeUpdate();
System.out.println("create org id:" + id + " name:" + name + " legal:" + legal +" parentId:" + parentId + " " +
"result:" + res);
} finally {
if (statement != null) {
try {
statement.close();
} catch (Exception e) {
}
}
}
}

суть в том, что int res = statement.executeUpdate(); возвращает 1, что говорит количестве обновленных записей, однако новых записей не появляется..

тем не менее некоторая часть записей была создана данным методом, в чем тут может быть дело ?

в catch ничего не попадает, проверено..
я вижу только принты типа:
create org id:240559042 name:O0559042 legal:O055 parentId:24055 result:1
create org id:113002054 name:B3002054 legal:B300 parentId:11300 result:1
create org id:113002022 name:B3002022 legal:B300 parentId:11300 result:1

но записей с такими id нет ?!

изначально java код с многопоточной реализацией, однако в однопоточном режиме тоже самое..
что-то похожее видел на багтрекинге mysql, однако пишут что пификсили проблему..
 
K

Kee_Keekkenen

Откуда знаете что нет?

нет, потому что их нет в базе..
в общем разобрался.. код не я писал, да и не знаком я с работой с sql..
проблема была, в том что соммиты не отрабатывали, т.к. явно не вызывались, т.к. коннекшенов создавалось много для разных манипуляций, а включение автокоммитов было пропущено..
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!