Near database syntax error

Эта ошибка SQL обычно означает, что где-то в запросе присутствует недопустимый синтаксис.
Некоторые распространенные примеры:

  • Использование специфичного для базы данных SQL для неправильной базы данных (например, BigQuery поддерживает DATE_ADD, а Redshift поддерживает DATEADD)
  • Опечатка в SQL (отсутствует запятая, слово с ошибкой и т.д.)
  • Отсутствует предложение sql (пропущено из, присоединиться, выбрать и т. д.)
  • Объект не существует в базе данных или недоступен из текущего запроса (например, ссылка на orders.id, когда в текущем запросе нет присоединенной таблицы заказов и т. д.)

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

Сообщение об ошибке

SQL ERROR: syntax error at or near

Исправление проблем

Как правило, это должен быть первый шаг к устранению любой синтаксической ошибки SQL в большом запросе: итеративно комментируйте блоки SQL, чтобы сузить область проблемы.

СОВЕТ: Чтобы упростить этот процесс, измените предложение group by, чтобы использовать ссылки на позиции,
например:  group by 1,2,3,4,5 instead of group by orders.status, orders.date, to_char(...)...
а также разделите предложения where и have на несколько строк.

Так, например, скажем, у нас есть следующий запрос:

play_arrow

WITH cte AS (
select id, status, sales_amountfrom orders
)
select status, foo.date, sum(cte.sales_amount), count(*) from cte
join foo on cte.date = foo.date
group by status, foo.date
order by 3 desc

Мы могли бы начать с запуска только части CTE:

play_arrow

-- WITH cte AS (
select id, status, sales_amountfrom orders
-- )
-- select status, foo.date, sum(cte.sales_amount), count(*)
-- from cte
-- join foo on cte.date = foo.date
-- group by 1, 2
-- order by 3 desc

Затем удалите агрегаты и части, связанные с ними.

play_arrow

WITH cte AS (
    select id, status, sales_amountfrom orders
)
select status, foo.date, -- sum(cte.sales_amount), count(*)
from cte
join foo on cte.date = foo.date
-- group by 1, 2
-- order by 3 desc

Итеративное удаление/добавление частей запроса до тех пор, пока не будет найден минимальный запрос, вызывающий ошибку.

    • Функции поиска и синтаксис  . Если запрос достаточно мал или мы достаточно сузили область до 1, поищите в Google все функции, используемые в запросе, и убедитесь, что они существуют и используются правильно.

    •  

      Убедитесь, что все объекты существуют  . Убедитесь, что вы присоединили все таблицы, используемые в предложении select, where и have, и что эти таблицы существуют в базе данных. После того, как мы сузили список с 1, также проверьте, существует ли каждый столбец в указанной таблице.

Ошибка SQL error or missing database (near «<=»: syntax error) в java

 

Помогите кто-нибудь понять из-за чего такая ошибка org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near «<=»: syntax error)
вот участок кода в котором происходит такая проблема
JavaВыделить код
1
2
3
4
Statement statement=this.connection.createStatement();
                resultSet=statement.executeQuery("SELECT *" +
                        "FROM Rabbits" +
                        "WHERE ID < 0;");

СУБД установлена mySQL 3.30.1

Если кто-то сейчас читает эта и у него такая же проблема, просто проверьте внимательно все строчки кода
вот решение

JavaВыделить код
1
2
3
4
Statement statement=this.connection.createStatement();
                resultSet=statement.executeQuery("SELECT *" +
                        "FROM Rabbits " +
                        "WHERE ID>0;");

Пробел был пропущен после Rabbits

Алекс Бежбакин
Оцените автора
Добавить комментарий