UcanaccessSQLException: неожиданный токен: ЗАКАЗ

Я делаю небольшое приложение на Java и MySQL с помощью PHPMyAdmin, и все работает нормально, но мой профессор говорит, что мы должны работать с базой данных в Access, поэтому я просто изменил подключение к классу и импортировал свою базу данных. Операторы INSERT, SELECT и другие операторы UPDATE работают нормально, но этот оператор просто не работает.

UPDATE table SET col1=?, col2=? WHERE col0=? ORDER BY col4 DESC LIMIT 1

Я не могу понять, как в MySQL это работает нормально, но с UCanAccess это не работает.


person Frozt360    schedule 08.05.2015    source источник
comment
Вот я не понимаю, что ты пытаешься сделать. Вы пытаетесь ОБНОВИТЬ или ВЫБРАТЬ строки?   -  person Eranda    schedule 08.05.2015
comment
не могли бы вы поделиться хотя бы небольшим фрагментом кода?   -  person Yurets    schedule 08.05.2015
comment
это предложение в основном обновляет одну запись, но эта запись должна быть последней записью этой записи, это одно приложение для регистрации входов и выходов сотрудников одного офиса, приложение создает запись, когда сотрудник входит и обновляет, когда он уходит   -  person Frozt360    schedule 08.05.2015
comment
Пожалуйста, обратитесь к ответу stackoverflow.com/questions/9080403/, что дает вам представление о том, что вы хотите сделать.   -  person Eranda    schedule 08.05.2015
comment
да, этот код дает мне одну идею, но этот код для 2 таблиц, а мой код для одной таблицы. Я буду очень признателен, если вы можете привести мне один пример....   -  person Frozt360    schedule 08.05.2015


Ответы (1)


Я не могу понять, как в MySQL это работает нормально, но с UCanAccess это не работает.

Это связано с тем, что различные производители программного обеспечения для баз данных взяли на себя задачу реализовать язык SQL немного по-разному, поэтому не гарантируется, что конкретный оператор SQL, написанный для MySQL, будет работать в Access, Microsoft SQL Server, Oracle или любой другой среде. "диалект" SQL.

UCanAccess очень старается следовать синтаксису Access SQL. Access SQL использует TOP n вместо LIMIT n, но Access SQL также не допускает TOP n или ORDER BY в основной части запроса UPDATE. Поэтому вам нужно использовать подзапрос, чтобы определить значение первичного ключа строки, которую вы хотите обновить.

Например, если в вашей таблице есть столбец первичного ключа с именем «id», вы можете сделать

sql = 
        "UPDATE table1 SET col1=?, col2=? " +
        "WHERE id IN ( " +
            "SELECT TOP 1 id " +
            "FROM table1 " +
            "WHERE col0=? " +
            "ORDER BY col4 DESC, id " +
        ")";
person Gord Thompson    schedule 10.05.2015