Вставить данные в родительскую таблицу после конфликта INSERT FK_constraint SQLException Ошибка 547 - PullRequest
0 голосов
/ 27 декабря 2018

Я создал приложение на Java, где я могу просматривать и изменять свои таблицы MS SQL.

public static void insertParts(String tableName, Vector<String> colNames, Vector<Object> data) throws SQLException {
    StringBuilder query = new StringBuilder("INSERT INTO " + tableName + " (");
    for (int j = 0; j < colNames.size(); j++) {
        query.append(colNames.get(j));
        if (j != (colNames.size() - 1)) {
            query.append(", ");
        } else {
            query.append(") VALUES(");
        }
    }
    for (int i = 0; i < colNames.size(); i++) {
        query.append("?");
        if (i != (colNames.size() - 1)) {
            query.append(", ");
        } else {
            query.append(")");
        }
    }
    stmt = ccd_db_connection.getConnection().prepareStatement(query.toString());
    for (int j = 0; j < colNames.size(); j++) {
        stmt.setObject(j + 1, data.get(j));
    }
    stmt.execute();
    stmt.close();
}

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

Если родительской записи не существует, я получаю следующее исключение, как и ожидалось:

SQL STATE: 23000 КОД ОШИБКИ: 547 MESSAGE: оператор INSERT конфликтует с ограничением COLUMN FOREIGN KEY 'FK_Something',Конфликт произошел в базе данных 'dbY', таблице 'TableX', столбце 'ColumnZ'.

Мне нужен способ, чтобы, когда это происходит (я думаю, в части try catch), пользователь должен получитьзапросили, хочет ли он добавить родительские данные, перенеся его прямо в родительскую таблицу или отменив всю вставку.

Поскольку вставка динамическая, есть ли способ получить ссылку на родительскую таблицу?

Пока мне кажется, что только Строковое Сообщение дает мне эту информацию, но, думаю, это немного импровизированное, а не стабильное решение.

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

...