Интерполяция SQL запроса в java

Возможно ли сделать интерполяцию строки в запросе?

public ClassRoom(long id, String name) throws SQLException {
    super(id);
    this.name = name;
    super.executeSqlStatement("INSERT INTO class_rooms (id,name) VALUES " + "(" + id + "," + name + ")",
            "Запись добавлена ");
}

Например, при инициализации экземпляра срабатывает функция добавления записи в таблицу, таблицы создаются, все окей, а при добавлении данной записи вылетает исключение о неверном синтаксисе.


Ответы (1 шт):

Автор решения: Alexandr

Строковые значения необходимо обрамлять одинарными ковычками:

public ClassRoom(long id, String name) throws SQLException {
    super(id);
    this.name = name;
    super.executeSqlStatement("INSERT INTO class_rooms (id,name) VALUES " + "(" + id + ",'" + name + "')",
            "Запись добавлена ");
}

Рекомендую использовать параметризованные запросы. Вот небольшой пример:

package com.somepackage;

import java.sql.*;

public class Main {

    public static void main(String[] args) throws SQLException {
        try (var connection = getConnection()) {
            createTable(connection);
            insert(connection, 1, "first");
            insert(connection, 2, "second");
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(
                "jdbc:hsqldb:mem:test", "SA", "");
    }

    public static void createTable(
            Connection connection) throws SQLException {
        try (Statement stmt =
                     connection.createStatement()) {
            stmt.execute("CREATE TABLE class_rooms (id BIGINT, name VARCHAR(30))");
        }
    }

    public static boolean insert(
            Connection connection,
            long id,
            String name) throws SQLException {
        try (PreparedStatement pstmt =
                     connection.prepareStatement(
                             "INSERT INTO class_rooms VALUES (?, ?)")) {
            pstmt.setLong(1, id);
            pstmt.setString(2, name);

            return (pstmt.executeUpdate() == 1);
        }
    }

}
→ Ссылка