ソリューション1
2つの挿入操作用に2つの異なるStatementインスタンスを作成します。
ソリューション2
1つのStatementインスタンスを再利用する場合は、最後にでリソースを閉じます。 ブロック。実際、最後ににクローズステートメントを入れることは常に良い考えです ブロックするか、単に try-catch-resourceを使用します そのjdk7+が提供する必要があります。
具体的な質問とは関係ありません
- jspファイルでJavaコードを使用しないことを強くお勧めします。 「jspサーブレットmvc」という用語を検索します。
- SQLインジェクション攻撃を回避するには、Statementの代わりにPreparedStatementを使用します。
ソリューション1の編集:
最初のtryブロック:
Statement myStatement = myConnection.createStatement();
の下
add Statement myStatementTwo = myConnection.createStatement();
2番目のtryブロック:
change myStatement.executeUpdate(sqlString);
to myStatementTwo.executeUpdate(sqlString);
最初のtryブロックの最後のブロックを追加し、そこですべてのリソースを閉じます。コードを編集することは、すべてを最初から書き直すこととほとんど同じです。自分でそれを行うことができれば、最もメリットがあります。
OPがHTMLコードとデータベースを提供した後に編集
あなたのDest_has_Categories テーブルのDest_idDest auto_incrementです 列ですが、宛先を参照する外部キーでもあります の主キーidDest 。参照テーブル(ジョイントテーブル)の外部キーはすべきではありません auto_incrementになります。 DBMSによって生成された自動インクリメント値が参照テーブルに存在しない場合、問題が発生します。
外部キーをauto_incrementではなく、参照テーブルに挿入するときに Dest_has_Categoriesにしてください。 、既存のカテゴリを挿入してください のIDと宛先 のID。
また、コードを変更するときは、ベストプラクティスとしてSolution2も使用してください。