Проблема С Insert

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
Москва
#1
о базе 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, однако пишут что пификсили проблему..
 

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
Москва
#3
нет, потому что их нет в базе..
в общем разобрался.. код не я писал, да и не знаком я с работой с sql..
проблема была, в том что соммиты не отрабатывали, т.к. явно не вызывались, т.к. коннекшенов создавалось много для разных манипуляций, а включение автокоммитов было пропущено..