Вставка записей в JDBC без использования инструкции insert

#mysql #jdbc #sql-insert

#mysql #jdbc #sql-вставка

Вопрос:

Я особенно новичок в концепции доступа к базам данных на Java с использованием JDBC. Я использую MySQL в качестве своей СУБД, и я просто хотел узнать, есть ли способ вставлять записи в мою базу данных без использования инструкции «insert» MySQL?

Комментарии:

1. Почему? Пожалуйста, объясните, почему вы не хотите использовать INSERT . Это просто академическое любопытство, или вам что-то не нравится INSERT ?

2. @Mark Rotteveel Первый, то есть Академическое любопытство

Ответ №1:

Глядя исключительно на JDBC, можно добавлять новые строки в базу данных, не используя INSERT себя. Однако нет никакой гарантии, что фактический драйвер JDBC не использует INSERT инструкцию.

 try (
    Connection con = DriverManager.getConnection(....);
    Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
        ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = stmt.executeQuery("SELECT col1, col2, col3 FROM someTable");
) {
    rs.moveToInsertRow();
    rs.updateString(1, "new value col1");
    rs.updateString(2, "new value col2");
    rs.updateString(3, "new value col3");
    rs.insertRow();
}
  

Это приведет к вставке строки в результирующий набор, но фактическая реализация может просто сгенерировать INSERT инструкцию для достижения этой цели. Также этот способ не очень эффективен (особенно, если в таблице большое количество строк), и он может завершиться неудачей, если мы не выбрали (или не обновили) столбцы, которые имеют ограничения (например, a NOT NULL или CHECK ограничение).

Существует также ряд фреймворков, построенных поверх JDBC, которые позволяют вам создавать и обрабатывать данные без необходимости самостоятельно писать запросы, однако в конечном итоге есть вероятность, что он будет генерировать INSERT запросы.

Итак: с вашей точки зрения, да, безусловно, можно вставлять данные в базу данных, но, в конце концов, инструмент, который вы используете для этого, вероятно, будет использовать INSERT инструкции в той или иной форме.

Комментарии:

1. Можно ли каким-либо образом использовать CallableStatement для выполнения требуемого действия?

2. @VishalChugh На самом деле нет, это для выполнения хранимых процедур. Итак, если у вас есть хранимая процедура, которая выполняет вставки для вас, тогда да, но это все равно является формой «обмана» (поскольку сама хранимая процедура будет содержать инструкции insert).