- - PR -
SQLのUNIQUEについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-10-02 06:38
MySQLでテーブルを作る際UNIQUEをつかいました。
javaでそのテーブルにデータを入れる際指定したカラムが重複した場合UNIQUEが作動してエラーを起こしてくれるのはわかるのですがどのExceptionでcatchすればいいのかわかりません。 エラーページを起動させるのにExceptionを使いたいので知りたいのですがどなたか教えてもらえませんか? | ||||
|
投稿日時: 2008-10-02 08:38
一般的にSQLExceptionだと思いますが、試してみたら違うということですか?
| ||||
|
投稿日時: 2008-10-02 09:03
私もそう思ったのですができなくて^^;
エラーではしっかり重複してるとでてるのですが。。。 例外が発生しました。 com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1-2008-10-02-0' for key 1 ソースは public static void time(int id ,int bool,String day,String time){ Connection con = null; PreparedStatement ps = null; try { // MySQL JDBCドライバ-のロード Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの接続 con = DriverManager.getConnection("jdbc:mysql:///kintai?useUnicode=true&characterEncoding=SJIS"); // ステートメントオブジェクトを生成 ps = con.prepareStatement("INSERT INTO TIME_RECORD(ID,DAY,TIME,DECISION)" +" VALUES(?,?,?,?)"); ps.setInt(1, id); ps.setString(2, day); ps.setString(3, time); ps.setInt(4, bool); //INSERT文の実行 ps.execute(); //ステートメントをクローズ ps.close(); } catch (Exception e) { System.out.println("例外が発生しました。"); e.printStackTrace(); try{ if(ps != null){ ps.close(); } if(con != null){ con.close(); } } catch(SQLException se){ decision=false; } }//catch }//closeと例外の共通処理終了 public static boolean isDecision() { return decision; } } decisionがfalseだった場合はエラーページを表示としてあるのですが。。。 書き方が悪いのでしょうか? | ||||
|
投稿日時: 2008-10-02 09:49
1つ目のcatchで捕捉されているので、2つ目のcatchの中に書かれているdecisionを偽にするコードは必ず実行されるとは限らないですよね?
ところで、MySQLのJDBCドライバのJavaDocはどこで読めますか?mysql.comのリンクをざっと探したけど見つけられなかった・・・ | ||||
|
投稿日時: 2008-10-02 10:01
本当ですね。 1つ目に変更してみたところ無事できました。 /*例外処理*/ } catch (SQLException e) { decision=false; } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try{ if(ps != null){ ps.close(); } if(con != null){ con.close(); } } catch (SQLException e) { e.printStackTrace(); } }//catch }//closeと例外の共通処理終了 -------------------------------------------------------------------------------- ところで、MySQLのJDBCドライバのJavaDocはどこで読めますか?mysql.comのリンクをざっと探したけど見つけられなかった・・・ -------------------------------------------------------------------------------- あまりおっしゃってることが理解できません。 すいません。大分初心者なもので..... | ||||
|
投稿日時: 2008-10-02 11:42
SQLExceptionはネットワークの切断など、重複以外の要因でも発生します。
現象を切り分けるにはSQLExceptionのgetErrorCodeメソッドを使う必要があります。 | ||||
|
投稿日時: 2008-10-02 12:19
>sawatさん
一般的にはそうですね。 でも「MySQLIntegrityConstraintViolationException」はSQLExceptionのサブクラスではないのでしょうか? それを調べようと思ってJavadocを探していたのですが。 | ||||
|
投稿日時: 2008-10-02 12:31
つ24.4. MySQL Connector/J(mysql.com) #お望みの品かどうかは分からないけど... 追記: javadocね。上述のサイトはちがうわ。 「mysql jdbc javadoc」の検索で、 http://www.docjar.com/docs/api/com/mysql/jdbc/overview-summary.html が引っ掛かった程度 [ メッセージ編集済み 編集者: かずくん 編集日時 2008-10-02 12:38 ] |