Есть ли способ вставить данные в таблицу с двумя разными внешними ключами из двух разных таблиц? - PullRequest
0 голосов
/ 24 марта 2019

У меня проблема при вставке данных из JSP в базу данных.У меня есть 3 таблицы:

Книги (bookid), Users (id), Review (b_id, u_id), внешний ключ b_id, u_id ссылки на 2 таблицы выше.Вот мой код:

Java

public void insert(ReviewModel model) {
    try {
        String b_id = null;
        String u_id = null;
        String sql = "insert into review (content,datePost,rating,b_id,u_id)\n"
                + "values (?,?,?,(select BookID from Books where BookID = '" + b_id + "'),(select id from Users where id  = '" + u_id + "') )";
        PreparedStatement statement = connection.prepareCall(sql);
        statement.setString(1, model.getContent());
        statement.setDate(2, (Date) (model.getDatePost()));
        statement.setFloat(3, model.getRating());
        statement.setInt(4, model.getBookid());
        statement.setInt(5, model.getUserid());
        statement.executeUpdate();
    } catch (SQLException ex) {
        Logger.getLogger(ReviewDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
}

1 Ответ

1 голос
/ 24 марта 2019

Проблема заключается здесь:

"...where BookID = '" + b_id + "')..."

statement.setInt(4, model.getBookid());
statement.setInt(5, model.getUserid());

Количество установленных параметров и вопросительные знаки должны совпадать.Вы пытаетесь связать его как именованный параметр, однако в вашем sql вы просто присоединяете к нему пустую строку.Так что или удалите строки установки параметров выше и заполните строковые переменные, такие как

String b_id=mode.getBookId()

или используйте заполнитель '?': ... where BookID = ? ...

(используйте последний, первый уязвим для инъекций sql)

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