Интерполяция 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);
}
}
}