Синтаксическая ошибка в подготовленном операторе, который выполняется в SQL - PullRequest
1 голос
/ 03 июня 2019

Я получаю синтаксическую ошибку в подготовленном операторе, даже если мой запрос выполняется в SQL Management Studio.Я использую GlassFish 4.1.1.Что я делаю не так?

Я пытался немного изменить синтаксис, но всегда получаю сообщение об ошибке.

Вот мой код пула соединений:

try {
    InitialContext ic = new InitialContext();
    dataSource = (DataSource) ic.lookup("java:comp/env/" + database);
} catch (Exception ex) {
    ex.printStackTrace();
}

Вот мой код запроса:

ConnectionPool pool = new ConnectionPool("BoxPointHAMBURGO");
Connection connection = pool.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;

try {
    String query = "SELECT Tabla FROM BoxPointHAMBURGO.dbo.NombresTablas";

    ps = connection.prepareStatement(query);
    rs = ps.executeQuery();
} catch (Exception ex) {
    System.err.println("Error: " + ex.getMessage());
}

Я получаю ошибку:

Syntax error: Encountered "." at line 1 column 39.

1 Ответ

1 голос
/ 03 июня 2019

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

Вероятно, вам следует выбрать базу данных BoxPointHAMBURGO при установке соединения JDBC. Вам придется изменить URL JDBC в соответствии с Построение URL-адреса соединения , синтаксис:

jdbc:sqlserver://localhost;databaseName=BoxPointHAMBURGO

и затем удалите имя базы данных из запроса SQL:

SELECT Tabla FROM dbo.NombresTablas

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

...