CREATE LINKED TABLE не работает с PreparedStatement - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь запустить следующее PreparedStatement:

final PreparedStatement ps = conn.prepareStatement("CREATE LINKED TABLE IF NOT EXISTS " + linkedName + "(?, ?, ?, ?, 'ROADS', ?)");

Но когда отладчик запускает предыдущую строку, я получаю сообщение об ошибке:

Синтаксическая ошибка в операторе SQL"CREATE LINKED TABLE ЕСЛИ НЕ СУЩЕСТВУЕТ ROAD_TABLE_LINKED (?, [*]?,?,?, 'ROADS',?)";ожидаемая «строка»;Оператор SQL: CREATE LINKED TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ ROAD_TABLE_LINKED (?,?,?,?, 'ROADS',?) [42001-199]

Не возможно использовать PreparedStatement с CREATE LINKED TABLE?

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

1 Ответ

2 голосов
/ 31 октября 2019

К сожалению, вы не можете использовать параметры (?) в командах DDL в H2. Вам необходимо заменить их строковыми литералами.

Statement s = connection.createStatement();
s.execute("CREATE LINKED TABLE IF NOT EXISTS \""
        + linkedName.replaceAll("\"", "\"\"")
        + "\"('', '"
        + url.replaceAll("'", "''")
        + "', '"
        + user.replaceAll("'", "''")
        + "', '"
        + password.replaceAll("'", "''")
        + "', '"
        + schema.replaceAll("'", "''")
        + "', '"
        + table.replaceAll("'", "''")
        + "')");

...