INSERT冲突FK_constraint SQLException错误547后在父表中插入数据

时间:2018-12-27 10:21:19

标签: java sql-server sqlexception

我用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状态:23000错误代码:547 MESSAGE:INSERT语句冲突   与COLUMN FOREIGN KEY约束'FK_Something'。冲突   发生在数据库“ dbY”,表“ TableX”,列“ ColumnZ”中。

我想要一种方法,以便在发生这种情况时(我想在try catch部分),如果用户想添加父数据,直接将其带到父表或取消整个插入操作,应该得到提示。

由于插入是动态的,有什么方法可以获取父表的引用?

到目前为止,只有“字符串消息”似乎可以向我提供该信息,但我想它有点临时性,但却是一个稳定的解决方案。

任何建议都会很有帮助,因为我被困在这一点上。

0 个答案:

没有答案