#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).