Для Mysql я могу просто на основании значения полей генерировать запрос для вставки или обновления(в случае если такова есть) записей таблиц с помощью ON DUPLICATE KEY UPDATE
в Java получаеть что-то такое
Код | public void executeInsertMySQLSql(String table, String field, String updateField, List<String> vistaResult) throws SQLException { Statement stmt = conn.createStatement(); for (String string : vistaResult) { String sqlExpression = "INSERT INTO " + table + "(" + field + ") VALUES" + string; if ((updateField != null) && (updateField.length() > 0)) { sqlExpression = sqlExpression + " ON DUPLICATE KEY UPDATE "; for (String fd : updateField.split(",")) { sqlExpression = sqlExpression + fd + "=VALUES(" + fd + "),"; } sqlExpression = sqlExpression.substring(0, sqlExpression.length() - 1);//delete last symbol } stmt.execute(sqlExpression); } }
|
Для MSQL в MYSQL:2008 есть что-то подобное MERGE, также можна использовать IF
Код | if exists (Select ien from cpt where ien = '10022') update cpt set cpt_code='10023' else insert into cpt(ien,cpt_code) values ('10022','10023')
|
Но каждая таблица может содержать ключ с несколькими полями, и вот тепер я даже не знаю как же сделать лучше??? Придётся передавать в метод также и keyNames и keyValues. Но это геморрр... |