2016-08-29 23 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ブロック内にコードを挿入できます。あなたのコードを試してみて、キーがすでに存在する場合 の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

私はこのソリューションを使用しますが、対応するtry文の本体でSQLExceptionがスローされることはないと私に伝えます... –

+0

stmt.executeUpdate(query);を使用します。 – aru007

0

キーのエントリが既に存在する場合は、そのエントリを変更するように通知するにはどうすればよいですか?

この動作を確認しますと、あなたが重複する値を挿入しようとする場合、それはエラーがスローされますされ、あなたのテーブル構造を定義しているときにPRIMARY KEYとしてPro_Idをマークしていることを確認してください。

+0

テーブル構造が主キーとして設定されています。しかし、私は私のjtableに新しい行を追加するときに私はメッセージが<このpro_id alredy存在する>をポップアップしたい場合は既に存在する..任意のアイデア?タイ! –

+0

@GeorgeKontonikolaou、私はJavaは分かりませんが簡単です...試してみてくださいcatchブロック... catchブロックでメッセージボックスを表示してください – Rahul

0

ためのcatchブロックチェック内には、エラーになるだろう。通常のフロー中にプログラムが動作するこのエラーに応じて、例外は常にパフォーマンスの面で高価なので、良い考えではありません。挿入する前に主キーがすでに存在するかどうかを確認する必要があります。これはSELECTクエリを実行することで実行できます。

SELECT 1 FROM Products WHERE Pro_Id = :yourDesiredPk; 

クエリの結果が空でない場合は、すでに存在することを意味します。

より良いアイデアは、シーケンスを使用して、次の値である自動インクリメントを使用し、google(What is a sequence (Database)? When would we need it?)でチェックすることです。そうすれば、重複するPKの問題を避けることができます。しかし、あなたのPKは数字ではなく、その背後にビジネスロジックがあります。その場合、シーケンスはオプションではありません。

0

挿入レコードの前に1つカウントすると(*)、カウントが0の場合はそれを挿入し、それ以外の場合は挿入して、重複するクエリのポップアップを表示します。

関連する問題