Как получитьGenerated id из родительской таблицы и вставить в дочернюю таблицу - PullRequest
0 голосов
/ 28 мая 2018
 try {

    currentCon = ConnectionManager.getConnection();

        psParent=currentCon.prepareStatement("insert into accommodation (type,name,price,description,username)values(?,?,?,?,?)", PreparedStatement.RETURN_GENERATED_KEYS);
        psParent.setString(1,type);
        psParent.setString(2,name);
        psParent.setFloat(3,price);
        psParent.setString(4,username);
        psParent.executeUpdate();

        accid= 0;
            rs = psParent.getGeneratedKeys();
            if (rs.next())
                accid = rs.getInt(1);

            rs.close();
            psParent.close();

        psChild=currentCon.prepareStatement("insert into room (accid, bed)values(?,?)");
        psChild.setInt(1,accid);
        psParent.setString(2,bed);
        psChild.executeUpdate();    }

после того, как я запустил это, я получил это сообщение об ошибке: fail: Возникла исключительная ситуация!java.sql.SQLRecoverableException: внутренняя ошибка

Что-то не так с кодом?Спасибо за вашу помощь

1 Ответ

0 голосов
/ 28 мая 2018

Ваше использование getGenereatedKeys() на самом деле мне кажется правильным для Oracle, но проблема на самом деле с вашим первым оператором вставки.У вас есть заполнители (и имена столбцов) для 5 столбцов, но вы связываете только 4 значения.Попробуйте что-то вроде этого:

String sql = "insert into accommodation (type, name, price, description, username) ";
sql += "VALUES (?, ?, ?, ?, ?)";
String generatedColumns[] = { "ID" };
psParent = currentCon.prepareStatement(sql, generatedColumns);
psParent.setString(1, type);
psParent.setString(2, name);
psParent.setFloat(3, price);
psParent.setString(4, description);   // I ADDED THIS LINE
psParent.setString(5, username);
psParent.executeUpdate();

Я предполагаю, что у вас есть переменная, содержащая описание для вставки.Если нет, то полностью удалите description и его заполнитель из подготовленного оператора или просто вставьте ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...