Что вызывает ошибку «Пользователю не хватает привилегии или объект не найден: FieldName» - PullRequest
0 голосов
/ 25 июня 2019

Используя базу данных MS Access для хранения моей информации, она работала нормально, и до этого момента я создал новый метод с именем CreateLicense () , который принимает созданный мной класс лицензии и записывает его вбаза данных.

Когда код будет запущен, он выдаст ошибку, сообщающую, что 'пользователю не хватает привилегии или объект не найден: EXPIRED'

Уже попытался изменить имена полейИстек срок действия, если это было зарезервированное слово или что-то.Также пытался удалить поле Expired, но затем помечает ту же ошибку, но с CONTACT .


INSERT INTO Licenses (Name, DateRedeemed, Expired, LicenseLength, Contact) VALUES ('name','25/Jun/2019','02/Jul/2019','2','contact')
user lacks privilege or object not found: EXPIRED

Вот вывод моего оператора SQL Это код

public boolean CreateLicense(License newLicense) {
        try {
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            File currentDir = new File(""); // Creates a new file
            String newFilePath = "jdbc:ucanaccess://" + currentDir.getAbsolutePath().toString() + "\\store\\data\\database1.accdb";
            Connection conn = DriverManager.getConnection(newFilePath);
            Statement stmt = conn.createStatement();
            stmt.executeUpdate("INSERT INTO Licenses (Name, DateRedeemed, Expired, LicenseLength, Contact) VALUES "
                    //Values for the SQL Statement
                    + "('" + newLicense.getName()//Start Line
                    + "','" + newLicense.getRedeemed()//Middle Lines
                    + "','" + newLicense.getExpired()//Middle Lines
                    + "','" + newLicense.getLicenseLength()//Middle Lines
                    + "','" + newLicense.getContact()+ "')");//End Line

            conn.close();
            return true;
        } catch (Exception ex) {
            String message = ex.getMessage();
            System.out.println(message);
            return false;
        }
    }

Некоторая дополнительная информация, помогающая решить. Имя таблицы: Лицензии Имена полей и их тип

  • ID - Autonumber
  • Имя - String
  • Дата погашена - String
  • Истек срок действия - String
  • LicenseLength- int
  • Контакт- String

ОБНОВЛЕНИЕ Я создал запрос, используя дизайн запроса в доступе, он предоставил информацию в базу данных штрафа, поэтому это не может быть SQL, который является проблемой.

ОБНОВЛЕНИЕ Когда я переименовываю таблицу в базе данных и запускаю приложение, я получаю ту же ошибку, но с именем таблицы вместо этого, я собираюсь создать новую базу данных и посмотреть, решает ли это что-нибудь

Решение найдено

Ответы [ 2 ]

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

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

Поэтому, когда я запускаю приложение, которое фактически не может найти таблицу из-за пути к файлу, я выяснил это, протестировав другие мои методы, я использовал мой createUser () метод, который показал, какая база данных это было написано.

Для других пользователей

Если вы получили эту ошибку, попробуйте следующее

  • Примените решение Joakim, если вы используете одну большую строку SQL, как я, так как это может быть проблемой с вашим оператором SQL. (И это лучшая практика программирования)

  • Посмотрите на имя таблицы и поля и убедитесь, что они точно такие же, как ваш SQL

  • Запустите ваше приложение и протестируйте другой метод, где оно ранее работало, в случае успеха проверьте, где приложение записало значение

  • Если ничего не помогает, удалите метод, введите его с нуля без копирования и вставки, создайте новую базу данных, поскольку у меня была эта проблема раньше, когда я использовал отношения между таблицами в моей базе данных доступа

Я надеюсь, что это решение поможет другим решить эту проблему.

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

LicenseLength - это Int, но вы заключаете его в кавычки, как будто это строка. Кроме того, вы пытались использовать параметризованный запрос, например

String sql = "INSERT INTO Licenses (Name, DateRedeemed, Expired, LicenseLength, Contact) VALUES (?, ? ,?, ?, ?)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, newLicense.getName());
stmt.setString(2, newLicense.getRedeemed());
stmt.setString(3, newLicense.getExpired());
stmt.setInt(4, newLicense.getLicenseLength());
stmt.setString(5, newLicense.getContact());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...