2015-05-31 2 views
-1

У меня проблемы с моей программой Java. Я использую MS Access как базу данных и UCanAccess для подключения к базе данных.UCanAccessSQLException: ограничение ограничений

Когда я пытаюсь вставить текст в базу данных, я получаю исключение:

net.ucanaccess.jdbc.UcanaccessSQLException: integrity constraint violation: unique constraint or index violation; ENTRIES_PRIMARYKEY table: ENTRIES 

Это SQL заявление, что приводит к исключению:

"INSERT INTO Entries (Text, Title, Date, Time) VALUES" 
       + "(\"" + text + "\", \"" + title + "\", \"" + date + "\", \"" + time + "\");"; 

Первичного ключи таблицы Записи - это (Название, Дата). Информация, которую я вставляю, не существует в таблице.

Я создал файл System.out.println(), содержащий ту же строку, чтобы убедиться, что переменные содержат правильную информацию, и они это делают.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+0

Я не могу воссоздать вашу проблему, как указано. Запустите 'console.bat' или' console.sh' (в зависимости от ситуации) из папки, содержащей файл JAR UCanAccess. При появлении запроса введите полный путь к базе данных Access. Проверьте раздел «Загруженные индексы:» на выходе и убедитесь, что вы видите «Первичный ключ в столбцах ENTRIES: (TITLE, DATE)». –

+0

Он просто говорит: «Данный файл не существует». Я не понимаю, я даже скопировал/вставил каталог и убедился, что имя файла верное. Я даже смотрю на файл - он прямо там! –

+0

Вы включаете расширение файла .accdb или .mdb, в зависимости от ситуации? Если вы работаете на машине, отличной от Windows, вы уверены, что полный путь, имя файла и расширение соответствуют точно (с учетом регистра)? –

ответ

1

(от комментариев на вопрос :)

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

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

Text  Title Date  Time 
---------- ------ ---------- -------- 
some text Title1 2015-06-01 05:56:15 

, но если вы попытаетесь вставить другую строку, как этот

Text  Title Date  Time 
---------- ------ ---------- -------- 
other text Title1 2015-06-01 06:15:44 

вставка потерпит неудачу, потому что сочетание Title и Date уже существует в таблице. Да, эта строка «не существует», потому что значения Text и Time отличаются друг от друга, но ограничение первичного ключа не имеет значения; он смотрит только на столбцы Title и Date.

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

+0

Я использовал другое название, поэтому не должно быть никаких ограничений.это моя проблема, и я все еще застрял:/ –

+1

@ Jákup Затем вам нужно предоставить нам [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), чтобы четко продемонстрировать вопрос. Не обижайтесь, но я убежден, что ваш код просто не делает то, что вы думаете, что он делает. –

+0

Думаю, я выяснил проблему. Однако я не знаю решения. Добавление новой записи сегодня, я вижу, что она работает. Но добавление одного снова добавляет к той же ошибке. Похоже, что первичный ключ на самом деле ТОЛЬКО дата. Я сделал снимок экрана моей проекции моей базы данных здесь: http://oi58.tinypic.com/xekjte.jpg В моих предыдущих примерах я перевел имена атрибутов, но это тот же порядок (текст, название, дата, время). На картинке вы можете видеть, что есть 2 клавиши, и когда я курю над ними, он говорит: «Это поле является частью основного ключа таблицы». –