2016-08-29 4 views
0

Я создаю проект java. Я хочу проверить, существует ли первичный ключ в моей таблице. Например, у меня есть следующий код:Проверка повторяющихся первичных ключей

private void AddProductActionPerformed(java.awt.event.ActionEvent evt) 
{           
    String query="INSERT INTO Products(Pro_Id ,Pro_Name,Pro_Price,Pro_Quantity,Pro_Supplier_id)VALUES ('"+Pro_Id.getText()+" ','"+Pro_Name.getText()+" ','"+Pro_Price.getText()+" ','"+Pro_Quantity.getText()+" ','"+Pro_Supplier_id.getText()+" ') "; 
    executeSQLQuery(query,"Inserted"); 
} 

Как я могу получить сообщение, которое говорит мне, чтобы изменить запись первичного ключа, если он уже существует?

+1

Возможный дубликат [MySQL: вставить запись, если она не существует в таблице] (http://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table) – DimaSan

+0

сделать счет перед вставкой – Mox

+0

Поймать исключение и разобраться с ним. Это намного эффективнее, чем выполнение 'count()' перед вставкой, особенно если вы ожидаете очень мало ошибок. –

ответ

1

Вы можете поместить свой код внутри try catch block. Внутри задвижка проверки блока для SQLException

public static final int MYSQL_DUPLICATE_PK = 1062; // Replace 1062 with exception no. you are getting in case it is different for different database 

try{ 
    String query="INSERT INTO Products(Pro_Id ,Pro_Name,Pro_Price,Pro_Quantity,Pro_Supplier_id)VALUES ('"+Pro_Id.getText()+" ','"+Pro_Name.getText()+" ','"+Pro_Price.getText()+" ','"+Pro_Quantity.getText()+" ','"+Pro_Supplier_id.getText()+" ') "; 
    executeSQLQuery(query,"Inserted"); 
} catch(SQLException e){ 
if(e.getErrorCode() == MYSQL_DUPLICATE_PK){ 
    System.out.println("Primary key already used"); 
} 
} 
+0

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

+0

use stmt.executeUpdate (query); – aru007

0

Как я могу получить сообщение, которое говорит мне изменить запись основного ключа , если он уже существует?

Убедитесь, что вы отметили Pro_Id, как PRIMARY KEY при определении структуры таблицы, которая будет убедиться, что это поведение, и если вы попытаетесь вставить повторяющееся значение он будет бросать ошибку.

+0

В структуре таблицы задается первичный ключ. Но когда я добавляю новую строку в свою jtable, я хочу вывести сообщение , если оно уже существует .. любая идея? ты! –

+0

@GeorgeKontonikolaou, я не знаю Java, но это было бы легко ... использовать try .. catch block ... в catch block показать окно с сообщением – Rahul

0

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

SELECT 1 FROM Products WHERE Pro_Id = :yourDesiredPk; 

Когда результат запроса не будет пустым, это будет означать, что он уже существует.

Лучшая идея - рассмотреть возможность использования последовательности и использования следующего значения aka auto increment, проверить его на google (What is a sequence (Database)? When would we need it?). Таким образом, вы можете избежать дублирования проблем ПК. Но, возможно, ваш ПК не является номером и имеет за собой некоторую бизнес-логику, в этом случае последовательность не является вариантом.

0

Перед записью вставки сделайте одну вещь, счетчик (*), а если count - 0, а затем вставьте то же самое, что и всплывающее окно для повторного запроса.

Смежные вопросы